Download de presentatie
De presentatie wordt gedownload. Even geduld aub
1
Labo 03 Tree: Parent Child Mesh
GSP Labo 03 Tree: Parent Child Mesh
2
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.
3
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.
4
View Matrix “Camera positie en kijkrichting” DirectX SDK Documentatie:
5
View Matrix Parameters: DirectX Implementatie:
Plaats van Oog, Doel, en richting van bovenkant van camera DirectX Implementatie:
6
Projection Matrix “Camera kijkhoek” DirectX SDK Documentatie:
7
Projection Matrix “Camera kijkhoek” Parameters: DirectX Implementatie:
Kijkhoek, Aspect Ratio, Near en Far Clipping Plane DirectX Implementatie:
8
Later… Toevoeging van Camera klasse
Heeft View en Projection Matrix als datamembers Kan bewegen, translatie en rotatie Kan in- en uitzoomen
10
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)
11
Tree Een Tree heeft Nodes en Leafs (knopen en bladeren) Nodes: Leaf:
1 Parent Children: verschillende nodes en/of leafs World Matrix Onzichtbaar Leaf: GEEN Children Zichtbaar object
12
Tree Node Node Leaf Leaf Node Leaf Leaf Leaf
13
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:
14
Tree: World matrices Het voorwerp wordt geroteerd:
Het voorwerp wordt verplaatst:
15
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.
16
Leaf1: m_World berekening: (pseudo code) m_World. Translate…
Leaf1: m_World berekening: (pseudo code) m_World.Translate….Rotate… m_World *= Node2.m_World m_World *= Node1.m_World Leaf2: m_World berekening: m_World.Translate….Rotate… m_World *= Node3.m_World m_World *= Node2.m_World m_World *= Node1.m_World Node1 m_World Node2 m_World Leaf1 m_World Node3 m_World Leaf2 m_World
17
Algoritme: Node1 m_World Node2 m_World Node3 m_World Leaf2 m_World
18
Tree: Overzicht Klasses
TreeElement TreeNode TreeD3DObject TreeTransformNode MultiMesh …
19
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
20
Tree: Overzicht Klasses
TreeElement TreeNode TreeD3DObject TreeTransformNode MultiMesh …
21
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”
22
Tree: Overzicht Klasses
TreeElement TreeNode TreeD3DObject TreeTransformNode MultiMesh …
23
TreeTransformNode Is afgeleid van de TreeNode Heeft methods: Rotate Translate Scale Wordt gebruikt om alle children te: transleren roteren scalen
24
Tree: Overzicht Klasses
TreeElement TreeNode TreeD3DObject TreeTransformNode MultiMesh …
25
TreeD3DObject Is afgeleid van TreeElement(basisklasse) Is “Leaf” in de boomstructuur Heeft methods: Rotate Translate Scale Heeft pure virtual functions: Tick, Draw, OnResetDevice, OnLostDevice
26
Tree: Overzicht Klasses
TreeElement TreeNode TreeD3DObject TreeTransformNode MultiMesh …
27
Is Afgeleid van de TreeD3DObject klasse Implementeert:
MultiMesh Is Afgeleid van de TreeD3DObject klasse Implementeert: Draw, Tick, OnResetDevice en OnLostDevice SetMaterialColor(r,g,b,a), Init en Cleanup
28
Voorbeeld: Assenstelsel
Zichtbare componenten: Cubus op oorsprong van assenstelsel 3 cylinders die de assen voorstellen 3 cylinders die de pijlpunten voorstellen
29
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.
30
Assenstelsel TNode1 Box TNode2 TNode TNode TNode Z-As X-As Y-As
PijlPunt PijlPunt Pijlpunt
31
Postioneert het assenstelsel tov de rest van de wereld
TNode1 Postioneert het assenstelsel tov de rest van de wereld Box TNode2 TNode TNode TNode Z-As X-As Y-As PijlPunt PijlPunt Pijlpunt
32
Schaalt en roteert het assenstelsel tov TNode1
Box TNode2 TNode TNode TNode Z-As X-As Y-As PijlPunt PijlPunt Pijlpunt
33
Assenstelsel TNode1 Box TNode2 TNodeX TNodeY TNodeZ Z-As X-As Y-As
Roteert tov TNode2 zodat de drie cylinder-assen correct zijn georiënteerd Box TNode2 TNodeX TNodeY TNodeZ Z-As X-As Y-As PijlPunt PijlPunt Pijlpunt
34
Assenstelsel Alle Assen en Pijlpunten:
Enkel een verplaatsing over de eigen z-as is nodig. Z-As X-As Y-As PijlPunt PijlPunt Pijlpunt
35
Opbouw Assenstelsel: Default locatie van de cilinder:
Gecentreerd rond middelpunt van de World(zie box) Lengte richting is Z
36
Opbouw Assenstelsel: Translatie van het MultiMesh Cilinder object op de Z-As
37
Opbouw Assenstelsel: Aanmaken van TransformNode:
Roteert children rond y-as Rode cilinder wordt child
38
Opbouw Assenstelsel: Toevoegen van Pijlpunt voor x-as Geen translaties
Nog niet als child aan Transformnode toegevoegd.
39
Opbouw Assenstelsel: Translatie van pijlpunt langs z-as.
Nog geen child van transformnode
40
Opbouw Assenstelsel: Pijlpunt toegevoegd aan TreeTransformNode
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.