Microsoft DirectX 8.0 (Visual Basic) |
ワールド行列インデックスは、従来の頂点シェーダ (FVF) または宣言を使用して Microsoft® Direct3D® に渡すことができる。
次のコードは、従来の頂点シェーダを使用する方法を示している。
Private Type VERTEX x As Single y As Single z As Single weight As Single matrixIndices As Long normal(2) As Single End Type Const D3DFVF_CUSTOMVERTEX = (D3DFVF_XYZB2 Or D3DFVF_NORMAL Or _ D3DFVF_LASTBETA_UBYTE4)
従来の頂点シェーダを使用する場合、行列インデックスは D3DFVF_XYZBn フラグを使用して頂点位置座標と共に渡される。行列インデックスは DWORD 内のバイトとして渡され、最後の頂点加重の直後に存在しなければならない。頂点加重も D3DFVF_XYZBn を使用して渡される。パック DWORD は、index3、index2、index1、および index0 を保持し、index0 は DWORD の最下位バイトにある。使用されるワールド行列インデックスの数は、D3DRS_VERTEXBLEND によって定義されるブレンディングに使用される行列の数に渡される数値に等しい。
宣言を使用する場合は、D3DVSDE_BLENDINDICES が行列インデックスを取得する入力頂点レジスタを定義する。行列インデックスは、D3DVSDT_PACKEDBYTE として渡す必要がある。
次のコードは、宣言の使用方法を示している。コンポーネントの順序はまったく重要ではない点に注意すること。
Private Type VERTEX x As Single y As Single z As Single matrixIndices As Long weight As Single normal(2) As Single End Type Dim decl(5) As Long decl(0) = D3DVSD_STREAM(0) decl(1) = D3DVSD_REG(D3DVSDE_POSITION, D3DVSDT_FLOAT3) decl(2) = D3DVSD_REG(D3DVSDE_BLENDINDICES, D3DVSDT_PACKEDBYTE) decl(3) = D3DVSD_REG(D3DVSDE_BLENDWEIGHT, D3DVSDT_FLOAT1) decl(4) = D3DVSD_REG(D3DVSDE_NORMAL, D3DVSDT_FLOAT3) decl(5) = D3DVSD_END()