OpenGL模型类要求

时间:2013-09-10 23:30:36

标签: opengl 3d modeling

在你的网格和纹理加载你的模型类中时,我一直在想这个问题,你保留了什么?我想一旦顶点与glBufferData()一起传递我不再需要它们了,因为对glDrawArrays()的调用依赖于最后一个glBindBuffer()这是调用loadModel()方法后我所有的Model类保持的。 / p>

GLuint vboID;//for... something
GLuint vaoID;//for  glBindVertexArray(vaoID);
GLuint textureID;//for glBindTexture(GL_TEXTRUE2D, textureID);
GLuint vboElementCount;//for glDrawArrays(GL_TRIANGLES,0,vboElementCount);

据我所知,这就是我需要渲染模型的全部内容。除此之外我还应该为简单模型保留什么呢?

编辑:在有人提到位置旋转比例和你有什么之前,我有一个ModelInstance类包含那些矩阵,我传给它一个指向Model对象的指针,这样我就可以拥有同一模型的多个实例。 / p>

1 个答案:

答案 0 :(得分:1)

我保持

  • VBO ID,所以当我不再需要VBO时,我可以删除它们。
  • VAO id,所以我可以在最终绘制和删除之前绑定。
  • 传递给glDrawElements()
  • 的索引数
  • 所有必需纹理的ID。
  • 材料和转换属性(一般的制服)。

只要网格是静态的,这就可以正常工作。只要您想在CPU上操作网格,例如平滑或拆分它们,就必须在主存储器中保留一份副本。 也许您还希望保留一个低分辨率占位符,例如更专业的渲染技术,如occlusion culling。但同样,这是一个特例;您的问题列出了基本渲染所需的一切

注意:您应该考虑切换到glDrawElements()。它将减少您必须存储和传输的顶点数据量。