Direct3D 9) (特效
本主题包含通过纹理坐标处理完成的特殊效果的示例。
通过转换或旋转) 对模型 (纹理进行动画处理
以顶点格式定义 2D 纹理坐标。
// Use a single texture, with 2D texture coordinates. This // bit-pattern should be expanded to include position, normal, // and color information as needed. DWORD dwFVFTex = D3FVF_TEX1 | D3DFVF_TEXCOORDSIZE2(0);
将光栅器配置为使用 2D 纹理坐标。
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
定义并设置适当的纹理坐标转换矩阵。
// M is a D3DMATRIX being set to translate texture // coordinates in the U and V directions. // 1 0 0 0 // 0 1 0 0 // du dv 1 0 (du and dv change each frame) // 0 0 0 1 D3DMATRIX M = D3DXMatrixIdentity(); // declared in d3dutil.h M._31 = du; M._32 = dv;
创建纹理坐标作为模型的相机空间位置的线性函数
使用 D3DTSS_TCI_CAMERASPACEPOSITION 标志指示系统将相机空间中的顶点位置作为输入传递给纹理转换。
// The input vertices have no texture coordinates, saving // bandwidth. Three texture coordinates are generated by // using vertex position in camera space (x, y, z). SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
指示光栅器预期 2D 纹理坐标。
// Two output coordinates are used. SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
定义并设置应用线性函数的矩阵。
// Generate texture coordinates as linear functions // so that: // u = Ux*x + Uy*y + Uz*z + Uw // v = Vx*x + Vy*y + Vz*z + Vw // The matrix M for this case is: // Ux Vx 0 0 // Uy Vy 0 0 // Uz Vz 0 0 // Uw Vw 0 0 SetTransform(D3DTS_TEXTURE0, &M);
使用三次环境映射执行环境映射
使用 D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 标志指示系统自动生成纹理坐标作为三次映射的反射向量。
SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR);
指示光栅器预期具有三个元素的纹理坐标。
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT3);
执行投影纹理
使用 D3DTSS_TCI_CAMERASPACEPOSITION 标志指示系统将顶点位置作为输入传递到纹理转换矩阵。
SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
创建并应用纹理投影矩阵。 这超出了本文档的范围,是多个行业文章的主题。
指示光栅器预期三个元素投影纹理坐标。
// Two output coordinates are used. SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTF_PROJECTED | D3DTTFF_COUNT3);
相关主题