Megjelenítő-motor, színtér- menedzsment Szécsi László.

Slides:



Advertisements
Hasonló előadás
2010/2011 ősz Klár Gergely  A DirectX egy alacsonyszintű API gyűjtemény  Multimédiás alkalmazások futtatására, írására szolgál  Részei.
Advertisements

Operációs Rendszerek I.
GraphGame gg001-Triangle
Programozás III STRING-XML.
C++ programozási nyelv Gyakorlat hét
Programozás III KOLLEKCIÓK 2..
Lua script Szécsi László
Virtuális világ tárolása Szirmay-Kalos László. Belső világ tárolása l Geometria: pontok koordinátái l Topológia: élek-pontok; lapok-pontok;... l hierarchia:
Mesh betöltés, kirajzolás Szécsi László. dx11-ben nincs – játékfejlesztők írnak maguknak úgyis DXUT-ban van – CDXUTSDKMesh – csak sdkmesh formátumot tud.
Öröklődés 2..
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
Vizuális modellezés Uml és osztálydiagram UML eszközök
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények,
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Parancssori argumentumok Primitív típusok Operátorok Vezérlési szerkezetek Tömbök Ürmös Beáta, 2011.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
C# tagfüggvények.
JSP és JavaBean JavaServer Pages és Java Beans Fabók Zsolt Általános Informatikai Tanszék Miskolci Egyetem.
C# tagfüggvények.
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
Delphi programozás 8. ELŐADÁS ADO ActiveX Data Objects.
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
Ficsor Lajos CPP6 / 1 Virtuális bázisosztály Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
1 Operációs rendszerek Az NT folyamatok kezelése.
Számítógépes grafika 3. gyakorlat.
Rendezések és szövegkezelő függvények
A PHP 5 újdonságai Az OOP terén. Miről lesz szó? Osztályok kezelése – Új direktívák – Konstruktor – Destruktor Interfészek Kivételkezelés.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
DirectX9 empty project Szécsi László. Visual Studio Első indításkor C++ választása.
Motor I. Scene graph XML Rendering Szécsi László.
Environment mapping Szécsi László. Új osztály: Lab3EnvMap copy&paste: Lab2Trafo.h -> Lab3EnvMap.h copy&paste: Lab2Trafo.cpp -> Lab3EnvMap.cpp copy&paste:
Számítógépes grafika Bevezetés
Kamera, 3D, transzformációk Szécsi László. Math.zip kibontása az Egg projectkönyvtárba – float2, foat3, float4 típusok, HLSL-ben megszokott műveletekkel.
Plakátok, részecskerendszerek Grafikus játékok fejlesztése Szécsi László g09-billboard.
Grafikus játékok fejlesztése Szécsi László g10-engine
Effect framework, HLSL shader László Szécsi. forráskódban elérhető egyszerűsíti a shaderek fordítását, rajzolási állapot beállítását – pass: egy ilyen.
OO framework, Egg util library László Szécsi. Projektek nem osztoznak semmilyen kódon – DXUT mindegyikben – effect betöltés, mesh betöltés, GUI mindegyikbe.
Geometry instancing Szécsi László. copy-paste-rename gg009-Gui folder vcxproj, filters átnevezés solution/add existing project rename project working.
User interface Szécsi László. Egg projectben DXUTgui.cpp – CDXUTDialogResourceManager::CDXUTDialogReso urceManager() m_SpriteBufferBytes11 = 0; ezt kihagyták,
Textúrázás Szécsi László. giraffe.jpg letöltése SolutionDir/Media folderbe.
3. előadás.  Apache szerver tudnivalók  Az index.php .htaccess – web-szerverünk beállításai  Konfigurációs állományok  Adatbázis kapcsolódás beállítása.
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
2. Gyakorlat Zalatnai Csongor
Apache Ant 2. gyakorlat Alkalmazásfejlesztés /2 Gyakorlat Zalatnai Csongor.
RAD Studio XE5: menük felépítése
Gyurkó György. Az állapotmodellezés célja Általánosságban ugyanaz, mint a többi dinamikus modellezési technikáé: Jobban megismerni a problémát. Finomítani.
Objektumorientált alapjai ISZAM III.évf. részére Bunkóczi László.
DLL használata és készítése Feladat
Objektum orientált programozás 4. Mutatók, típusok és struktúrák Nagy Szilvia.
Opencms modul fejlesztés Krizsán Zoltán. Modulok fajtái Nincs előírás, csak tipikus tennivalók: –Content type: új típus(oka)t vezet be. –Template: új.
Programozás III ÖTLETEK A FELADATMEGOLDÁSHOZ. A HF-EK APROPÓJÁN Néhány javaslat: 1. Jó lenne, ha a feladatmegoldás előtt átnéznék az előadás-anyagokat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Programozás III JPA.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Karakter Animáció és Kontroller Unity. Kezdeti lépések Alap projekt letöltése Egy statikus geometriát láthatunk Meg vannak a fizikai befoglalók is.
Neumann János Informatikai Kar
„Designer-barát” játéklogika
DirectoryEntry & DirectorySearcher
gg004-Mesh project copy-paste-rename gg002-App folder
Kamera, 3D, transzformációk Szécsi László
Sw2 PhysX.
JavaScript a böngészőben
Direct3D DirectCompute
OO framework, Egg util library László Szécsi
Environment mapping Szécsi László
Előadás másolata:

Megjelenítő-motor, színtér- menedzsment Szécsi László

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ó – párok gyűjteménye Mesh::Mien – üzemmód-azonosító: pl: basic, deferred, shadowMap üzemmódok lehetnek

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

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

envmappedGiraffeMaterial->set( effect ->GetVariableByName("kdTexture")) ->AsShaderResource() ->SetResource( loadSrv("giraffe.jpg") ); envmappedGiraffeMaterial->set( effect ->GetVariableByName("envTexture")) ->AsShaderResource() ->SetResource( loadSrv("cloudyNoon.dds") );

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

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

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

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

Directory – map ManagerApp : public SasApp – erőforrás és színtérkezelés – egy csomó Directory adattag – Directory entities; - ez a színtérreprezentációnk Entity alaposztály, StaticEntity implementáló Paraméter-struktúrák

map > typedef helyett privát öröklés, de az eredmény kábé ugyanaz DxResourceDirectory – D3Ds COM objektumok tárolására – sima pointerek, nem shared – van releaseAll függvény

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 hivatkozva van Ugyanazon a néven különböző típusok külön tárolókban lehetnek (giraffe indexed, multi)

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 – effect pass + beállítások multiMeshes – kézzel…. lehetne fileból is? – színtérelemek entitások, kamerák

MienDirectory miens; – ez egy sima értékeket tartalmazó map, semmi shared pointer – ebben vannak az üzemmódjaink azonosítói – getMien(string mienName) 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

loadSrv(string filename, string alias) – megkeresi a filet a media könyvtárakban – megnézi, bent van-e a directoryban már ha igen, visszadja azt – betölti a fileból a textúrát D3DX11CreateShaderResourceViewFromFile – eltárolja a directoryban (path, alias neveken) – visszaadja loadIndexedMesh – ugyanez csak AssImppal tölt be egy mesht

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 (effect pass-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!

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

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

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

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

van hozzá egy Mesh::Multi – ez a “render komponens”, ez tudja mit kell rajzolni 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] – fizikai szimulációból [PhysicsEntity]

modelMatrix tagváltozó translate, rotate-tel állítgatható összes függvény ez alapján adja vissza a az eredményt

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

copy-paste-rename gg011-Particles folder vcxproj, filters átnevezés solution/add existing project rename project working dir: $(SolutionDir) Project Properties/Configuration Properties/Debugging/Command Arguments --solutionPath:"$(SolutionDir)" --projectPath:"$(ProjectDir)" build, run

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

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

é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);

geopod multimesh fileból (media/geopod.x) – loadMultiMesh több geopod entitás létrehozása

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 multiMesh 0-s submesh-e – a másodikat rakjuk össze nulláról, mint a zsiráfét a másodikban envmapped materiallal – a kdTexture legyen white.png, nem a zsiráfpacák