g_lpD3DDEV->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE ); g_lpD3DDEV->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA ); g_lpD3DDEV->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
if (g_bCanGreaterEqual){ g_lpD3DDEV->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE ); g_lpD3DDEV->SetRenderState( D3DRS_ALPHAREF, 0x08 ); g_lpD3DDEV->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL ); }
続いて次の部分を見てみよう。
// アニメーションの為の座標計算 int x,y; static double d1=0,d2=0; d1 += 0.07*timeElapsed; d2 += 0.05*timeElapsed; if (d1 > (D3DX_PI*2)) d1 -= D3DX_PI*2; if (d2 > (D3DX_PI*2)) d2 -= D3DX_PI*2; y = (int)(100*sin(d1)); y += 240; x = (int)(200*sin(d2)); x += 320;
続いて次の部分。
int sz = 48; // 四角形の頂点の設定 TLVERTEX2D pV[4]; float ru = g_fTexImageWidth; float bv = g_fTexImageHeight; pV[0].x = (float)x;pV[0].y=(float)y;pV[0].z=0.0f;pV[0].rhw=1.0f; pV[0].tu = 0.0f;pV[0].tv=0.0f;pV[0].color=D3DCOLOR_XRGB(255,255,255); pV[1].x = (float)(x + sz);pV[1].y=(float)y;pV[1].z=0.0f;pV[1].rhw=1.0f; pV[1].tu = ru;pV[1].tv=0.0f;pV[1].color=D3DCOLOR_XRGB(255,255,255); pV[2].x = (float)(x + sz);pV[2].y=(float)(y + sz);pV[2].z=0.0f;pV[2].rhw=1.0f; pV[2].tu = ru;pV[2].tv=bv;pV[2].color=D3DCOLOR_XRGB(255,255,255); pV[3].x = (float)x;pV[3].y=(float)(y + sz);pV[3].z=0.0f;pV[3].rhw=1.0f; pV[3].tu = 0.0f;pV[3].tv=bv;pV[3].color=D3DCOLOR_XRGB(255,255,255);
struct TLVERTEX2D{ float x,y,z; float rhw; D3DCOLOR color; float tu,tv; }; #define FVF_TLVERTEX2D (D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX1) |
次の部分は実際に描画を行っている部分である。
// 描画の実行 g_lpD3DDEV->SetTexture(0,g_pTexture); g_lpD3DDEV->SetVertexShader(FVF_TLVERTEX2D); g_lpD3DDEV->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,2,pV,sizeof(TLVERTEX2D));
以下、解説。
g_lpD3DDEV->SetTexture(0,g_pTexture); |
g_lpD3DDEV->SetVertexShader(FVF_TLVERTEX2D); |
g_lpD3DDEV->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,2,pV,sizeof(TLVERTEX2D)); |