【发布时间】:2016-03-07 00:33:21
【问题描述】:
我正在尝试绘制一个矩形并对其应用纹理。代码是从我正在阅读的一本书中复制的,我刚刚传递给 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,
并且索引是size 6 的std::vector,具有以下值:
[0,1,2,2,3,0]
它在顶点数组中指定两个三角形(带有纹理)。
这两个数组总是在调用 draw 之前设置。
问题是渲染的对象不正确,而不是矩形我有一个梯形旋转。这些向量似乎是正确的,因为我是 OpenGL 的新手,我不知道这段代码出了什么问题。
感谢您的关注。
---已编辑--- 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*/
【问题讨论】:
-
可能是因为你的矩阵?我们可以看看你在用它们做什么吗?