2
我想在opengl中創建一個可以加載到着色器並動態改變的法線貼圖,雖然目前我被困在如何創建紋理。opengl紋理
我目前有這樣的:
glActiveTexture(GL_TEXTURE7);
glGenTextures(1, &normals);
glBindTexture(GL_TEXTURE_2D, normals);
texels = new Vector3f*[256];
for(int i = 0; i < 256; ++i){
texels[i] = new Vector3f[256];
}
this->setup_normals();
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 3, 256, 256, 0, GL_RGB, GL_FLOAT, texels);
...
void setup_normals(){
for(int i = 0; i < 256; ++i){
for(int j = 0; j < 256; ++j){
texels[i][j][0] = 0.0f;
texels[i][j][1] = 1.0f;
texels[i][j][2] = 0.0f;
}
}
}
其中Vector3f是:typedef的浮動Vector3f [3];
和texels是:Vector3f ** texels;
當我使用正交矩陣(它適用於加載的紋理)將此紋理繪製到screenquad時,我得到。
我不確定爲什麼它不會顯示爲完全綠色,還有什麼導致黑色條紋出現在它內部。任何幫助讚賞。
這並就感謝你,只是出於興趣,你知道有什麼辦法使用多維數組?也許通過使用glPixelstoref更改一些參數? – 2011-05-09 03:24:55
我不這麼認爲,至少不是你創建數組的方式。 'new'幾乎可以返回任何內存地址,並且與先前的分配沒有規定的關係。 – genpfault 2011-05-09 03:38:37
@Bunnit:C和C++動態「多維」數組並不是你可能認爲的那樣。只有索引操作符鏈中的最後一次解除引用實際上指向數據。所有前面的索引運算符都解引用更多指針的數組。 – datenwolf 2011-05-11 08:35:37