【发布时间】:2017-05-13 23:21:02
【问题描述】:
我想渲染搅拌机的默认立方体和 Suzanne。我将它们都导出为 OBJ 文件。加载和渲染工作正常,但是当我尝试在同一个场景中渲染它们时,事情变得混乱(对我来说)。
“相关”代码在第 48 到 56 行。
一开始只有 model1(第 51 行,Suzanne 或立方体或其他任何东西),场景按预期渲染。
然后我添加了另一个 model2(第 54 行),它恰好是立方体。 意外的三角形(参见渲染场景,屏幕截图 (I))绘制在立方体的顶部,此时尚未翻译为“离开”。
-
不知道我何时将立方体移到后面的计划或想法,但惊讶地发现垃圾三角形留在原地。 因为我不知道它们是从哪里来的,所以我开始翻转线来动手:
- 先渲染 model1 还是先渲染 model2 并不重要。
- 当我加载两个 default_cubes 而不是一个 suzanne 时,一个立方体非常好,另一个就像第一个屏幕截图中一样。
结果见截图 (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() );
}
【问题讨论】:
-
请将代码添加为代码块而不是图像。