我正在使用一个明确定义顶点坐标的数组创建一个 glBufferData ,一切正常。当使用非明确定义的数组时,结果完全不同,尽管我使用的是相同的坐标值。绘制调用以不同的顶点顺序呈现事物。
顶点是三角形网格。
代码 1 工作正常:
this->graphics->createBuffers(1, vboIndexsID);
this->graphics->bindBuffer(GL_ELEMENT_ARRAY_BUFFER, *vboIndexsID);
this->graphics->bufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLushort)*numIndexs, ind, GL_STATIC_DRAW);
this->graphics->createBuffers(1, vboVertexsID);
this->graphics->bindBuffer(GL_ARRAY_BUFFER, *vboVertexsID);
this->graphics->bufferData(GL_ARRAY_BUFFER, 300, quad_verts2, GL_STATIC_DRAW);
其中 quad_verts2 是:
GLfloat quad_verts2[75] =
{
0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 100.0f,
0.0f, 0.0f, 200.0f,
0.0f, 0.0f, 300.0f,
0.0f, 0.0f, 400.0f,
100.0f, 0.0f, 0.0f,
100.0f, 0.0f, 100.0f,
100.0f, 0.0f, 200.0f,
100.0f, 0.0f, 300.0f,
100.0f, 0.0f, 400.0f,
200.0f, 0.0f, 0.0f,
200.0f, 0.0f, 100.0f,
200.0f, 0.0f, 200.0f,
200.0f, 0.0f, 300.0f,
200.0f, 0.0f, 400.0f,
300.0f, 0.0f, 0.0f,
300.0f, 0.0f, 100.0f,
300.0f, 0.0f, 200.0f,
300.0f, 0.0f, 300.0f,
300.0f, 0.0f, 400.0f,
400.0f, 0.0f, 0.0f,
400.0f, 0.0f, 100.0f,
400.0f, 0.0f, 200.0f,
400.0f, 0.0f, 300.0f,
400.0f, 0.0f, 400.0f
};
代码 2 不起作用:
this->graphics->createBuffers(1, vboIndexsID);
this->graphics->bindBuffer(GL_ELEMENT_ARRAY_BUFFER, *vboIndexsID);
this->graphics->bufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLushort)*numIndexs, ind, GL_STATIC_DRAW);
this->graphics->createBuffers(1, vboVertexsID);
this->graphics->bindBuffer(GL_ARRAY_BUFFER, *vboVertexsID);
this->graphics->bufferData(GL_ARRAY_BUFFER, 300, list, GL_STATIC_DRAW);
和之前一模一样,只不过是列表数据而不是 quad_vert2。
其中列表是:
GLfloat list[75];
int j = 0;
for(int i=0;i<numVertexs;++i) {
list[j] = v->coord.x;j++;
list[j] = v->coord.y;j++;
list[j] = v->coord.z;j++;
++v;
}
v 中的数据与 quad_vert2 中的数据完全相同。
glGetError,在 glBufferData 始终为 0 之后。如果我使用 glGetBufferSubData 获取缓冲区中的数据,则值是相同的。
想法?
提前致谢。