´ÙÀÌ·ºÆ® 9.0À¸·Î ¿À¸é¼ 8.0°ú »ç¿ë¹ýÀÌ ´Ù¸£´Ù. ´ÙÀÌ·ºÆ® X °íÁ¤ÆÄÀÌÇÁ ºÎºÐÀ» ºñ±³ÇÑÈÄ ¼ÎÀÌ´õÀÇ ´Ù¸¥Á¡À» ¾Ë¾Æº¸ÀÚ. 1. Çì´õÆÄÀÏ°ú ¶óÀ̺귯¸® ±³Ã¼
Çì´õÆÄÀÏ°ú ¶óÀ̺귯¸®¸¦ 9·Î ±³Ã¼ÇÑ´Ù. 2. ÀÎÅÍÆäÀ̽º ±³Ã¼
´ÙÀÌ·ºÆ® X ÀÎÅÍÆäÀ̽º, µð¹ÙÀ̽º, ¹öÅؽº ¹öÆÛ°¡ 9·Î ¹Ù²î¾ú°í, ¹öÅؽº
¼ÎÀÌ´õÀÇ ÇÚµéÀ» 8.0¿¡¼´Â DWORD·Î »ç¿ë ÇßÀ¸³ª 9.0¿¡¼´Â ¼ÎÀÌ´õ ¼±¾ð
LPDIRECT3DVERTEXSHADER9¸¦ »ç¿ëÇÏ¿© ¹öÅؽº ¼ÎÀÌ´õÀÇ ÇÚµéÀ» ¼±¾ðÇÑ´Ù. ¹öÅؽº ¼ÎÀÌ´õ¿ë º¯¼ö°¡ Çϳª ´õ Ãß°¡µÇ¾ú´Ù. 3. ´ÙÀÌ·ºÆ® X ÀÎÅÍÆäÀ̽º »ý¼º
4. D3DPRESENT ±¸Á¶Ã¼ ±³Ã¼
5. CreateVertexBuffer º¯È
¸¶Áö¸· ÀÎÀÚ pSharedhandleÀÌ Ãß°¡ µÇ¾ú´Âµ¥, ÀÌ¿ëµÇÁö ¾ÊÀ¸¸ç NULL·Î ä¿î´Ù. 6. SetStreamSource, SetVertexShader º¯È
SetStreamSource()µµ ¹Ù²î¾ú´Ù. 9.0¹öÀü¿¡ ¼¼ ¹ø° ÆĶó¸ÞÅÍ°¡ Ãß°¡
µÇ¾ú´Ù. ¹¹ÇÏ´ÂÁö´Â 9.0¹®¼°¡ ¾ø¾î¼ ±×³É ³Ñ¾î°£´Ù.
ÇÏÇÏÇÏ ~~~ ¾ðÁ¦ ³¡³ª! ÀÌÁ¦ ¼ÎÀÌ´õ ¼³¸íÀ¸·Î ³Ñ¾î °¥·Ã´Ù. Áö°Ü¿ö¼ ³Ñ¾î°¥·Ã´Ù..ÈÖ¸®¸¯ ~~~ 1) ¼ÎÀÌ´õ º¯¼ö ¼±¾ð LPDIRECT3DVERTEXSHADER9 g_hVShader = 0; //¹öÅؽº ¼ÎÀÌ´õÀÇ ÇÚµé LPDIRECT3DVERTEXDECLARATION9 g_pVertexDeclaration = 0; 9.0 ¹öÅؽº ¼ÎÀÌ´õ¿¡¼´Â LPDIRECT3DVERTEXDECLARATION9 ¼±¾ðÀ» ¼ÎÀÌ´õ
ÇÚµé°ú ÇÔ²² Àü¿ªº¯¼ö¸¦ ¸¸µç´Ù. 2) ¼ÎÀÌ´õ »ý¼º HRESULT CreateShader() { const char szVertextShader[] = "vs.1.1 \n" "dcl_position v0 \n" "dcl_color v5 \n" "dp4 oPos.x, v0, c0 \n" "dp4 oPos.y, v0, c1 \n" "dp4 oPos.z, v0, c2 \n" "dp4 oPos.w, v0, c3 \n" "mov oD0, v5 \n"; D3DVERTEXELEMENT9 Declaration[] = { {0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0}, {0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0}, D3DDECL_END() }; if( FAILED(g_d3d_Device->CreateVertexDeclaration( Declaration, &g_pVertexDeclaration ))) { _RELEASE_(g_pVertexDeclaration); return E_FAIL; } ID3DXBuffer* pShaderBuffer; ID3DXBuffer* pShaderErrors; if (FAILED(D3DXAssembleShader(szVertextShader, sizeof(szVertextShader) - 1, 0, NULL, DXSHADER_DEBUG, &pShaderBuffer, &pShaderErrors))) return E_FAIL; if (FAILED(g_d3d_Device->CreateVertexShader((DWORD *)pShaderBuffer->GetBufferPointer(), &g_hVShader))) return E_FAIL; _RELEASE_(pShaderBuffer); return S_OK; } 9.0 ¹öÅؽº ¼ÎÀÌ´õ¿¡´Â ¾Æ·¡ÀÇ 2°¡Áö ¸í·ÉÀ¸·Î ÀÔ·Â ·¹Áö½ºÆ®¸¦ ¼±¾ðÇÑ´Ù. dcl_position v0 8.0 ¹öÅؽº ¼ÎÀÌ´õ¿¡¼´Â Á¤ÇØÁø ÀԷ°ªÀ» µðÆúÆ®·Î »ç¿ëÇßÁö¸¸,
9.0¿¡¼´Â ¼±¾ðÇÏ¿© »ç¿ëÇÑ´Ù.(È®½ÇÇÑÁö ¾Æ´ÑÁö À߸ð¸§). ¹öÅؽº ¼±¾ðµµ ¾à°£ ¹Ù²î¾ú´Ù. DeclarationÀ» º¸ÀÚ. 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 00 : ½ºÆ®¸² ¹øÈ£ 0 ÀÌ ¿¹Á¦´Â ´ÜÀÏ ½ºÆ®¸²ÀÌ´Ù. 0 : ¹öÅؽºÀÇ ½ÃÀÛÁ¡ ¿ÀÇÁ¼Â ÁöÁ¤. ¹ÙÀÌÆ® ´ÜÀ§·Î Çϴµ¥, Diffuse Color°¡ ³ª¿Ã ¶§´Â 12¹ÙÀÌÆ®ºÎÅÍ ½ÃÀÛÀÌ´Ù. D3DDECLTYPE_FLOAT3 : µ¥ÀÌÅÍ Å¸ÀÔ ÁöÁ¤. ÀÌ »ó¼ö´Â 3°³ÀÇ ºÎµ¿¼Ò¼öÁ¡(x, y, z)À» ÀǹÌÇÑ´Ù. D3DDECLMETHOD_DEFAULT : Å×¼¿·¹ÀÌ¼Ç ¸í·É. ±âº»°ªÀº Å×¼¿·¹À̼ǾøÀÌ µ¥ÀÌÅÍ°¡ ÆÄÀÌÇÁ¶óÀÎÀ» Åë°úÇÑ´Ù. D3DDECLUSAGE_POSITION : µ¥ÀÌÅÍÀÇ »ç¿ëµÇ´Â ¿ëµµ·Î ¿©±â¼´Â À§Ä¡ µ¥ÀÌÅ͸¦ ÀǹÌÇÑ´Ù. 0 : ¿ë¹ý À妽º. D3DDECLUSAGE_TEXCOORD0, D3DDECLUSAGE_TEXCOORD1 µî°ú °°Àº À¯»çÇÑ µ¥ÀÌÅÍ ¼ººÐÀ» »ç¿ëÇÏ´Â ¹öÅؽº ¹öÆÛ¿¡¼ ¼ººÐÀ» ½Äº°ÇÑ´Ù. °¢ ¿ë¹ý À妽º Á¶ÇÕÀº ½Ã¸àƽ(semantic)À¸·Î ºÒ¸°´Ù. ½Ã¸àƽÀº ¹öÅؽº ¹öÆÛ ¼ººÐÀ» ¹öÅؽº ¼ÎÀÌ´õ ·¹Áö½ºÅÍ¿¡ ¸µÅ©ÇÑ´Ù. ¸¶Áö¸· ÁÙÀº D3DDECL_END()¸ÅÅ©·ÎÀÌ´Ù. CreateVertexDeclaration( Declaration, &g_pVertexDeclaration )8.0¿¡¼´Â ¹öÅؽº ¼±¾ðÀÚ¸¦ CreateVertexShader()½Ã¿¡ Àü´ÞÇßÁö¸¸ 9.0¿¡¼´Â SetVertexDeclaration()½ÇÇà½Ã¿¡ ¼³Á¤ÇÑ´Ù. D3DXAssembleShader()¿¡¼´Â DXSHADER_DEBUG°¡ Ãß°¡ µÇ¾ú´Ù.CreateVertexShader((DWORD *)pShaderBuffer->GetBufferPointer(), &g_hVShader) ¾Õ¿¡¼µµ ¼³¸íÇß´Ù½ÃÅ° ¹öÅؽº ¼±¾ðÀÚ ¼ÂÆÃÀÌ º°µµ·Î ºÐ¸® µÇ¾ú´Ù. 3) ·»µå¸µvoid MoveShip(float fx, float fy) { D3DXMATRIX mScale1, mRot1, mTran1, mResult1; D3DXMATRIX mScale2, mRot2, mTran2, mResult2; D3DXMATRIX mScale3, mRot3, mTran3, mResult3; //º»Ã¼ //SRT D3DXMatrixScaling( &mScale1, 1.1f, 1.1f, 1.1f ); D3DXMatrixRotationZ(&mRot1, D3DXToRadian(g_fDegree)); D3DXMatrixTranslation( &mTran1, fx, fy, 0.0f); mResult1 = mScale1 * mRot1 * mTran1; #if 0 g_d3d_Device->SetTransform( D3DTS_WORLD, &mResult1); g_d3d_Device->DrawPrimitive( D3DPT_TRIANGLESTRIP, 3, 2 ); #else D3DXMATRIX ShaderMatrix = mResult1 * g_matCameraView * g_matProj; //Get the transpose D3DXMatrixTranspose(&ShaderMatrix, &ShaderMatrix); //Pass the transposed matrix to the shader g_d3d_Device->SetVertexShaderConstantF(0, (float*)&ShaderMatrix, 4); g_d3d_Device->SetVertexDeclaration( g_pVertexDeclaration); g_d3d_Device->SetVertexShader( g_hVShader); g_d3d_Device->DrawPrimitive( D3DPT_TRIANGLESTRIP, 3, 2 ); g_d3d_Device->SetVertexShader(NULL); g_d3d_Device->SetFVF(D3DFVF_CUSTOMVERTEX); #endif //Æ÷ž D3DXMatrixScaling( &mScale2, 1.0f, 1.0f, 1.0f ); D3DXMatrixRotationZ(&mRot2, D3DXToRadian(g_fTurretDegree)); D3DXMatrixTranslation( &mTran2, 0.0f, -0.7f, 0.0f ); mResult2 = mScale2 * mRot2 * mTran2 * mResult1; g_d3d_Device->SetTransform( D3DTS_WORLD, &mResult2 ); g_d3d_Device->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 ); //Æ÷ D3DXMatrixScaling( &mScale3, 0.1f, 0.3f, 1.0f ); D3DXMatrixRotationZ(&mRot3, 0.0f); D3DXMatrixTranslation( &mTran3, 0.0f, -0.1f, -0.5f); mResult3 = mScale3 * mRot3 * mTran3 * mResult2; g_d3d_Device->SetTransform( D3DTS_WORLD, &mResult3 ); g_d3d_Device->DrawPrimitive( D3DPT_TRIANGLESTRIP, 3, 2 ); g_d3d_Device->SetVertexDeclaration( g_pVertexDeclaration) ¹öÅؽº ¼±¾ðÀÚ¸¦ º°µµ·Î ¼±¾ðÇÑ´Ù. 4) ¼Ò¸ê _RELEASE_(g_hVShader); _RELEASE_(g_pVertexDeclaration);DeleteVertexShader() °°Àº ¼ÎÀÌ´õ ¼Ò¸êÀÚ´Â ´õ ÀÌ»ó »ç¿ëÇÏÁö ¾Ê´Â´Ù. ¹öÅؽº ¼±¾ðÀÚµµ ¼Ò¸ê ½ÃÄÑ¾ß ÇÑ´Ù. [Æß] Microsoft DirectX 9 Programmable Graphics Pipeline - Á¤º¸¹®È»ç DirectX ½Ç½Ã°£ ·»´õ¸µ ½ÇÀü Å×Å©´Ð - Á¤º¸ ¹®È»ç http://www.t-pot.com |