我想渲染blender的默认立方体和Suzanne。我把它们都导出为OBJ文件。加载和渲染工作正常,但当我尝试在同一场景中渲染它们时,事情变得令人困惑(对我而言)。
"相关"代码在第48到56行。
一开始只有 model1 (第51行,Suzanne或立方体或其他任何东西),场景按预期呈现。
然后我添加了另一个 model2 (第54行),它恰好是多维数据集。 非预期的三角形(参见渲染的场景,截图(I)),其中绘制在立方体的顶部,未被翻译和#34;远离#34;在这一点上。
不知道我将立方体移到后面的计划或想法,但惊讶地发现垃圾三角形停留在原地。 因为我不知道他们来自哪里,所以我开始翻转线来抓住它:
结果见于Screenshot(II)。我在 model1 之前构建 model2 ,现在垃圾在不同的地方以不同方式呈现。
下面的代码显示了模型构造函数的最后一部分,其中配置了VBA。 render()函数是截图中显示的函数。
[...]
glGenVertexArrays( 1, &VBA );
glBindVertexArray( VBA );
glGenBuffers( 1, &VBO[0] );
glBindBuffer( GL_ARRAY_BUFFER, VBO[0] );
glBufferData( GL_ARRAY_BUFFER, sizeof(glm::vec3) * vertices.size(), vertices.data(), GL_STATIC_DRAW );
glEnableVertexAttribArray( 0 );
glVertexAttribPointer( 0, 3, GL_FLOAT, GL_FALSE, 0, 0 );
}
void Model::render( void )
{
glUniformMatrix4fv( model_location, 1, GL_FALSE, &model_matrix[0][0] );
glBindVertexArray( VBA );
// 'vertices' is of type std::vector<glm::vec3>
glDrawArrays( GL_TRIANGLES, 0, sizeof(glm::vec3) * vertices.size() );
}
答案 0 :(得分:4)
您将错误的数据传递给glDrawArrays
。第三个参数必须包含顶点数,而不是以字节为单位的大小。正确的电话会是:
glDrawArrays( GL_TRIANGLES, 0, vertices.size() );