GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection...
-
Upload
oscar-brouwer -
Category
Documents
-
view
218 -
download
0
Transcript of GSP1 2008-2009 Labo 03 Tree: Parent Child Mesh. Doelstelling Implementatie van View en Projection...
GSP1 2008-2009
Labo 03Tree: Parent Child Mesh
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.
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.
View Matrix
• “Camera positie en kijkrichting”• DirectX SDK Documentatie:
View Matrix
• Parameters:– Plaats van Oog, Doel, en richting van bovenkant
van camera• DirectX Implementatie:
Projection Matrix
• “Camera kijkhoek”• DirectX SDK Documentatie:
Projection Matrix
• “Camera kijkhoek”• Parameters:– Kijkhoek, Aspect Ratio, Near en Far Clipping Plane
• DirectX Implementatie:
Later…
• Toevoeging van Camera klasse– Heeft View en Projection Matrix als datamembers– Kan bewegen, translatie en rotatie– Kan in- en uitzoomen
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)
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
Tree
Leaf
Node
Node
Node
Leaf
Leaf Leaf Leaf
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:
Tree: World matrices
• Het voorwerp wordt geroteerd:
• Het voorwerp wordt verplaatst:
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.
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
Node1m_World
Node2m_World
Node3m_World
Leaf2m_World
Algoritme:
Tree: Overzicht Klasses
TreeElement
TreeNode TreeD3DObject
TreeTransformNode MultiMesh …
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
Tree: Overzicht Klasses
TreeElement
TreeNode TreeD3DObject
TreeTransformNode MultiMesh …
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”
Tree: Overzicht Klasses
TreeElement
TreeNode TreeD3DObject
TreeTransformNode MultiMesh …
•Is afgeleid van de TreeNode•Heeft methods:• Rotate• Translate• Scale•Wordt gebruikt om alle children te:• transleren • roteren• scalen
TreeTransformNode
Tree: Overzicht Klasses
TreeElement
TreeNode TreeD3DObject
TreeTransformNode MultiMesh …
•Is afgeleid van TreeElement(basisklasse)•Is “Leaf” in de boomstructuur•Heeft methods:• Rotate• Translate• Scale•Heeft pure virtual functions:• Tick, Draw, OnResetDevice, OnLostDevice
TreeD3DObject
Tree: Overzicht Klasses
TreeElement
TreeNode TreeD3DObject
TreeTransformNode MultiMesh …
• Is Afgeleid van de TreeD3DObject klasse• Implementeert:– Draw, Tick, OnResetDevice en OnLostDevice– SetMaterialColor(r,g,b,a), Init en Cleanup
MultiMesh
Voorbeeld: Assenstelsel
• Zichtbare componenten:– Cubus op oorsprong van assenstelsel– 3 cylinders die de assen voorstellen– 3 cylinders die de pijlpunten voorstellen
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.
AssenstelselTNode1
Box TNode2
TNodeZ-As
PijlPunt PijlPunt
TNode TNode
Y-As
X-As
Pijlpunt
AssenstelselTNode1
Box TNode2
TNodeZ-As
PijlPunt PijlPunt
TNode TNode
Y-As
X-As
Postioneert het assenstelsel tov de rest van de wereld
Pijlpunt
AssenstelselTNode1
Box TNode2
TNodeZ-As
PijlPunt PijlPunt
TNode TNode
Y-As
X-As
Schaalt en roteert het assenstelsel tov
TNode1
Pijlpunt
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
Assenstelsel
Z-As
Pijlpunt PijlPunt PijlPuntY-As
X-As
Alle Assen en Pijlpunten:
Enkel een verplaatsing over de eigen z-as is
nodig.
Opbouw Assenstelsel:
• Default locatie van de cilinder:
• Gecentreerd rond middelpunt van de World(zie box)
• Lengte richting is Z
Opbouw Assenstelsel:
• Translatie van het MultiMesh Cilinder object op de Z-As
Opbouw Assenstelsel:
• Aanmaken van TransformNode:– Roteert children
rond y-as– Rode cilinder wordt
child
Opbouw Assenstelsel:
• Toevoegen van Pijlpunt voor x-as
• Geen translaties• Nog niet als child
aan Transformnode toegevoegd.
Opbouw Assenstelsel:
• Translatie van pijlpunt langs z-as.
• Nog geen child van transformnode
Opbouw Assenstelsel:
• Pijlpunt toegevoegd aan TreeTransformNode