3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program...

23
3D Programming and 3D Programming and DirectX API DirectX API

Transcript of 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program...

Page 1: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

3D Programming and DirectX 3D Programming and DirectX APIAPI

Page 2: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

ContentContent

• MathematicsMathematics

• Prepare to Write a 3D programPrepare to Write a 3D program

• Program StructureProgram Structure

• How does the computer calculate 3D How does the computer calculate 3D image?image?

• IllustrationIllustration

• Other Features in DirectX LibraryOther Features in DirectX Library

Page 3: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

MathematicsMathematics

• Don’t worry! If you see this chapter in the Don’t worry! If you see this chapter in the book, just skip it, because you’ve learned.book, just skip it, because you’ve learned.

• Importance of “Transform”Importance of “Transform”– TranslationTranslation– RotationRotation– ScalingScaling– …………

• Vector & MatrixVector & Matrix• Other Advanced AlgorithmOther Advanced Algorithm

Page 4: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Prepare to Write a 3D Prepare to Write a 3D programprogram

• Using Direct3DUsing Direct3D• Compiler - VS.NET 2003Compiler - VS.NET 2003• Download DirectX SDKDownload DirectX SDK

– http://http://msdn.microsoft.com/library/default.asp?urlmsdn.microsoft.com/library/default.asp?url=/library/en-us/=/library/en-us/dnanchor/html/anch_directx.aspdnanchor/html/anch_directx.asp

– DirectX 9.0 SDK Update - (February 2005)DirectX 9.0 SDK Update - (February 2005)

• An Easy BookAn Easy Book• MSDN – http://www.msdn.comMSDN – http://www.msdn.com

Page 5: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Program StructureProgram Structure

• Initialize D3D Library – Create DeviceInitialize D3D Library – Create Device

• Loading or Building ModelLoading or Building Model

• Set Light, Material, and TextureSet Light, Material, and Texture

• Calculate Transform Matrix, View Calculate Transform Matrix, View Matrix , and Projection MatrixMatrix , and Projection Matrix

• Render!Render!

Page 6: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Initialize D3D LibraryInitialize D3D Library

• IDirect3D9*IDirect3D9*• Direct3DCreate9(D3D_SDK_VERSION)Direct3DCreate9(D3D_SDK_VERSION)• IDirect3DDevice9*IDirect3DDevice9*• CreateDevice()CreateDevice()

IDirect3D *IDirect3D *CreateDevice()CreateDevice()Direct3DCreate9()Direct3DCreate9()

D3DLibrarD3DLibraryy

IDirect3DDevice9*IDirect3DDevice9*

3D Device( 3D 3D Device( 3D Card)Card)

Page 7: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

How does the computer How does the computer calculate 3D image?calculate 3D image?

• CPU and GPU (Graphic Process Unit)CPU and GPU (Graphic Process Unit)

• 3D Library – OpenGL and 3D Library – OpenGL and Direct3DDirect3D

Page 8: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

How does the computer How does the computer calculate 3D image? calculate 3D image?

• PipelinePipeline

Data in Model Space World

Space

World Matrix

View Matrix

Projection Matrix

CPU GPU

Camera Space

View Space

(your screen)

Vertex Data

Light, Texture, Material

Page 9: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Loading and Building ModalLoading and Building Modal

• Vertex/Index BufferVertex/Index Buffer

• The Structure of VertexThe Structure of Vertex

V1

V2

V3

V4

V1

V2

V3

V4

1 2 3 1 4 2 …

Index Buffer

Vertex Buffer

Page 10: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

struct Vertexstruct Vertex{{ float x, y, z;float x, y, z; float nx, ny, nz;float nx, ny, nz; float u, v; // texture coordinatesfloat u, v; // texture coordinates};};#define FVF_VERTEX (#define FVF_VERTEX (D3DFVF_XYZD3DFVF_XYZ | | D3DFVF_NORMALD3DFVF_NORMAL | | D3DFVF_TEX1D3DFVF_TEX1))Demo 1-TexCubeDemo 1-TexCube

Loading and Building ModalLoading and Building Modal

X Y Z nX nY nZ U V …

Page 11: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Loading and Building ModalLoading and Building Modal

• X-fileX-file– When the model is complex, we can’t build When the model is complex, we can’t build

it in our code.it in our code.– Using 3D graphic tool, ex. Maya, 3D studio MUsing 3D graphic tool, ex. Maya, 3D studio M

AX, Lightwave, AX, Lightwave, MilkShakeMilkShake– Direct3D have already provide funcs to load Direct3D have already provide funcs to load

and parse X-fileand parse X-file– Static Model and Animation ModelStatic Model and Animation Model

Page 12: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Set Light, Material, and Set Light, Material, and TextureTexture

• Light - light sourceLight - light sourceD3DLIGHT9 light;D3DLIGHT9 light;light.Type = D3DLIGHT_DIRECTIONAL;light.Type = D3DLIGHT_DIRECTIONAL;light.Ambient = D3DXCOLOR(0.8f, 0.8f, 0.8f, 1.0f);light.Ambient = D3DXCOLOR(0.8f, 0.8f, 0.8f, 1.0f);light.Diffuse = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);light.Diffuse = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);light.Specular = D3DXCOLOR(0.2f, 0.2f, 0.2f, 1.0f);light.Specular = D3DXCOLOR(0.2f, 0.2f, 0.2f, 1.0f);light.Direction = D3DXVECTOR3(1.0f, -1.0f, 0.0f);light.Direction = D3DXVECTOR3(1.0f, -1.0f, 0.0f);

Demo 2-TexCube 3-TexCube 4-TexCube

Page 13: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Set Light, Material, and Set Light, Material, and TextureTexture

• Material – reflection of light Material – reflection of light

{1.0, 1.0, 0.0, 1.0} {1.0, 0.0, 1.0, 1.0} {0.0, 1.0, 1.0, 1.0}Demo EffetEdit

Page 14: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Set Light, Material, and Set Light, Material, and TextureTexture

• Texture – surface of 3D objectTexture – surface of 3D object

Demo 4-Tex 5-Tex

Page 15: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Calculate World Matrix, View Calculate World Matrix, View Matrix , and Projection MatrixMatrix , and Projection Matrix

• World MatrixWorld Matrix– D3DXMatrixTranslation(…)D3DXMatrixTranslation(…)– D3DXMatrixRotationX(…)D3DXMatrixRotationX(…)– D3DXMatrixIdentity(…)D3DXMatrixIdentity(…)– D3DXMatrixScaling(…)D3DXMatrixScaling(…)

Page 16: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Calculate World Matrix, View Calculate World Matrix, View Matrix , and Projection MatrixMatrix , and Projection Matrix

• View MatrixView Matrix– D3DXMatrixLookAtLH(&V, &position, D3DXMatrixLookAtLH(&V, &position,

&target, &up);&target, &up);

Page 17: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Calculate World Matrix, View Calculate World Matrix, View Matrix , and Projection MatrixMatrix , and Projection Matrix

• Projection MatrixProjection MatrixD3DXMatrixPerspectiveFovLH();D3DXMatrixPerspectiveFovLH();

Page 18: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Demo 7-TexCube 8-TexCube

Page 19: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Render!!Render!!

• Prepare for renderPrepare for renderDevice->SetTransform(Device->SetTransform(D3DTS_VIEWD3DTS_VIEW, &V);, &V);

Device->SetTransform(Device->SetTransform(D3DTS_WORLDD3DTS_WORLD, &V);, &V);

Device->SetTransform(Device->SetTransform(D3DTS_PROJECTIOND3DTS_PROJECTION, &V);, &V);

• Start and Finish RenderStart and Finish RenderDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xff

ffffff, 1.0f, 0);ffffff, 1.0f, 0);

Device->BeginScene();Device->BeginScene();

…………./* render render render !!!! */…../* render render render !!!! */….

Device->EndScene();Device->EndScene();

Page 20: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Render !!Render !!

if( mtrl )if( mtrl )device->SetMaterial(mtrl);device->SetMaterial(mtrl);

if( tex )if( tex )device->SetTexture(0, tex);device->SetTexture(0, tex);

device->SetStreamSource(0, _vb, 0, sizedevice->SetStreamSource(0, _vb, 0, sizeof(Vertex));of(Vertex));device->SetIndices(_ib);device->SetIndices(_ib);device->SetFVF(FVF_VERTEX);device->SetFVF(FVF_VERTEX);device->DrawIndexedPrimitive(device->DrawIndexedPrimitive(

D3DPT_TRIANGLELIST, D3DPT_TRIANGLELIST, 0, 0, 0, 0, 24,24,0,0,12); 12);

Set MaterialSet Texture

Set Index Buffer

Tell D3D your vertex formatJust Draw It!!

Page 21: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

More SkillMore Skill

• Terrain – Height MapTerrain – Height Map• ShadowShadow• Other Algorithm…Other Algorithm…• Good website :Good website :

www.gamedev.netwww.gamedev.net

Page 22: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

SamplesSamples

• AirplaneAirplane• Walking ManWalking Man• BasicHLSLBasicHLSL • ShadowVolumeShadowVolume

• TerrainTerrain

Page 23: 3D Programming and DirectX API. Content Mathematics Mathematics Prepare to Write a 3D program Prepare to Write a 3D program Program Structure Program.

Other Features in DirectX Other Features in DirectX LibraryLibrary

• DirectPlayDirectPlay– Network GameNetwork Game

• DirectSoundDirectSound– Handle sound effectHandle sound effect