共用方式為


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);
    

紋理座標處理