Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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 es 2.0 多个VBO多个绘图-不工作_Opengl Es 2.0_Vbo - Fatal编程技术网

Opengl es 2.0 多个VBO多个绘图-不工作

Opengl es 2.0 多个VBO多个绘图-不工作,opengl-es-2.0,vbo,Opengl Es 2.0,Vbo,在我的opengl es 2.0应用程序中,我有两个原语。 对于第一个基元, 我正在为颜色交错的顶点创建一个vbo,为索引创建另一个vbo 我正在绑定第一个原语的VBO,并启用VertexAttributeArray和call DreamElements。 然后,我用translation更新mvp,并为第二个原语绑定VBO,并为第二个原语启用VertexAttributeArray和调用抽屉元素 但仅渲染第一个基本体 // pseudo code sequence. /////////////

在我的opengl es 2.0应用程序中,我有两个原语。 对于第一个基元, 我正在为颜色交错的顶点创建一个vbo,为索引创建另一个vbo

我正在绑定第一个原语的VBO,并启用VertexAttributeArray和call DreamElements。 然后,我用translation更新mvp,并为第二个原语绑定VBO,并为第二个原语启用VertexAttributeArray和调用抽屉元素

但仅渲染第一个基本体

// pseudo code sequence.
//////////////////////////////////////////////////
glBindBuffer(GL_ARRAY_BUFFER, PrimitiveONE_VBOVertexId);
glEnableVertexAttribArray(VERTEX_POS_INDX);
glVertexAttribPointer(VERTEX_POS_INDX, VERTEX_POS_SIZE, GL_FLOAT, GL_FALSE, vtxStride, 0);
offset += (VERTEX_POS_SIZE * sizeof ( GLfloat ));
glEnableVertexAttribArray(VERTEX_COLOR_INDX);
glVertexAttribPointer(VERTEX_COLOR_INDX, VERTEX_NORMAL_SIZE, GL_FLOAT, GL_FALSE, vtxStride, offset);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, PrimitiveOne_VBOIndexId);     
glDrawElements(GL_TRIANGLE_FAN,  indices1Cnt, GL_UNSIGNED_SHORT, 0);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); // unbind vbo
glBindBuffer(GL_ARRAY_BUFFER,0);

glDeleteBuffers(1, &PrimitiveONE_VBOVertexId);
glDeleteBuffers(1, &PrimitiveOne_VBOIndexId);
///////////////////////////////////////////////////////////
myIdentity(mvp);
myIdentity(modelview);
myTranslate(modelview, 0.25f, 0 , -2.0f);
myMultMatrix(mvp, modelview, projection);
glUniformMatrix4fv(mvp_pos, 1, GL_FALSE, &mvp[0][0]);

glBindBuffer(GL_ARRAY_BUFFER, PrimitiveTWO_VBOVertexId);
glEnableVertexAttribArray(VERTEX_POS_INDX);
glVertexAttribPointer(VERTEX_POS_INDX, VERTEX_POS_SIZE, GL_FLOAT, GL_FALSE, vtxStride, 0);
offset += (VERTEX_POS_SIZE * sizeof ( GLfloat ));
glEnableVertexAttribArray(VERTEX_COLOR_INDX);
glVertexAttribPointer(VERTEX_COLOR_INDX, VERTEX_NORMAL_SIZE, GL_FLOAT, GL_FALSE, vtxStride, offset);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, c);   
glDrawElements(GL_TRIANGLE_FAN,  indices2Cnt, GL_UNSIGNED_SHORT, 0);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); // unbind vbo
glBindBuffer(GL_ARRAY_BUFFER,0);

glDeleteBuffers(1, &PrimitiveTWO_VBOVertexId);
glDeleteBuffers(1, &PrimitiveTWO_VBOIndexId);
//////////////////////////////////////////////////////////////

<代码>有什么问题吗?

看起来有些有害的东西,但是很难说它是否是主要的问题:在我们看不到的代码中间,偏移重置到0的某个地方?应该是。使用“顶点\法线\大小”设置颜色属性。该名称表明它可能是错误的值。第二次调用的元素缓冲区id是c,它与其他命名完全不匹配。这是正确的值吗?奇怪的是,您在绘图后删除了所有缓冲区。你只画了一次吗?从你的描述中不清楚:如果你不渲染第一个图元,第二个图元渲染吗?否则,可能会有很多事情。坐标不正确。不将坐标放入视图体积的变换。等等,正如Reto所说,在你的代码中是否有偏移量变量的重置?在您介绍的伪代码中,您将根据对第一个基本体进行的增加的结果来增加第二个基本体。