在你的网格和纹理加载你的模型类中时,我一直在想这个问题,你保留了什么?我想一旦顶点与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>
答案 0 :(得分:1)
我保持
glDrawElements()
只要网格是静态的,这就可以正常工作。只要您想在CPU上操作网格,例如平滑或拆分它们,就必须在主存储器中保留一份副本。 也许您还希望保留一个低分辨率占位符,例如更专业的渲染技术,如occlusion culling。但同样,这是一个特例;您的问题列出了基本渲染所需的一切
注意:您应该考虑切换到glDrawElements()
。它将减少您必须存储和传输的顶点数据量。