glBufferData with explicit array vs non explicit array

glBufferData with explicit array vs non explicit array

本文关键字:array explicit non vs with glBufferData      更新时间:2023-10-16

我正在使用明确定义的顶点坐标数组创建一个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 在缓冲区中获取数据,则值是相同的。

想法?

提前谢谢。

我会怀疑numVertexs的值,因为您的缓冲区数据上传调用实际上并没有使用它。您应该上传sizeof (GLfloat) * 3 * numVertexs字节的数据,而不是使用幻数300。如果在这两种情况下都用该表达式替换300,则很有可能它会暴露您的真正问题。

谢谢大家,

这里的问题是:我正在渲染两个具有不同顶点数的对象。渲染时,我忘记正确分配索引缓冲区,openGL 试图用第一个对象的索引绘制第二个对象。