1 / 31

GraphGame gg0 1 3- Scene

GraphGame gg0 1 3- Scene. Megjelenítő-motor, s z íntér-menedzsment Szécsi László. Egg / Mesh /Multi. Mesh ::Multi többanyagos, több üzemmódos háromszögháló Mesh::Flip gy űjtemény Mesh ::Flip több üzemmódos háromszögháló < Mien , Mesh::Shaded> p árok gyűjteménye Mesh :: Mien

shani
Télécharger la présentation

GraphGame gg0 1 3- Scene

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GraphGamegg013-Scene Megjelenítő-motor, színtér-menedzsment SzécsiLászló

  2. Egg/Mesh/Multi • Mesh::Multi • többanyagos, több üzemmódos háromszögháló • Mesh::Flip gyűjtemény • Mesh::Flip • több üzemmódos háromszögháló • <Mien, Mesh::Shaded> párok gyűjteménye • Mesh::Mien • üzemmód-azonosító: pl: basic, deferred, shadowMapüzemmódok lehetnek

  3. Mesh::Multi építése • a következő diákon • Mesh::Indexed, Mesh::Material, Mesh::Shaded létrehozása, ez nem újdonság • A Material nem csak egy pass beállításáról szól: effect változó beállítások is lehetnek • ezek az apply meghívásakor állítódnak be • Flip és Multi létrehozása, egyelőre egy üzemmód van a Flipben, és egy Flip a Multiban

  4. Geometria és anyag Egg::Mesh::Indexed::P indexedMesh = loadIndexedMesh("giraffe.obj"); ID3DX11EffectPass* envmappedPass = effect ->GetTechniqueByName("envmapped") ->GetPassByName("envmapped"); Egg::Mesh::Material::P envmappedGiraffeMaterial = Egg::Mesh::Material::create(envmappedPass, 0);

  5. Anyag effect-beállításai envmappedGiraffeMaterial->set( effect ->GetVariableByName("kdTexture")) ->AsShaderResource() ->SetResource( loadSrv("giraffe.jpg") ); envmappedGiraffeMaterial->set( effect ->GetVariableByName("envTexture")) ->AsShaderResource() ->SetResource( loadSrv("cloudyNoon.dds") );

  6. Mesh::Shaded Egg::Mesh::Shaded::P shadedMesh = binder->bindMaterial( envmappedGiraffeMaterial, indexedMesh);

  7. Mesh::Flip Egg::Mesh::Mien basicMien; Egg::Mesh::Flip::P giraffeFlipMesh = Egg::Mesh::Flip::create(); giraffeFlipMesh->add( basicMien, shadedMesh);

  8. Mesh::Multi Egg::Mesh::Multi::P giraffeMultiMesh = Egg::Mesh::Multi::create(); giraffeMultiMesh->add( giraffeFlipMesh);

  9. Hol tartunk ezzel? • a giraffeMultiMesh rajzolása pont ugyanazt eredményezi, mint a shadedMesh rajzolása • de lehetne több üzemmódot és több, eltérő módon rajzolt geometriát hozzáadni • összetettebb modellre is jó lesz • AssImp: többanyagos mesh-t több meshként importál • minden meshből csinálunk egy Flip-et, a flipeket berakjuk a multiba

  10. Egg/Scene osztályai • Directory<Valami> • map<string, Valami::P> • ManagerApp: public SasApp • erőforrás és színtérkezelés • egycsomó Directory adattag • Directory<Entity> entities; - ez a színtérreprezentációnk • Entity alaposztály, StaticEntity implementáló • Paraméter-struktúrák

  11. Directory • map<string, boost::shared_ptr<T> > • typedef helyett privát öröklés, de az eredmény kábé ugyanaz • DxResourceDirectory • D3Ds COM objektumok tárolására • simapointerek, nem shared • van releaseAll függvény

  12. FIGYELEM! • Senki sem tiltja, hogy ugyanaz az objektum több néven is szerepeljen • shared pointer miatt a felszabadítás is jó lesz • Nem muszáj mindenkinek szerepelni a saját típusának a tárolójában • pl. Mesh::Indexed élhet úgy is, hogy nincs neve, de egy Mesh::Multi-ban valahol hivatkozvavan • Ugyanazon a néven különböző típusok külön tárolókban lehetnek (giraffe indexed, multi)

  13. ManagerApp • tárolók • erőforrások: olyasmiket tárolhatunk név szerint , amiket egyszer szeretnénk létrehozni aztán többször felhasználni • shaderResourceViews – fileból betöltött textúrák • indexedMeshes – fileból betöltött geometriák • materials – effectpass + beállítások • multiMeshes – kézzel…. lehetne fileból is? • színtérelemek • entitások, kamerák

  14. Üzemmódok • MienDirectorymiens; • ez egy sima értékeket tartalmazó map, semmi shared pointer • ebben vannak az üzemmódjaink azonosítói • getMien(stringmienName) metódus • ha van már ilyen nevű, azt adja vissza • ha nincs, csinál egy újat, és letárolja • pl. getMien("basic") inicializáláskor • futásidőben nincs string

  15. Betöltő függvények • loadSrv(string filename, string alias) • megkeresi a filetamedia könyvtárakban • megnézi, bent van-e a directoryban már • ha igen, visszadja azt • betölti a filebóla textúrát • D3DX11CreateShaderResourceViewFromFile • eltárolja a directoryban (path, alias neveken) • visszaadja • loadIndexedMesh • ugyanez csak AssImppal tölt be egy mesht

  16. Mesh::Multi betöltése • modellfileban több submesh, anyaginfó • AssImp ebből több aiMesh-t, aiMaterial-t gyárt • ezek alapján már tudunk Mesh::Material-t, Mesh::Shaded-et gyártani • ha tudjuk, milyen shaderekkel (effectpass-szal) akarjuk rajzolni, és ott melyik textúrát, ill. anyagjellemzőt hogy kell bekötni • mindezt tudjuk minden üzemmódra • de ezt nem szeretnénk kőbe vésni!

  17. loadMultiMesh • ha már van ilyen a tárolóban, adjuk vissza azt • ha nincs, betöltés AssImppal • hozzunk létre egy Mesh::Multi-t • minden aiMeshre • indexed létrehozása, tárolás alias[i] néven • hozzunk létre egy Mesh::Flipet • pakoljunk bele Mesh::Shaded-eket, ahány üzemmódot akarunk támogatni • adjuk hozzá a Flipet a Multihoz • adjuk vissza a Multit virtualaddDefaultShadedMeshes

  18. addDefaultShadedMeshes • virtuális – később változtathatjuk, hogy milyen üzemmódok, azokhoz milyen shaderek legyenek • alapimplementáció: minden Flipben • 1 üzemmód: basic • textured/texturedeffectpass • kdTexture beállítása az anyag diffúz textúrája alapján

  19. ManagerApp::cameras • kamerák gyűjteménye

  20. ManagerApp::cameras • kamerák gyűjteménye • currentCamera • iterátor • mindig, amikor új kamerát rakunk a tárolóba, frissíteni kell az iterátort • processMessage • ‘B’ lenyomására váltsunk kamerát

  21. ManagerApp::entities • ManagerApp::render és ManagerApp::animate végighívja az elemeit • render metódus paraméterei a RenderParameters struktúrában • fix elemek a ManagerApp::createResources-ban beállítva • változó elemek a render-ben

  22. Entity alaposztály • van hozzá egy Mesh::Multi • ez a “render komponens”, eztudjamitkellrajzolni • render metódus • transzformációk beállítása • multimesh rajzolása • transzformációk lekérdezésére tisztán virtuális metódusok (leszármazott osztálytól függ) • lehet fixen adott [StaticEntity] • fizikaiszimulációból[PhysicsEntity]

  23. StaticEntity • modelMatrixtagváltozó • translate, rotate-tel állítgatható • összes függvény ez alapján adja vissza a az eredményt

  24. FELADAT • hozzunk létre egy új projectet • amiben a Game osztály az Egg::Scene::ManagerApp-ból származik • minden eseménykezelő csakhívja az ős hasonló metódusát • createResources-ben építsünk színteret entitásokból

  25. gg013-RenderEngine project • copy-paste-rename gg011-Particles folder • vcxproj, filters átnevezés • solution/add existing project • rename project • working dir: $(SolutionDir) • Project Properties/ConfigurationProperties/Debugging/CommandArguments --solutionPath:"$(SolutionDir)" --projectPath:"$(ProjectDir)" • build, run

  26. 0. részfeladat • kamera létrehozása • berakni a kamera directoryba • currentCamera= cameras.begin(); • legyen több kameraés váltogassunk B-vel

  27. 1. részfeladat • zsiráf multimesh építése (lásd a diákat a diasor elején) • zsiráf példányok (entitások) létrehozása • entities-be tegyük be őket • legyen textúrázott és envmappelt zsiráf is • több anyag létrehozása • többféle multimesh létrehozása ugyanazzal a geometriával, más anyaggal • különböző entitások eltérő multimeshsel

  28. 2. részfeladat • égbolt multimesh építése • mint a zsiráf, csak más material és indexedMesh • envTexture : cloudyNoon.dds • Egg::Mesh::Indexed::P indexedQuad = Egg::Mesh::Indexed::createQuad(device);

  29. 3. részfeladat • geopodmultimeshfileból (media/geopod.x) • loadMultiMesh • több geopod entitás létrehozása

  30. 4. részfeladat • geopod entitás építése kódból • 2 db submesh van, 2 db Flip-et kell hozzáadni • az első simán a fileból szedett multiMesh0-s submesh-e • a másodikat rakjuk össze nulláról, mint a zsiráfét • a másodikban envmappedmateriallal • a kdTexture legyen white.png, nem a zsiráfpacák

  31. Eredmény

More Related