嗯..我写了这个代码来打印网格(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]);
但第二个发生了访问冲突 你能给我一个意见吗?
答案 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);
...哈哈