Microsoft DirectX 8.0 (Visual Basic) |
World matrix indices can be passed to Microsoft® Direct3D® by using legacy vertex shaders (FVF) or declarations.
The code example below shows how to use legacy vertex shaders.
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)
When a legacy vertex shader is used, matrix indices are passed together with vertex positions using D3DFVF_XYZBn flags. Matrix indices are passed as a packed byte and must be present immediately after the last vertex weight. Vertex weights are also passed using D3DFVF_XYZBn. A packed byte contains index3, index2, index1, and index0, where index0 is located in the lowest byte of the byte. The number of used world-matrix indices is equal to the number passed to the number of matrices used for blending as defined by D3DRS_VERTEXBLEND.
When a declaration is used, D3DVSDE_BLENDINDICES defines the input vertex register to get matrix indices from. Matrix indices must be passed as D3DVSDT_PACKEDBYTE.
The code example below shows how to use declarations. Note that the order of the components is no longer important.
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()