Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL 3 VBO索引多个图形(GLD元素)_Opengl_Indexing_Figure - Fatal编程技术网

OpenGL 3 VBO索引多个图形(GLD元素)

OpenGL 3 VBO索引多个图形(GLD元素),opengl,indexing,figure,Opengl,Indexing,Figure,我正在使用OpenGL(3.x)完成我的第一步,我计划使用VAO和VBO绘制几个图形(三角形、立方体等): 现在我得到了以下设置: VAO--> VBO[顶点,颜色]+VBO[索引] 其中“顶点”具有[3*3三角形的浮点数,8*3立方体的浮点数], “颜色”具有每个顶点的RGB(无alpha), “指数”有[三角形:0,1,2,正方形:0,1,2,0,2,3,…] 现在如果我用“元素”画图。我只看到序列上正确绘制的第一个图形(并获得正确的颜色),第二个图形不能正常工作 因此,如果我首先渲染三角形

我正在使用OpenGL(3.x)完成我的第一步,我计划使用VAO和VBO绘制几个图形(三角形、立方体等):

现在我得到了以下设置:

VAO--> VBO[顶点,颜色]+VBO[索引]

其中“顶点”具有[3*3三角形的浮点数,8*3立方体的浮点数], “颜色”具有每个顶点的RGB(无alpha), “指数”有[三角形:0,1,2,正方形:0,1,2,0,2,3,…]

现在如果我用“元素”画图。我只看到序列上正确绘制的第一个图形(并获得正确的颜色),第二个图形不能正常工作

因此,如果我首先渲染三角形数据,结果如下:

如果我先渲染立方体,它会像:

注意:三角形是红色的,立方体是彩色的,所以第一个图形总是按照我的预期显示

这可以使用“glDrawArrays”(使用偏移量+三角形计数)而不是抽屉元素来确定图形数组,但是,当然,索引使数据数组变得更小。所以我想搬家

如何绘制相同的设置,但要使用索引?我应该调用其他方法吗?

这是我用来准备VBO数据的代码,以防有疑问

// VBOS solid
    glBindBuffer(GL_ARRAY_BUFFER, vboSolid[0]);
    glBufferData(GL_ARRAY_BUFFER, vertices.size()*sizeof(GLfloat),&vertices[0], GL_STATIC_DRAW);
    glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glEnableVertexAttribArray(0);

    glBindBuffer(GL_ARRAY_BUFFER, vboSolid[1]);
    glBufferData(GL_ARRAY_BUFFER, colors.size()*sizeof(GLfloat),&colors[0], GL_STATIC_DRAW);
    glVertexAttribPointer((GLuint)1, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glEnableVertexAttribArray(1);

    glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, vboIndex );
    glBufferData( GL_ELEMENT_ARRAY_BUFFER, indices.size()*sizeof(GLuint),&indices[0], GL_STATIC_DRAW);
    glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
这就是我在渲染时所做的调用。 在这个循环中,三角形的指示器count=3和offset=0,而立方体的指示器分别为24和3

glDrawElements(
   GL_TRIANGLES,      
   primitives[i]->indicesCount,    
   GL_UNSIGNED_INT,  
   (void*) (primitives[i]->offsetIndices*sizeof(GLuint))   
);

由于我在发布后仍在进行测试,我最终进行了一次工作尝试,使用:

glDrawElementsBaseVertex(
   GL_TRIANGLES.
   __INDICES_TO_RENDER__,
   GL_UNSIGNED_INT,
   (void*) (__INDICES_RENDERED___*sizeof(GLuint)),
   _VERTICES_RENDERED_BEFORE_   
);
其中“索引到渲染”和“索引到渲染”是计数为3f的值,因此对于立方体,使用24个浮点数作为值“到渲染”,0到“渲染”

“_顶点_渲染_在u之前”作为渲染顶点的人类值工作,因此在渲染立方体之前,它是0,之后,它应该是8

有点奇怪(可能是我做错了什么),但它在我的测试中起了作用:

当时有人说,但我试了好几次,直到我找到了电话的内容


如果专家能够验证这一点,我会更高兴:p.

因为我在发布后仍在进行测试,所以我最终进行了一次工作尝试,使用:

glDrawElementsBaseVertex(
   GL_TRIANGLES.
   __INDICES_TO_RENDER__,
   GL_UNSIGNED_INT,
   (void*) (__INDICES_RENDERED___*sizeof(GLuint)),
   _VERTICES_RENDERED_BEFORE_   
);
其中“索引到渲染”和“索引到渲染”是计数为3f的值,因此对于立方体,使用24个浮点数作为值“到渲染”,0到“渲染”

“_顶点_渲染_在u之前”作为渲染顶点的人类值工作,因此在渲染立方体之前,它是0,之后,它应该是8

有点奇怪(可能是我做错了什么),但它在我的测试中起了作用:

当时有人说,但我试了好几次,直到我找到了电话的内容

如果专家能证实这一点,我会更高兴:p