|
@ 2004-05-24 @
ϸ鼭 ; Ʈ
¥ (5) ȿ ⺻̶ , ̷ƮX ʰ ߿ؿ!! 1 Ƽ(1/5): ̷Ʈ 3D-20030901/ ⺻â / ﰢ #0901-0.DirectX 0901-1.⺻â
<>
LPDIRECT3D9 g_pD3D = NULL; // Used to create the D3DDevice
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // Our rendering device
g_pD3D = Direct3DCreate9( D3D_SDK_VERSION );
g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice );
5.Device Clear Ѵ.
<>
// Clear the backbuffer to a blue color
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
scene
// Present the backbuffer contents to the display
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
6.α ݵ ڿ
<> Device
g_pd3dDevice->Release();
g_pD3D->Release();
0901-2.ﰢ
<>
// A structure for our custom vertex type
struct D3DLVERTEX
// Our custom FVF, which describes our custom vertex structure{
FLOAT x, y, z, rhw; // The transformed position for the vertex
};DWORD color; // The vertex color
#define D3DFVF_D3DLVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
D3DLVERTEX vertices[] = {
{ 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color
};{ 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, }, { 50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, }, <> g_pd3dDevice->BeginScene(); {
g_pd3dDevice->SetFVF( D3DFVF_D3DLVERTEX );
}g_pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLELIST, 1, vertices, sizeof(D3DLVERTEX) ); g_pd3dDevice->EndScene(); 2 Ƽ(2/5): ̷Ʈ 3D-20030902/ ȯƮ/ () / ؽ, ε #0902-1.ȯƮ
Model --(WorldTM)--> World --(ViewTM)--> View --(ProjectTM)--> Viewport
ȭ鿡 ϱ ؼ ܰ ȯ Ʈ ȴ. Ʈ 3D ؼ ȯ Ʈ , ŭ API ̴.
1) Device->SetTransform(D3DTS_WORLD, &mat);
-1.ȯƮ ; Ʈ ϰ Ǹ ֺ 0.0 - 1.0 Ƿ 2) Device->SetTransform(D3DTS_VIEW, &mat); 3) D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f ); Ʈ
Device->SetTransform(D3DTS_PROJECTION, &mat);
4) GetviewDevice->SetFVF( D3DFVF_D3DLVERTEX );
ǥ( ũ) Űϸ, Ǵ ũ⸦ ϴ .
#define D3DFVF_D3DLVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE);
//#define D3DFVF_D3DLVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE); - ȭ鿡 ٷ
RHW ȯ ϱ , RHW Ѵ. --> ü
D3DXMATRIXA16 matWorld; // world ǥ ȭ Ʈ
D3DXMatrixRotationY( &matWorld, fAngle ); // Ʈ ȯ(ȸ, ̵)
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
// ----------> world ǥ ȭ
D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f );
D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
D3DXMATRIXA16 matView; // view ǥ ȭ Ʈ
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
// ----------> view ǥ ȭ
D3DXMATRIXA16 matProj; // ǥ ȯ Ʈ
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
-2.ø Ʈ ʱ ; ų ʴ Ȯϱ
// Device state would normally be set here
g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE ); // Culling
-3. ; ۸ clear ŲĿ g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE ); // Light
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
// Begin the scene// End the scene
g_pd3dDevice->EndScene();
0902-2.; ȿ Ÿ ʴ´.
void SetupMaterial()
{
D3DMATERIAL9 mtrl;
}ZeroMemory( &mtrl, sizeof(D3DMATERIAL9) ); mtrl.Diffuse.r = mtrl.Ambient.r = 1.0f; mtrl.Diffuse.g = mtrl.Ambient.g = 0.0f; mtrl.Diffuse.b = mtrl.Ambient.b = 0.0f; mtrl.Diffuse.a = mtrl.Ambient.a = 1.0f; g_pd3dDevice->SetMaterial( &mtrl ); 0902-3.; Ȯ ȿ ؼ 븻Ͱ ʼ
void SetupLight()
{
D3DXVECTOR3 vecDir; // type D3DLIGHT_DIRECTIONAL̹Ƿ ʿ
// Finally, turn on some ambient light.D3DLIGHT9 light; ZeroMemory( &light, sizeof(D3DLIGHT9) ); light.Type = D3DLIGHT_DIRECTIONAL; // D3DLIGHT_POINT = 1 light.Diffuse.r = 1.0f; // D3DLIGHT_SPOT = 2, light.Diffuse.g = 1.0f; // D3DLIGHT_DIRECTIONAL = 3, light.Diffuse.b = 1.0f; vecDir = D3DXVECTOR3(cosf(timeGetTime()/350.0f),
1.0f,
D3DXVec3Normalize( (D3DXVECTOR3*)&light.Direction, &vecDir );sinf(timeGetTime()/350.0f) ); light.Range = 1000.0f; g_pd3dDevice->SetLight( 0, &light ); g_pd3dDevice->LightEnable( 0, TRUE ); g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
g_pd3dDevice->SetRenderState( D3DRS_AMBIENT, (DWORD)0x00202020 );
}0902-3.zbuffer()/ؽ()
<>
-0.̼ ĶͿ ۿ ߰
D3DPRESENT_PARAMETERS d3dpp;
-1.ý ʱȭκп ,zbuffer ZeroMemory( &d3dpp, sizeof(d3dpp) );
...
d3dpp.EnableAutoDepthStencil = true; // ̰ ٽ Ȱȭd3dpp.AutoDepthStencilFormat = D3DFMT_D16;
// Turn on the zbuffer
-2.ؽ(); ý ġ g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
D3DZB_FALSE - ۸ Ҵ Ѵ.
D3DZB_TRUE - z ۸ ϰ Ѵ.( κ ) D3DZB_USEW - w ۸ ϰ Ѵ. D3DZB_FORCE_DWORD - 32 Ʈ Ѵ.
D3D üũ ⺻ ϸ, ۸ ̿ϰ ý θ üũؾѴ.!
LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; // Buffer to hold vertices g_pd3dDevice->CreateVertexBuffer(
4*sizeof(CUSTOMVERTEX), ũ = * ũ
0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, Ǯ &g_pVB, ü NULL );
D3DPOOL_DEFAULT - , AGP (Accelerated Graphics Port)
θ , ̴
D3DPOOL_MANAGED - ʿ信 , ġκ ִ ڵ ȴ.
Ǵ ҽ, ý ǹǷ, ġ ս ٽ ʿ䰡
D3DPOOL_SYSTEMMEM - , 3D ġ .
ý RAM , ¡ RAM پ .
̷ ҽ, ġ սص ٽ ʿ䰡 . (ý ϴ üũؾ Ѵ.)
-.
vertices[0].position = D3DXVECTOR3(-1.0f,-1.0f, 0.0f);
vertices[0].normal = D3DXVECTOR3( -1.0f, 0.0f, 0.0f);
vertices[0].color = 0xffff0000;
vertices[1].position = D3DXVECTOR3( 1.0f, -1.0f, 0.0f);
vertices[1].normal = D3DXVECTOR3( -1.0f, 0.0f, 0.0f);
vertices[1].color = 0xff0000ff;
vertices[2].position = D3DXVECTOR3( 0.0f, 1.0f, 0.0f);
vertices[2].normal = D3DXVECTOR3( -1.0f, 0.0f, 0.0f);
vertices[2].color = 0xffffffff;
CUSTOMVERTEX* pVertices;
g_pVB->Lock( 0, 0, (void**)&pVertices, 0 );
DAta rkqt
memcpy( pVertices, vertices, sizeof(vertices) ); ؽ ī
g_pVB->Unlock();
<>
g_pd3dDevice->BeginScene(); // ؽ ۸ ̿
// Render the vertex buffer contents
g_pd3dDevice->EndScene(); 0902-4.ε
ؽ ۿ ΰ, ε ϴ
ϱ 迭(ε) ʿ <>
LPDIRECT3DINDEXBUFFER9 g_pIndex = NULL; // Our interface for manipulating index buffers
-1.ε
...
WORD ver_index[] ={ 0, 1, 2};
g_pd3dDevice->CreateIndexBuffer( sizeof(ver_index), - ε ũ = (1) * ũ
-2.ε ۿ g_pd3dDevice->SetIndices(g_pIndex); - ε
void * indices;
g_pIndex->Lock(0,0, (void**)&indices,0);
memcpy( indices, ver_index, sizeof(ver_index) );
g_pIndex->Unlock();
g_pd3dDevice->BeginScene(); // , ε ۸ ̿
// Render the index buffer contentsg_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) ); g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,3,0,1);
//g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 ); - ؽ ̿-. 迭 ϴ ε , Ʈ ⺻ Ѵ.
D3DPRIMITIVETYPE Type,
ε 3 ϴ Ϲ 쿡 Tyte D3DPT_TRIANGLELIST .INT BaseVertexIndex, UINT MinIndex, UINT NumVertices, - Ѱ UINT StartIndex, UINT PrimitiveCount ); - о ε - ؽۿ ε ۰ , 3 Ƽ(3/5): ̷Ʈ 3D-20030903/ Texture/ ĺ귻/ (ڵӸʻ)/ ̾... #0903-1.Texture
<>
-1. D3DFVF ; FVF ؽó ÷ ߰
FVF ; (FVF), Ʈ Ǿ ǰ ִ
-2.
ϱ ؼ ȴ. FVF ڵ, , ó
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_DIFFUSE|D3DFVF_TEX1 )óǴ ϱ ؼ ȴ. LPDIRECT3DTEXTURE9 g_pTexture1 = NULL; // Our texture LPDIRECT3DTEXTURE9 g_pTexture2 = NULL; -3.ݱ
g_pTexture1->Release();
<>0903-2.Texture Addressing ; ġ Ŀ -. ü ġ ̽ .
<>
D3DSAMP_ADDRESSU = 1, u ǥ ϴ ؽó巹̸. Ʈ D3DTADDRESS_WRAP
D3DSAMP_ADDRESSV = 2, v ǥ ϴ ؽó巹̸. Ʈ D3DTADDRESS_WRAP ...
typedef enum _D3DTEXTUREADDRESS {
<뿹>
D3DTADDRESS_WRAP = 1,
} D3DTEXTUREADDRESS;D3DTADDRESS_MIRROR = 2, D3DTADDRESS_CLAMP = 3, D3DTADDRESS_BORDER = 4, D3DTADDRESS_MIRRORONCE = 5, D3DTADDRESS_FORCE_DWORD = 0x7fffffff Device->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_MIRROR ); Device->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP ); 0903-3.ĺ귻
Z-buffer ʱ ϴ ؾ ϸ,
ϰ ɸ Ʈ տ ְ ش.
<>Device->SetRenderState( D3DRS_ALPHABLENDENABLE, true );
typedef enum _D3DBLEND {
<뿹>
D3DBLEND_ZERO = 1, - ȥ , (0, 0, 0, 0)
} D3DBLENDD3DBLEND_ONE = 2, - ȥ , (1, 1, 1, 1) D3DBLEND_SRCCOLOR = 3, - ȥ , (Rs, Gs, Bs, As) D3DBLEND_INVSRCCOLOR = 4, - ȥ , (1 - Rs, 1 - Gs, 1 - Bs, 1 - As) ...
Device->SetRenderState( D3DRS_ALPHABLENDENABLE, true ); ĺ귣
0903-4.; , , ̹漺(̿ ), Ӹ ̿
<>
Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT );
typedef enum _D3DTEXTUREFILTERTYPE {
} D3DTEXTUREFILTERTYPE;
D3DTEXF_NONE = 0, - Ӹ ó ȿ Ѵ. Ͷ ſ Ȯ
D3DTEXF_POINT = 1, - ؽó Ȯ Ǵ ͷμ Ǵ .
ȼ ǥ ؼ Ѵ. Ӹ Ǵ ؽó ʹ,
D3DTEXF_LINEAR = 2, - ؽó Ȯ Ǵ ͷμ Ǵ ̸Ͼ . ֱӸ ̴. Ͷ Ӹ ؽó ؼκ Ѵ
ȼ ѷδ 2 2 ؼ ߷ ÷ Ѵ. Ӹ Ǵ
D3DTEXF_ANISOTROPIC = 3, - ؽó Ȯ Ǵ ͷμ Ǵ 漺 ؽó . ؽó ʹ, Ʈ Ͼ Ӹ ̴. Ͷ, Ӹ ؽó 2 κ ؼ , ȼ Ѵ. (ӿ ⺻ )
ؽó ٰ ũ 鰣 Ͼ ϱ Ѵ.
D3DTEXF_PYRAMIDALQUAD = 6, - ؽó Ȯ Ǵ ͷμ ϴ 4 Ʈ D3DTEXF_GAUSSIANQUAD = 7, - ؽó Ȯ Ǵ ͷμ ϴ 4 Gauss . D3DTEXF_FORCE_DWORD = 0x7fffffff
32 Ʈ Ѵ. ʾҴ.
-1.ڵӸʻ
UINT Height, - in ֻ ؽó (ȼ )
Ǵ ҽ, ý ǹǷ, ġ ս ٽ ʿ䰡 UINT Levels, - in ؽó ִ . 0 ϸ, Ӹȭ ؽó
ϴ ϵ , 1 1 ȼ ؽó Ѵ.
DWORD Usage,D3DFORMAT Format, - in D3DFORMAT . ؽó D3DPOOL Pool, - D3DPOOL_MANAGED; S/W , H/W ڵ
D3DFMT_R8G8B8 / 20/ 24 Ʈ RGB ȼ , ä ó 8 Ʈ
<뿹>D3DFMT_A8R8G8B8 / 21/ 32 Ʈ ÷ ARGB ȼ , ä ó 8 Ʈ D3DFMT_R5G6B5 / 23/ 16 Ʈ RGB ȼ , 5 Ʈ, ʷ 6 Ʈ, Ķ 5 Ʈ ... 0903-5.̾ӷ 4 Ƽ(4/5): ̷Ʈ 3D-20030904/ Ƽؽ.../ Ʈ ȯ ȯ #0904-1.Ƽؽ
<> ϴ ġ texture ҷ ġϸ,
ϴ Ʈ texture Ѹ ġѴ.
0.HRESULT SetTexture( DWORD Stage, - in ؽó ϴ ĺ0.HRESULT SetTextureStageState( DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value );
- Ҵ ִ ؽó Ʈ
D3DTSS_COLOROP = 1,
D3DTA (ؽó μ ) - ġ ϴ ؽó 2 ؽó μ D3DTSS_COLORARG1 = 2, D3DTSS_COLORARG2 = 3, D3DTSS_ALPHAOP = 4, D3DTSS_ALPHAARG1 = 5, D3DTSS_ALPHAARG2 = 6, D3DTSS_BUMPENVMAT00 = 7, D3DTSS_BUMPENVMAT01 = 8, D3DTSS_BUMPENVMAT10 = 9, D3DTSS_BUMPENVMAT11 = 10, D3DTSS_TEXCOORDINDEX = 11, ...
̷ μ ؽó äο ش.
D3DTA_CURRENT - ؽó μ ȥ ̴.
ؽó ( 0), μ D3DTA_DIFFUSE .
D3DTA_DIFFUSE - gouraud shading ó߿ κ
ִ ǻ
D3DTA_TEXTURE - ؽó ؽó ÷̴. 㰡 б ̴.
D3DTA_SPECULAR - gouraud shading ó߿ κ ť̴.
typedef enum _D3DTEXTUREOP {
} D3DTEXTUREOP;
<>
Device->SetRenderState( D3DRS_COLORVERTEX, false );
Device->SetTexture(0, g_pTexture1);
Device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
Device->SetTexture(1, g_pTexture3);
Device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0);
Device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
Device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
Device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);
- , vertex false Ѵ.
(, false ٸ ɼǿ ģ.)
Device->SetRenderState( D3DRS_COLORVERTEX, TRUE );
0904-2.Ʈ; ⺻ Ƽؽĸ (۷ο Ȱ)Ƽؽ
Device->SetTextureStageState(1, D3DTSS_COLOROP, MODULATE2X); - ( A*B ) <<1 ()
Device->SetTextureStageState(1, D3DTSS_COLOROP, MODULATE4X); - ( A*B ) <<2 ( ) 0904-3. ȥ
Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
Device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE); - 2 ̿ Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTEXTUREOP ); 0904-4.ϸ; ̳ ٴڿ , ϰ 0904-5.Ŀ; ģ. ȮҼ ϰ
<>
// Alphablendging Ȱȭ ʿ 0904-6.Ʈ ȯ ȯ
<>
0.HRESULT SetTransform( D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX *pMatrix );
- ġ ȯ Ʈ
D3DTS_VIEW = 2, - ȯ ķμ Ǵ ȯ ĺ, Ʈ NULL()
0.HRESULT SetTextureStageState( DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value );D3DTS_PROJECTION = 3, - ȯ ķμ Ǵ ȯ ĺ, Ʈ NULL() D3DTS_TEXTURE0 = 16, - ؽó Ǵ ȯ ĺ D3DTS_TEXTURE1 = 17, - ؽó Ǵ ȯ ĺ ...
D3DTSS_TEXTURETRANSFORMFLAGS = 24,
ؽó ؽó ǥ ȯ Ѵ. Ʈ, D3DTTFF_DISABLE
typedef enum _D3DTEXTURETRANSFORMFLAGS {
D3DTTFF_DISABLE = 0, - ؽó ǥ Ͷ dz´.
} D3DTEXTURETRANSFORMFLAGS;D3DTTFF_COUNT1 = 1, - Ͷ, 1D ؽó ǥ Ѵ. D3DTTFF_COUNT2 = 2, - 2D ؽó ǥ Ѵ. D3DTTFF_COUNT3 = 3, - 3D ؽó ǥ Ѵ. D3DTTFF_COUNT4 = 4, - 4D ؽó ǥ Ѵ. D3DTTFF_PROJECTED = 256, - ؽó ǥ, Ͷ dz ҷ D3DTTFF_FORCE_DWORD = 0x7fffffff - 32 Ʈ 0.D3DTEXTURESTAGESTATETYPE
D3DTSS_TEXCOORDINDEX = 11, - ؽó ϱ ؽó ǥ ε.
0.D3DTSS_TCI - ̹ ؽó ǥ ɷ ÷(ؽó ȯ Է ؽó ǥ ڵ )
1 ؼ ִ 8 Ʈ ؽó ǥ ִ.
, ε ؽó ǥ Ʈ , u v ǥ Ʈ(0,0)
#define/ /
D3DTSS_TCI_PASSTHRU / 0x00000000L / ˳ ؽó ǥ , D3DTSS_TCI_CAMERASPACENORMAL / 0x00010000L / ؽó ȯ
Է ؽó ǥμ ī ȯ
D3DTSS_TCI_CAMERASPACEPOSITION / 0x00020000L / ī ȯ ġ D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR/ 0x00030000L /
ī ȯ ݻ ϸ,
D3DTSS_TCI_SPHEREMAP / 0x00040000L / ؽó ǥ ο Ѵ. ݻ ʹ, Է ġ ǥ ͷκ ȴ.
<>
-1.ǥ ȯ
D3DXMATRIXA16 mat; - Ʈ
D3DXMatrixIdentity( &mat); - ʱȭ(ü ִ.)
D3DXMatrixRotationY( &mat, 5.0f); - ȯ(SRT); ȯ Ʈ ش.
Device->SetTransform( D3DTS_TEXTURE0, &mat); - D3DTS_TEXTURE0
Device->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2 );
- D3DTS_TEXTURE0 ȯ uv ´
-2.ȯʻ
Device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
|
д ð () å_MyCheese å_Hackish_Games&Demos ٶ04 _DXTn |