43
GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh

GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Embed Size (px)

Citation preview

Page 1: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

GSP1 2008-2009

Labo 03Tree: Parent Child Mesh

Page 2: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Doelstelling

• Implementatie van View en Projection matrices

• Kennismaking met enkele nieuwe klassen uit het 3D Framework.

• Leren werken met een Tree klassenstructuur• Een samengesteld 3D object maken.

Page 3: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

View- en Projection Matrix

• Elk object in de 3D ruimte heeft een positie en rotatie tov de oorsprong -> World Matrix.

• Om een object vanuit een andere hoek en plaats te bekijken, moet het verplaatst en geroteerd worden->View Matrix.

• Om perspectief toe te passen (hoe verder een voorwerp, hoe kleiner) gebruiken we een Projection Matrix.

Page 4: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

View Matrix

• “Camera positie en kijkrichting”• DirectX SDK Documentatie:

Page 5: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

View Matrix

• Parameters:– Plaats van Oog, Doel, en richting van bovenkant

van camera• DirectX Implementatie:

Page 6: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Projection Matrix

• “Camera kijkhoek”• DirectX SDK Documentatie:

Page 7: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Projection Matrix

• “Camera kijkhoek”• Parameters:– Kijkhoek, Aspect Ratio, Near en Far Clipping Plane

• DirectX Implementatie:

Page 8: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Later…

• Toevoeging van Camera klasse– Heeft View en Projection Matrix als datamembers– Kan bewegen, translatie en rotatie– Kan in- en uitzoomen

Page 9: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit
Page 10: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Tree

• Wa t: Een verzameling van objecten met een parent-child relatie.

• Waarom?– Samengestelde objecten: één referentiepunt– Voorbeeld: assenstelsel: wat als het zou moeten

roteren of rondjes draaien?– Vereenvoudigen van rotaties en translaties– Optimaliseren van Renderproces (later)

Page 11: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Tree

• Een Tree heeft Nodes en Leafs (knopen en bladeren)• Nodes:

– 1 Parent– Children: verschillende nodes en/of leafs– World Matrix– Onzichtbaar

• Leaf:– 1 Parent– GEEN Children– World Matrix– Zichtbaar object

Page 12: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Tree

Leaf

Node

Node

Node

Leaf

Leaf Leaf Leaf

Page 13: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Tree: World matrices

• Elke node en object heeft een World Matrix

• De World Matrix van een “Leaf” is het product van eigen World matrix met alle Parent World matrices.

• Voorbeeld: We starten met een object op de oorsprong van het assenstelsel, geen rotatie, geen scale:

Page 14: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Tree: World matrices

• Het voorwerp wordt geroteerd:

• Het voorwerp wordt verplaatst:

Page 15: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Voorbeeld World Matrix

• We volgen m_World:• Eerst Initialisatie• Vermenigvuldiging met Rotatiematrix• Vermenigvuldiging met TranslatieMatrix• Enz….• Besluiten:– Object komt op positie door opeenvolging van

vermenigvuldigingen van eigen World Matrix met andere matrices.

– Volgorde van vermenigvuldigingen is belangrijk.

Page 16: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Leaf1m_World

Node1m_World

Node2m_World

Node3m_World

Leaf2m_World

Leaf1: m_World berekening: (pseudo code)m_World.Translate….Rotate…m_World *= Node2.m_Worldm_World *= Node1.m_World

Leaf2: m_World berekening:

m_World.Translate….Rotate…m_World *= Node3.m_Worldm_World *= Node2.m_Worldm_World *= Node1.m_World

Page 17: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Node1m_World

Node2m_World

Node3m_World

Leaf2m_World

Algoritme:

Page 18: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Tree: Overzicht Klasses

TreeElement

TreeNode TreeD3DObject

TreeTransformNode MultiMesh …

Page 19: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

TreeElement

•Is Basis klasse waaruit de Tree is opgebouwd•Datamembers:• TreeElement *m_pParent;• Is de link met bovenliggend element.

• D3DXMATRIX m_World;•Member functions:• GetParent en SetParent, Get- en SetWorldMatrix• ResetWorldMatrix• CalculateWorldTransform• Berekent world matrix adh van alle parent-world

matrices.• Pure Virtual (moeten door afgeleide klassen worden

geïmplementeerd): • Draw, Tick, OnLostDevice en OnResetDevice

Page 20: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Tree: Overzicht Klasses

TreeElement

TreeNode TreeD3DObject

TreeTransformNode MultiMesh …

Page 21: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

TreeNode

•Is knooppunt in de boomstructuur•Afgeleid van TreeElement:• m_pParent,m_World en CalculateWorldTransform•Std::vector met Child objecten:• Vector<TreeElement*>m_Children•Methods Tick, Draw, OnLostDevice en OnResetDevice:• Callen van al hun children de method met dezelfde

naam.•“Onzichtbaar”

Page 22: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Tree: Overzicht Klasses

TreeElement

TreeNode TreeD3DObject

TreeTransformNode MultiMesh …

Page 23: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

•Is afgeleid van de TreeNode•Heeft methods:• Rotate• Translate• Scale•Wordt gebruikt om alle children te:• transleren • roteren• scalen

TreeTransformNode

Page 24: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Tree: Overzicht Klasses

TreeElement

TreeNode TreeD3DObject

TreeTransformNode MultiMesh …

Page 25: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

•Is afgeleid van TreeElement(basisklasse)•Is “Leaf” in de boomstructuur•Heeft methods:• Rotate• Translate• Scale•Heeft pure virtual functions:• Tick, Draw, OnResetDevice, OnLostDevice

TreeD3DObject

Page 26: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Tree: Overzicht Klasses

TreeElement

TreeNode TreeD3DObject

TreeTransformNode MultiMesh …

Page 27: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

• Is Afgeleid van de TreeD3DObject klasse• Implementeert:– Draw, Tick, OnResetDevice en OnLostDevice– SetMaterialColor(r,g,b,a), Init en Cleanup

MultiMesh

Page 28: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Voorbeeld: Assenstelsel

• Zichtbare componenten:– Cubus op oorsprong van assenstelsel– 3 cylinders die de assen voorstellen– 3 cylinders die de pijlpunten voorstellen

Page 29: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Voorbeeld: Assenstelsel Klasse

• Is afgeleid van de TreeTransformNode klasse– Bevat dus reeds een world matrix, waarmee het object een plaats

rotatie en scale kan hebben.– Methods:

• Build() : gebruikt MeshShapes om een assenstelsel te bouwen• Cleanup()? NEE: door overerving gaat de TreeTransformNode alle child

objecten deleten!

• Componenten:– TransformNode die het geheel nog eens kan transleren roteren en

schalen, heeft als children:– Drie Transformnodes die de cylinders zo positioneren dat ze de xy en

z as voorstellen en een box– Elk van de drie transformnodes heeft een as en pijlpunt als children.

Page 30: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

AssenstelselTNode1

Box TNode2

TNodeZ-As

PijlPunt PijlPunt

TNode TNode

Y-As

X-As

Pijlpunt

Page 31: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

AssenstelselTNode1

Box TNode2

TNodeZ-As

PijlPunt PijlPunt

TNode TNode

Y-As

X-As

Postioneert het assenstelsel tov de rest van de wereld

Pijlpunt

Page 32: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

AssenstelselTNode1

Box TNode2

TNodeZ-As

PijlPunt PijlPunt

TNode TNode

Y-As

X-As

Schaalt en roteert het assenstelsel tov

TNode1

Pijlpunt

Page 33: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

AssenstelselTNode1

Box TNode2

TNodeYZ-As

PijlPunt PijlPunt

TNodeX TNodeZ

Y-As

X-As

Roteert tov TNode2 zodat de drie

cylinder-assen correct zijn

georiënteerd

Pijlpunt

Page 34: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Assenstelsel

Z-As

Pijlpunt PijlPunt PijlPuntY-As

X-As

Alle Assen en Pijlpunten:

Enkel een verplaatsing over de eigen z-as is

nodig.

Page 35: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Opbouw Assenstelsel:

• Default locatie van de cilinder:

• Gecentreerd rond middelpunt van de World(zie box)

• Lengte richting is Z

Page 36: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Opbouw Assenstelsel:

• Translatie van het MultiMesh Cilinder object op de Z-As

Page 37: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Opbouw Assenstelsel:

• Aanmaken van TransformNode:– Roteert children

rond y-as– Rode cilinder wordt

child

Page 38: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Opbouw Assenstelsel:

• Toevoegen van Pijlpunt voor x-as

• Geen translaties• Nog niet als child

aan Transformnode toegevoegd.

Page 39: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Opbouw Assenstelsel:

• Translatie van pijlpunt langs z-as.

• Nog geen child van transformnode

Page 40: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit

Opbouw Assenstelsel:

• Pijlpunt toegevoegd aan TreeTransformNode

Page 41: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit
Page 42: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit
Page 43: GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection matrices Kennismaking met enkele nieuwe klassen uit