D3D, DXUT primer. Grafikus játékok fejlesztése Szécsi László t01-system

Hasonló dokumentumok
Direct3D interface. Grafikus játékok fejlesztése Szécsi László t04-pipecontrol

HLSL programozás. Grafikus játékok fejlesztése Szécsi László t06-hlsl

Direct3D pipeline. Grafikus játékok fejlesztése Szécsi László t03-pipeline

HLSL programozás. Szécsi László

Plakátok, részecskerendszerek. Szécsi László

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Geometriai modellezés. Szécsi László

Textúrák. Szécsi László

Grafikus csővezeték és az OpenGL függvénykönyvtár

2D képszintézis. Szirmay-Kalos László

2. Generáció ( ) 3. Generáció (2001) NVIDIA TNT2, ATI Rage, 3dfx Voodoo3. Klár Gergely

Tanács Attila. Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Bevezetés a CGI-be. 1. Történelem

Párhuzamos és Grid rendszerek

Farkas Gyula Szakkollégium Bit- és számtologatók. DirectX9 1. Szín, fény, textúra 2. Stencil buffer használata (tükörkép, hamis árnyék)

Pénzügyi algoritmusok

Google Summer of Code OpenCL image support for the r600g driver

Grafikus csővezeték 1 / 44

Klár Gergely 2010/2011. tavaszi félév

Számítógépes Graka - 4. Gyak

OpenGL Compute Shader-ek. Valasek Gábor

Árnyalás, env mapping. Szécsi László 3D Grafikus Rendszerek 3. labor

Tanács Attila. Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

A számítógépes grafika inkrementális képszintézis algoritmusának hardver realizációja Teljesítménykövetelmények:

Grafikus csővezeték (Általános áttekintés) Grafikus csővezeték (Általános áttekintés)

GPGPU. Architektúra esettanulmány

GPGPU. GPU-k felépítése. Valasek Gábor

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Farkas Gyula Szakkollégium Bit- és számtologatók. DirectX9 felhasználása számítógépes grafikában (bevezető egy primitív keretrendszer)

Grafikus csővezeték 2 / 77

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

ARM Cortex magú mikrovezérlők

Tartalomjegyzék. Köszönetnyilvánítás... xv. Előszó... xvii. 1. Bevezető D-történelem Matematikai alapok... 7

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

Diplomamunka. Miskolci Egyetem. GPGPU technológia kriptográfiai alkalmazása. Készítette: Csikó Richárd VIJFZK mérnök informatikus

Operációs rendszerek. UNIX fájlrendszer

GPU Lab. 14. fejezet. OpenCL textúra használat. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

1. Bevezetés 1. Köszönetnyilvánítás A számítógépes játékfejlesztésről 3

2. GYAKORLAT THONET-ASZTAL

Számítógépes grafika

GPGPU alapok. GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai

Haladó Grafika EA. Inkrementális képszintézis GPU-n

The modular mitmót system. DPY kijelző kártya C API

Fraktálok és káosz. Szirmay-Kalos László

Videókártya - CUDA kompatibilitás: CUDA weboldal: Példaterületek:

Általános áttekintés. A módszer lényege

Alkalmazott Informatikai Tanszék SZÁMÍTÓGÉP-PROGRAMOZÁS dr.dudás László 21./0. 3D grafika programozása OpenGL támogatással A 3D API

HARDVERESEN GYORSÍTOTT 3D/2D RENDERELÉS

Adat- és feladat párhuzamos modell Az ISO C99 szabvány részhalmaza

Szoftvertechnológia alapjai Java előadások

Programozás I gyakorlat

Mesh from file, OrthoCamera, PerspectiveCamera. Szécsi László 3D Grafikus Rendszerek 3. labor

Valasek Gábor

Magas szintű optimalizálás

OOP #14 (referencia-elv)

Első lépések. File/New. A mentés helyét érdemes módosítani! Pl. Dokumentumok. Fájlnév: pl. Proba

Egyenlőtlenségi mérőszámok alkalmazása az adatbányászatban. Hajdu Ottó BCE: Statisztika Tanszék BME: Pénzügyek tanszék Budapest, 2011

OpenCL - The open standard for parallel programming of heterogeneous systems

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

Bevezetés a programozásba Előadás: A const

Általános áttekintés. Általános áttekintés

Játékfejlesztés a Windows Phone 7 erejével

A C programozási nyelv I. Bevezetés

A Memory Interface Generator (MIG) beállítása a Logsys Kintex-7 FPGA kártyához

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

Utolsó módosítás:

Geocache API teszt verzió v1.0 by gusty

Felhasználó által definiált adattípus

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Véletlen szám generálás Labirintus felépítése 1x1-es felbontástól a teljes méretig

SHADOW MAPPING MODERN GPU-KON

Számítógépek felépítése

(Solid modeling, Geometric modeling) Testmodell: egy létező vagy elképzelt objektum digitális reprezentációja.

Weblog elemzés Hadoopon 1/39

Játékfejlesztés. Szirmay-Kalos László

Jelszavak helyes megválasztása, szótáras törés. Pánczél Zoltán

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Python tanfolyam Python bevezető I. rész

2. Gyakorlat Khoros Cantata

PovRay. Oktatási segédlet

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Programozó Meta riasztókhoz és Activepark parkolásérzékelőhöz

Hozzunk ki többet abból amink van. Fehér Lajos

Készítette: Oláh István mestertanár

LabView Academy. 4. óra párhuzamos programozás

Programozás III GRAFIKA RAJZOLÁS SWING FELÜLETEN RAJZOLÁS GRAFIKA HASZNÁLATA. Rajzolni az awt csomag Graphics osztályának metódusaival tudunk.

GPU Lab. 11. fejezet. Vizualizáció. Lectures on Modern Scientific Programming Wigner RCP November D. Berényi M. F.

Számítógépes grafika

Klár Gergely 2010/2011. tavaszi félév

Analitikai megoldások IBM Power és FlashSystem alapokon. Mosolygó Ferenc - Avnet

Adatbázis-kezelés. Harmadik előadás

Eichhardt Iván GPGPU óra anyagai

A C programozási nyelv I. Bevezetés

Szegedi Tudományegyetem Informatikai Tanszékcsoport SZAKDOLGOZAT. Vadász László

Programozási nyelvek Java

A Számítógépek hardver elemei

Szegedi Tudományegyetem Informatikai Tanszékcsoport tanév

Java II. I A Java programozási nyelv alapelemei

Átírás:

D3D, DXUT primer Grafikus játékok fejlesztése Szécsi László 2013.02.13. t01-system

Háromszögháló reprezentáció Mesh Vertex buffer Index buffer Vertex buffer csúcs-rekordok tömbje pos normal tex pos normal tex pos normal tex vertex

Primitívek összeállítása non-indexed vertex bufferben egymás után következők triangle list triangle strip 1 2 3 4 5 6 1 2 3 4 5 2 5 2 4 1 3 4 6 1 3 5

Indexelt primitívek Index buffer egészek tömbje Indexed primitive index bufferben egymás utáni következő indexekhez tartozó vertexek list, strip előny kényelmes nem kell strip hogy gyors legyen

RESOURCES PIPELINE STAGES RENDER STATES Vertex buffer Instance buffer Constant buffers and textures Index buffer Constant buffers and textures Output buffer Constant buffers and textures Render target Render target textures target textures Depth-stencil texture Input Assembler I. input streaming vertex data, instance data Vertex Shader processed vertex data Input Assembler II. primitive setup primitive data Geometry Shader primitive strip data Rasterizer face culling depth bias adjustment clipping homogenous division viewport transformation output filtering fragments with interpolated data Fragment Shader fragment color and depth Output merger stencil test depth test blending Input layout Shader program Uniform parameters Primitive type Shader program Uniform parameters Cull mode Depth bias Viewport Fill mode Filtering Shader program Uniform parameters Depth-stencil state Blending state

GPU pipeline input vertex buffer index buffer rajzolási állapot egyes pipeline-elemek működési beállításai programozható elemek shader programjai erőforrások globális memóriában adatok globális (uniform) változók textúrák adatbufferek csak olvasható

GPU pipeline output kép render target stb frame buffer textúra

Minimális GPU pipeline IA VS IA RS PS OM textúra cache TS globális eszközmemória konstansok adatbuffer textúra

Minimális rajzolási állapot IA VS IA RS PS OM input layout primitive topology

A pipeline vezérlése erőforrások allokálása vertex buffer, index buffer, textúrák rajzolási állapot beállítása..., culling, blending,... shader programok, uniform változók HLSL forrás alapján működés indítása draw call

Direct3D API - device eszköz [device] a grafikus kártya memóriájának absztrakciója erőforrások kezelésére szolgáló felület ID3D11Device interface ID3D11Device* device;

Direct3D API - context kontextus [context] a pipelineelemek állapotának absztrakciója rajzolási állapot beállítására, rajzolásra szolgáló felület alapvetően egy van belőle egy devicehoz immediate context deferred context többszálú működéshez jó ID3D11DeviceContext interface ID3D11DeviceContext* context;

DXUT DirectX utility toolkit olyan mint az OpenGLhez a GLUT oprendszer funkciók elrejtése (ablaknyitás pl.) sokkal többet tud ezért bonyolultabb de a magja ugyanaz általunk írt callback függvények regisztrálása vezérlés átadása eseményekkor meghívja a mi callback függvényeinket

Eszköz-események létrejött [CreateDevice] program indulásakor új ablak [ResizedSwapChain] induláskor, új oprendszer-összerendeléskor (pl. átméretezés után) régi ablak eltűnik [ReleasingSwapChain] hiba esetén, az oprendszer-felület változásakor (pl. átméretezéskor) megszűnt [DestroyDevice]

Erőforrás-gazdálkodás create, resized létrehozás destroy, releasing felszabadítás típusok vertex, index buffer ID3D11Buffer textúra ID3D11Texture2D cube texture, 3D texture

Erőforrásszerű állapotcsomagok ezeket is a device metódusaivla hozzuk létre és a context metódusaival választjuk ki input layout ID3D11InputLayout VB elemek és VS inputok összrendelése vertex shader program pixel shader program ID3D11VertexShader ID3D11PixelShader RasterizerState, BlendState, DepthStencilState

Erőforrás-kezelési módok (usage) immutable létrehozáskor inicializálható, utána csak olvasható dynamic rátölthetünk új adatot akár minden frameben default nem tölthetünk rá, de szerepelhet a pipelineban mint kimenet (pl. render-to-texture) staging CPU memóriában van, átmásolható bele egy default erőforrás tartalma ha olvasni akarjuk

Melyik usage mikor kell? immutable betöltött, fix dolgok, modellek, textúrák dynamic mozgó dolgok, részecskerendszerek default GPU outputként is szereplő elemek staging vészhelyzetben

Erőforrások kötési módjai (bind) vertex buffer pipeline bemenet index buffer pipeline bemenet shader resource shader olvashat belőle render target kép kerülhet bele

Vertex buffer létrehozása D3D11_BUFFER_DESC desc; desc.usage = D3D11_USAGE_IMMUTABLE; desc.bindflags = D3D11_BIND_VERTEX_BUFFER; desc.bytewidth = sizeof(d3dxvector3) * 3; desc.structurebytestride = sizeof(d3dxvector3); D3DXVECTOR3 vertexpositionarray[3] = { D3DXVECTOR3(0, 0, 0.5), D3DXVECTOR3(0, 1, 0.5), D3DXVECTOR3(1, 0, 0.5) }; D3D11_SUBRESOURCE_DATA initdata; initdata.psysmem = vertexpositionarray; pd3ddevice->createbuffer( &desc, &initdata, &vertexbuffer);

Vertex Shader létrehozása const char* vertexshadercode = "float4 vsidle(float4 pos :POSITION ) :SV_Position {return pos;}"; ID3DBlob* vertexshaderbytecode; D3DX11CompileFromMemory(vertexShaderCode, strlen(vertexshadercode), NULL, NULL, NULL, "vsidle", "vs_5_0", 0, 0, NULL, &vertexshaderbytecode, NULL, NULL); pd3ddevice->createvertexshader( vertexshaderbytecode->getbufferpointer(), vertexshaderbytecode->getbuffersize(), NULL, &vertexshader);

Input layout létrehozása D3D11_INPUT_ELEMENT_DESC positionelement; positionelement.alignedbyteoffset = 0; positionelement.format = DXGI_FORMAT_R32G32B32_FLOAT; positionelement.inputslot = 0; positionelement.inputslotclass = D3D11_INPUT_PER_VERTEX_DATA; positionelement.semanticname = "POSITION"; positionelement.semanticindex = 0; pd3ddevice->createinputlayout( &positionelement, 1, vertexshaderbytecode->getbufferpointer(), vertexshaderbytecode->getbuffersize(), &inputlayout);

Erőforrások felszabadítása COM objektumok referenciaszámlált createvalami növeli a referenciszámlálót ha végeztünk vele valami->release(); csökkenti a referenciaszámlálót ha máshol sem kell már fel lesz szabadítva

Rajzolás OnFrameRender esemény context metódusainak hívásával be kell állítani render target render state shaderek, uniform paraméterek textúrák vertex, index buffer draw call

Rajzolás ekkorát kell lépni a következő vertexhez unsigned int stride = sizeof(d3dxvector3); unsigned int offset = 0; context->iasetvertexbuffers(0, 1, &vertexbuffer, &stride, &offset); context->iasetprimitivetopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); context->iasetinputlayout(inputlayout); context->vssetshader(vertexshader, NULL, 0); context->pssetshader(pixelshader, NULL, 0); innen kezdve 1 db VB elemek értelmezése context->draw(3, 0); ennyi vertexet innen kezdve