Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Motor I. Scene graph XML Rendering Szécsi László.

Hasonló előadás


Az előadások a következő témára: "Motor I. Scene graph XML Rendering Szécsi László."— Előadás másolata:

1 Motor I. Scene graph XML Rendering Szécsi László

2 Letöltés www.iit.bme.hu/~szecsi/GraphGame /code/E/code/EggCoreFirstBase2005.zip vagy grafjatek.blog.hu kibontani: új folderbe

3 Próba több egyforma entitás

4 Osztályok EngineCore control() animate() render() EntityDirectoryMeshDirectoryEntityD3DXMeshTextureDirectoryD3DTextureShadedMeshDirectoryShadedMesh EngineInterface CubeTextureDirectoryD3DCubeTexture

5 Nézzük a kódot! Directory.h konténer definíciók EngineCore osztály konténer tagváltozók

6 Osztályok EngineCore control() animate() render() EntityDirectoryEntityNodeGroupNode control() animate() render() entityDirectory sceneRoot subNodes

7 Nézzük a kódot! EngineCore osztály Node* sceneRoot; Node osztály Entity & NodeGroup közös interfacee NodeGroup osztály Gyerekek: std::vector subnodes; Entity osztály

8 Kamerák EngineCore control() animate() render() CameraDirectoryCamera EngineInterface FreeCameraEntityCameraCFirstPersonCameraEntity

9 Nézzük a kódot! EngineCore CameraDirectory cameraDirectory; CameraDirectory::iterator currentCamera; Camera általunk használt mátrixok lekérése FreeCamera mindent tovább a CFirstPersonCamerának EntityCamera: kamera entitáshoz kötve

10 Entity-ShadedMesh-Role-Material Entity ModelMatrix render(camera, effect) Material apply(effect) D3DTextureShadedMesh render(effect) D3DXMesh drawSubset() roles D3DXEffect setMatrix() setTexture() setTechnique() setMatrix setTexture setTechnique Role render(effect) materials

11 Nézzük a kódot! Material milyen technique const std::string techniqueName; milyen nevű shaderparamétereket mire kell állítani TextureDirectory textureEffectVariables; apply fentiek beállítása

12 Nézzük a kódot! Role egy material minden submeshre lesz egy konstruktor, ami az.x fileból vett material buffer alapján megcsinál minden Materialt

13 Nézzük a kódot! ShadedMesh melyik mesh milyen anyagokkal (minden Role egy lehetőség erre) ‘basic’ role lesz csak egyelőre

14 Nézzük a kódot! Entity shadedMesh referencia + pozíció (ez később nem kell, mert az Entity leszármazottai pl. a PhysX- től kérik le, hogy hol is vannak, de a mai laborra kell, hogy az entitásaink ne egymáson legyenek)

15 XML betöltés EngineCore metódusai createManagedResources loadLevel sorra betölt mindent a konténerekbe

16 levelCore.xml

17 Új ShadedMesh “

18 Próba Egyik űrhajó más textúrával

19 Feladatok alaptechinka bővítése színparaméterrel –steel textúrát használó arany/réz űrhajók új shader –env mapping-es űrhajó env map rajzolás háttérbe bővítés fényforrásokkal –XML-ben megadható fények –"basic" technique kiegészítése fényforrások kezelésével

20 Bővítés színparaméterrel új Directory típus: VectorDirectory typedef std::map VectorDirectory; Material osztályba –vectorEffectVariables tag VectorDirectory vectorEffectVariables; –setVector metódus void setVector(const std::string& vectorName, const D3DXVECTOR4& value); –apply kiegészítése

21 Bővítés színparaméterrel void Material::setVector(const std::string& vectorName, const D3DXVECTOR4& value) { vectorEffectVariables[vectorName] = value; }

22 Bővítés színparaméterrel // apply kiegészítése { // … VectorDirectory::iterator i = vectorEffectVariables.begin(); while(i != vectorEffectVariables.end()) { effect->SetVector( i->first.c_str(), &i->second); i++; }

23 Bővítés színparaméterrel XML betöltő kiegészítése ilyeneket tudjon betölteni: csak példa, nem kell másolni sehova – mint texture tag –D3DXVECTOR4 behozása xmlNode.readVector4(L”kdColor”);

24 Betöltés kiegészítése EngineCore void loadVectorVariables(XMLNode& materialNode, Material* material);

25 Beltöltés implementáció void EngineCore::loadVectorVariables(XMLNode& materialNode, Material* material) { int iVector = 0; XMLNode vectorNode; while( !(vectorNode = materialNode.getChildNode(L"Vector", iVector)).isEmpty() ) { D3DXVECTOR4 value = vectorNode.readVector4(L"value", D3DXVECTOR4(1, 1, 1, 1)); if(vectorNode||L"name") material->setVector(vectorNode||L"name", value); iVector++; }

26 void EngineCore::loadShadedMeshes (XMLNode& xMainNode) loadTextureVariables( materialNode, material); loadCubeTextureVariables( materialNode, material); loadVectorVariables( materialNode, material);

27 Bővités színparaméterrel:.fx új uniform param (standard.fx): float4 kdColor; psBasic-ben moduláljunk: return kdColor * tex2D(…

28 XML “

29 Gond: a többi is zöldes lesz, mert nincs soha átállítva a kdColor Tehát az.x fileből gyártott shadedmeshben is állítsuk be Role::Role(LPD3DXBUFFER materialBuffer, unsigned int nSubmeshes, TextureDirectory& textureDirectory, LPDIRECT3DDEVICE9 device, const std::string& techniqueName){ … material->setTexture("kdMap", texture); material->setVector("kdColor", D3DXVECTOR4(1, 1, 1, 1));

30 Próba Különböző színű űrhajók


Letölteni ppt "Motor I. Scene graph XML Rendering Szécsi László."

Hasonló előadás


Google Hirdetések