本主題包含使用紋理座標處理完成的特殊效果範例。
在模型上以動畫顯示紋理(依翻譯或旋轉方式)
以頂點格式定義 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);
相關主題