我试图绘制一个矩形并将纹理应用到它上面。代码是从我读过的书中复制过来的,我刚刚传递给 C ++ (来自Java),现在是:
void draw(){
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 4, vertices.data());//vertexSize is 4
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 2, vertices.data() + 2);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices.data());
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
}
顶点是std::vector
size 16
以及以下值:
[-0.25,-0.25,0.0,0.25,0.25,-0.25,0.25,0.25,0.25,0.25,0.25,0.0,-0.25,0.25,0.0,0.0]
每4个浮点数指定vertex coord
和texture coord
,
并且索引是std::vector
size 6
,具有以下值:
[0,1,2,2,3,0]
它指定顶点数组中的两个三角形(带纹理)。
在调用draw之前总是设置这两个数组。
问题是渲染的对象不正确,而不是我旋转了梯形的矩形。向量似乎是正确的,因为我是 OpenGL 的新手,我不知道此代码中出了什么问题。
感谢您的关注。
--- --- EDITED 在进入应用程序循环之前设置opengl矩阵:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClearColor(0.0, 1.0, 0.0, 1.0);
glEnable(GL_TEXTURE_2D);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
/*application loop, no more matrices use*/
答案 0 :(得分:4)
glVertexPointer(2, GL_FLOAT, 4, vertices.data());//vertexSize is 4
是的,每个顶点有4个浮点数。但这不是第四个参数。它是从一个位置到下一个位置的字节数。那不是4;它是4 * sizeof(GLfloat)
。
此外:
glTexCoordPointer(2, GL_FLOAT, 2, vertices.data() + 2);
这里的第二个2也应该是4 * sizeof(GLfloat)
。对于位置和纹理坐标,数组的字节步长是相同的。