【发布时间】:2013-08-30 07:18:08
【问题描述】:
嗯..我写了这段代码来打印网格(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]);
但是第二个发生了访问冲突 能给我意见吗?
【问题讨论】:
-
@RogerRowland:这不正确。 glDrawElements 需要顶点数(您应该能够更改 mode 保持其余参数不变)。它宁愿假设
m.vtIndex.size()不返回数组中元素的数量,而是以字节为单位的大小,这不是你想要的。 -
@datenwolf: Err,
glDrawElements (...)期望元素的数量...如果您一遍又一遍地使用相同的索引,您可以根据需要绘制 1 个顶点。 -
@AndonM.Coleman:是的,我知道。我的意思不是属性缓冲区中的顶点数,而是 glDrawElements 应处理的顶点数。即使是同一个顶点N次,OpenGL也要处理N个顶点。
标签: opengl