2014-10-19 70 views
0

我有以下代碼來嘗試使用頂點數組來繪製一個矩形:OpenGL的紋理座標被歪斜

glEnableClientState(GL_NORMAL_ARRAY); 
glNormalPointer(GL_FLOAT, 0, &mNorms[ 0 ]); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glTexCoordPointer(2, GL_FLOAT, 0, &mTexCrds[ 0 ]); 
glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(3, GL_FLOAT, 0, &mVtxs[ 0 ]); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

的目的是使用所述角圖案繪製通過三角形帶一個簡單的矩形遠左,近左,遠右,近右。變量值如下:

 
     /* far left    near left   far right    near right */ 
mNorms { 0.0, 1.0, 0.0,   0.0, 1.0, 0.0,  0.0, 1.0, 0.0,  0.0, 1.0, 0.0 } 
mTexCrds { 0.0, 1.0,    0.0, 0.0,   1.0, 1.0,    1.0, 0.0 } 
mVtxs { -25.0, 0.0, -100.0, -25.0, 0.0, -50.0, 25.0, 0.0, -100.0, 25.0, 0.0, -50.0 } 

我的紋理是一個黑色的瓷磚,在所有邊緣都有一個薄薄的藍色邊框。當矩形使用上述說明得出,它是完全藍色:

bad.jpg http://www.graemecentralstation.com/img/bad.jpg

顯然,鑑於上面的紋理座標我期待我的2D紋理是完全可見。

如果我使用這樣相同的數組數據的手動調用替換(4,8)...

glBegin(GL_TRIANGLE_STRIP); 
{ 
    for(int i = 0; i < 4; ++i) 
    { 
     glNormal3fv(&mNorms[ i * 3 ]); 
     glTexCoord2fv(&mTexCrds[ i * 2 ]); 
     glVertex3fv(&mVtxs[ i * 3 ]); 
    } 
} 
glEnd(); 

...然後該矩形被吸入與全紋理地圖圖像作爲可見我期望:

good.jpg http://www.graemecentralstation.com/img/good.jpg

任何想法,爲什麼(4,8)會扭曲我的質地如此糟糕?

+1

IMO如果你正在經歷設置'glVertexPointer'等所有麻煩,你可能只需要使用頂點緩衝對象。它可能會表現更好。 – 2014-10-20 18:08:09

回答

-1

你也許需要添加
glActiveTextureARB(GL_TEXTURE0_ARB); glBindTexture(GL_TEXTURE_2D,texID);

只是glEnableClientState(GL_TEXTURE_COORD_ARRAY);之前

0

你可以嘗試使用紋理調試座標作爲在片段着色器的顏色,這樣的話你可以看到紋理座標是否正確。 gl_FragColor = vec4(vec2(texCoord),0,1);