2014-10-19 99 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);