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

Grafikus Rendszerek Zsitnyánszki Zoltán.

Hasonló előadás


Az előadások a következő témára: "Grafikus Rendszerek Zsitnyánszki Zoltán."— Előadás másolata:

1 Grafikus Rendszerek Zsitnyánszki Zoltán

2 Vectorok hossza A (x,y) 2 dimenziós: ||v|| = √(x2+y2) v 3 dimenziós:
||v|| =√(x2+y2+z2)

3 Inverz vektor v -v

4 Vekorok összegzése u v v u+v u

5 Vektorok kívonása -u v v u v+(-u)

6 Vektorok szorzása v v v v 3v

7 skalár szorzat Skalárszorzat esetén két vektort szorzunk össze, az eredmény egy szám mely a két vektor és a közbezárt szög(hajlásszög) közötti összefüggést tükrözi u * v = ||u||*||v||*cosα v α u

8 Kereszt szorzat A vektoriális szorzat eredménye egy újabb vektor, amely merőleges mindkét vektorra u x v = ||u||*||v||*sinα v α u

9 Mátrix műveletek

10 Kvaterniók http://hu.wikipedia.org/wiki/Kvaterni%C3%B3k
A matematikában a kvaterniók a komplex számok négy dimenzióra történő nem kommutatív kiterjesztései

11 Koordiáta rendszerek y y z x x z Bal kezes koordináta rendszer
Pl. XNA, OpenGl Jobb kezes koodináta rendszer Pl.DirectX Kétdimenziós helyvektor: P2d=( x , y ) Homogén koordináta: P2d=( x*w , y*w , w ) Háromdimenziós homogén koordináta: P3d=( x*w , y*w , z*w , w )

12 Háromdimenziós képszintézis

13 FrameBuffer Két Framebuffer van Front és Back( 2dimenziós tömb amelynek 1 elemének nagysága attól függ milyen színmélységet használunk) A Frontbufferbe azon adatok láthatóak a képernyőn Backbufferbe rajzolunk Ha végeztünk a rajzolással a két Framebuffert megcseréljük így amit rajzoltunk a képernyőre kerül ha ez a csere több mint 24-szer történik az emberi szem mozgóképnek érzékeli A Framebuffer 1ms alatti cseréjének számosságát az fps (frame per second) reprezentálja

14 Graphics pipeline Vertex stream Vertex shader Vágás, Interpolálás,
Transzformáció Pixel shader Monitor Index stream A Vertexbufferbe belekerülnek a vertexek és az indexbufferbe az indexek. Az összes vertexre alkalmazzák a vertex shadert majd következik a virtuális tér 2 dimenzióra történő leképzése a Backbufferbe. A leképzés után minden pixelre végrehajtódik a pixel shader. A Backbuffer és a Frontbuffer megcserélődik ezáltal az elkészített kép a képernyőre kerül.

15 Rajzolás számítógéppel
Minden test (ház, ember…stb) a virtuális térben poligonokkal(háromszögek) tudunk ábrázolni (drótváz model). A rajzolást 3 különböző szakaszra tudjuk bontani inicializálás, frissítés, rajzolás. Inicializálás: a kezdő vertex pontok és indexek meghatározása, a shadereks fények beállítása (kezdő állapot betöltése) Frissítés: valamilyen állapotváltozás (bill leütés,idő…stb) hatására a vertex és index adatok újra beállítása Rajzolás: a rajzoláshoz szükséges állapotok beállítása és a grafikus hardver történő rajzolás

16 Rajzolás XNA-val A rajzoláshoz az XNA lefoglalja magának a videókártyát és a memóriájába bemásolja a vertexeket és indexeket. Majd a amikor meghívjuk a Draw() függvényt az indexbuffer első elemére ugrik, az ott lévő számot beszorozza a vertexdeclaration-ba megadott elemek méretével és a vertexbufferbe arra a pontra ugrik,majd egy kiveszi a megfelelő byte mennyiséget. A buffert ezután megpróbálja felosztani vertexdeclaration-ba megadott elemekre. Ezután kirajzolja a vertex-et. PrimitivType-nak megfelelően tovább lép az idex bufferbe és összeköti a megfelelő pontokat.

17 XNA rajzoló függvényei I.
Szükséges feltétel a VertexBuffer és IndexBuffer használata vertexbuffer beállítása:GraphicsDevice.Vertices[i]. SetSource() indexbuffer beállítása: Indices.SetData<T>() GraphicsDevice.DrawPrimitives(PrimitiveType primitiveType, int startVertex, int primitiveCount); primitiveType: a primitív típusa; startVertex: A vertex kezdete a vertexbufferbe primitiveCount: primitive-.ek száma GraphicsDevice.DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount); baseVertex: azt mutatja meg melyik indexű elemtől kezdjük a számolást a vertexbufferbe minVertexIndex = startVertex numVertices :hány vertexel dolgozunk /kezdő vertex száma = baseVertex+minVertexIndex / startIndex :Az indexek kezde az indexbufferbe

18 XNA rajzoló függvényei II.
GraphicsDevice.DrawPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount); T: vertexek típusa vertexData : vertexek vertexOffset = startVertex GraphicsDevice.DrawUserIndexedPrimitives<T> (PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices,int[] indexData, int indexOffset, int primitiveCount); indexData : az indexek indexOffset: a kezdő index helye az indexbufferbe

19 RenderState Fog(köd): a tárgyakat amiket már nem kívánunk megjeleníteni a távolságuk miatt nem egyszerűen „kivágjuk” a jelenetből hanem egy színnel(köd) a távolságával arányosan lekeverjük így nem olyan látványosan tűnik el. CullMode(hátsó lap eldobás): minden 3szögre kiszámoljuk a normál vektorát és ami a kamera irányába mutat azt eldobjuk. FillMod(kitöltés): választhatunk hogy miként jelenítjük meg a jelenetet csak a vertexeket jelenítjük meg(POINT), vertexeket és az összekötő vonalakat(WIREFRAME), vertexek és az összekötő vonalak átal határolt területet textúrázva vagy színezve(SOLID). A wireframe megjelenítést debuggolásra szokták használni,alapesetbe Solid megjelenítést alkalmazunk. AlphaBlend (alpha csatornás átlátszóság):alpha csatorna szerinti átlátszóságot engedélyezhetjük illetve állíthatjuk be vele.

20 A Windows működése A windowsba az ablakokat egy azonosító úgynevezett HANDLE alapján tudjuk azonosítani Az inputot(egér,bill.) úgy dolgozza fel hogy generál egy eseményt és az aktuális ablaknak a WNDPROC függvényét meghívja ezzel az eseménnyel. Ha nem tudja feldolgozni az eseményt akkor tovább adja az ősablakának. Ezt úgy nevezzük hogy felelősség lánc. Ha az ősablaka maga a windows vagy ha az ablak feldolgozza az üzenetet akkor megáll a lánc. Ha az ablak feldolgoz egy üzenetet akkor lehetősége van újból elindítani a láncot azaz az ősének továbbadni az eseményt.

21 Hasznos linkek http://rbwhitaker.wikidot.com/xna-tutorials

22 1. beadandó: valamilyen windows control megírása+ event
2. beadandó: valamilyen UI megírása eseménnyel 3. beadandó: személyre szabott feladat


Letölteni ppt "Grafikus Rendszerek Zsitnyánszki Zoltán."

Hasonló előadás


Google Hirdetések