1 / 22

Grafikus Rendszerek

Grafikus Rendszerek. Zsitnyánszki Zoltán. Vectorok hossza. A (x,y). 2 dimenziós: ||v|| = √(x 2 +y 2 ). v. 3 dimenziós: ||v|| =√(x 2 +y 2 +z 2 ). Inverz vektor. v. -v. Vekorok összegzése. u. v. v. u+v. u. Vektorok kívonása. -u. v. v. u. v+( -u ). Vektorok szorzása. v.

Download Presentation

Grafikus Rendszerek

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. 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óka 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. Graphicspipeline Vertexstream Vertexshader 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 vertexshadert 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 idexbufferbe és összeköti a megfelelő pontokat.

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

  18. XNA rajzoló függvényei II. • GraphicsDevice.DrawPrimitives<T>(PrimitiveTypeprimitiveType, T[] vertexData, int vertexOffset, intprimitiveCount); • T: vertexek típusa • vertexData : vertexek • vertexOffset = startVertex • GraphicsDevice.DrawUserIndexedPrimitives<T>(PrimitiveTypeprimitiveType, T[] vertexData, int vertexOffset, intnumVertices,int[] indexData, intindexOffset, intprimitiveCount); • 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 • http://www.riemers.net/eng/Tutorials/xnacsharp.php • http://creators.xna.com/en-US/

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

More Related