我有以下代码来尝试使用顶点数组来绘制一个矩形: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)会扭曲我的质地如此糟糕?
IMO如果你正在经历设置'glVertexPointer'等所有麻烦,你可能只需要使用顶点缓冲对象。它可能会表现更好。 – 2014-10-20 18:08:09