Opengl:使用glDrawElements打印

时间:2013-08-29 11:59:17

标签: opengl

嗯..我写了这个代码来打印网格(var m),它运行良好

glBegin(GL_TRIANGLES);
for (unsigned i : m.vtIndex)
{
    const aiVector3D *pv = &m.pMesh->mVertices[i];
    const aiVector3D *pvn = &m.pMesh->mNormals[i];
    glNormal3fv((const GLfloat *)pvn);
    glVertex3fv((const GLfloat *)pv);
}
glEnd();

这是另一个

glVertexPointer(3, GL_FLOAT, 0, m.pMesh->mVertices);
glNormalPointer(GL_FLOAT, 0, m.pMesh->mNormals);
glDrawElements(GL_TRIANGLES, m.vtIndex.size(), GL_UNSIGNED_INT, &m.vtIndex[0]);

但第二个发生了访问冲突 你能给我一个意见吗?

2 个答案:

答案 0 :(得分:1)

您在此示例中使用已弃用的OpenGL,并使用客户端内存来存储顶点数据。在弃用的OpenGL中,您需要启用适当的客户端状态:

glEnableClientState (GL_VERTEX_ARRAY);
glEnableClientState (GL_NORMAL_ARRAY);

如果您在绘制调用之前将其添加到代码中,则应该修复崩溃。


您可以安全地在程序运行的整个时间内启用GL_VERTEX_ARRAY,但您可能需要启用/禁用其他数组,例如GL_NORMAL_ARRAY,具体取决于您的网格实际使用的顶点指针。

答案 1 :(得分:0)

我想出来了。

glEnableClientState(GL_INDEX_ARRAY); // Oops!!
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);

...哈哈