2013-11-24 71 views
0

我希望能夠基於對象(多維數據集)的比例大小動態地重複紋理。OpenGL 2.0根據對象大小調整紋理大小

我嘗試過VerticesCube3D結構,但嘗試更改值時發生崩潰。我有我的紋理上重複設置,但目前它橫跨紋理(我需要動態改變TEX_COORD_MAX)

Vertex VerticesCube3D[] = { 
     // Front 
     {{1, -1, 0}, {1, 1, 1, 1}, {TEX_COORD_MAX, 0}}, 
     {{1, 1, 0}, {1, 1, 1, 1}, {TEX_COORD_MAX, TEX_COORD_MAX}}, 
     {{-1, 1, 0}, {1, 1, 1, 1}, {0, TEX_COORD_MAX}}, 
     {{-1, -1, 0}, {1, 1, 1, 1}, {0, 0}}, 
     // Back 
     {{1, 1, -2}, {1, 1, 1, 1}, {TEX_COORD_MAX, 0}}, 
     {{-1, -1, -2}, {1, 1, 1, 1}, {TEX_COORD_MAX, TEX_COORD_MAX}}, 
     {{1, -1, -2}, {1, 1, 1, 1}, {0, TEX_COORD_MAX}}, 
     {{-1, 1, -2}, {1, 1, 1, 1}, {0, 0}}, 
     // Left 
     {{-1, -1, 0}, {1, 1, 1, 1}, {TEX_COORD_MAX, 0}}, 
     {{-1, 1, 0}, {1, 1, 1, 1}, {TEX_COORD_MAX, TEX_COORD_MAX}}, 
     {{-1, 1, -2}, {1, 1, 1, 1}, {0, TEX_COORD_MAX}}, 
     {{-1, -1, -2}, {1, 1, 1, 1}, {0, 0}}, 
     // Right 
     {{1, -1, -2}, {1, 1, 1, 1}, {TEX_COORD_MAX, 0}}, 
     {{1, 1, -2}, {1, 1, 1, 1}, {TEX_COORD_MAX, TEX_COORD_MAX}}, 
     {{1, 1, 0}, {1, 1, 1, 1}, {0, TEX_COORD_MAX}}, 
     {{1, -1, 0}, {1, 1, 1, 1}, {0, 0}}, 
     // Top 
     {{1, 1, 0}, {1, 1, 1, 1}, {TEX_COORD_MAX, 0}}, 
     {{1, 1, -2}, {1, 1, 1, 1}, {TEX_COORD_MAX, TEX_COORD_MAX}}, 
     {{-1, 1, -2}, {1, 1, 1, 1}, {0, TEX_COORD_MAX}}, 
     {{-1, 1, 0}, {1, 1, 1, 1}, {0, 0}}, 
     // Bottom 
     {{1, -1, -2}, {1, 1, 1, 1}, {TEX_COORD_MAX, 0}}, 
     {{1, -1, 0}, {1, 1, 1, 1}, {TEX_COORD_MAX, TEX_COORD_MAX}}, 
     {{-1, -1, 0}, {1, 1, 1, 1}, {0, TEX_COORD_MAX}}, 
     {{-1, -1, -2}, {1, 1, 1, 1}, {0, 0}} 
    }; 
+0

您可以更改着色器代碼中的紋理座標值 – marekb

+0

什麼樣的值傳遞給着色器中的紋理,得到了任何示例 – Burf2000

回答

1

你不想改變你的頂點數據的紋理座標(因爲那時你必須重新上傳到硬件)。相反,您想要在GPU上轉換紋理座標,可能是在頂點着色器中。

閱讀關於Projective Texture Mapping。這是一種非常常見的技術,但令人驚訝的是我找不到有關它的好教程。 Here's a university programming assignment稍微討論一下。

它的要點:你定義一個紋理矩陣來轉換紋理座標 - 這是一個像你的模型,視圖和投影矩陣一樣的轉換,所以在iOS上你可以用GLKMatrix4函數來創建它。然後使用統一變量將該矩陣提供給頂點着色器。在頂點着色器中,將輸入紋理座標(頂點屬性)與紋理矩陣相乘,以便在將其輸出到用於片段着色器的變化之前進行變換。

如果您在頂點數據中定義紋理座標,以便紋理完全覆蓋對象一次,則可以使用紋理矩陣向下縮放紋理。如果縮小比例,並且紋理包裹parameters are set需要重複,則紋理將在對象的面上平鋪。

相關問題