c – 在现代OpenGL中绘制多个对象的最佳方法是什么?

我正在尝试使用现代的OpenGL和着色器,而不是我到目前为止使用的立即模式.我最近了解了VBO和VAO,我仍然试图绕过它们,但我知道VBO需要一个浮点数组,它们是顶点,然后传递给GPU等

使用VBO绘制多个对象(都是相同的)但位于不同位置的最佳方法是什么.我是否需要绘制一个,然后修改预先传入的数组,然后再次绘制并修改,绘制和修改等等……对于屏幕中的所有块,每帧?或者,还有更好的方法?

我正在努力实现这个目标:http://imgur.com/cBgJ0sK

任何帮助都表示赞赏 – 当我学习更现代的方式时,我不想学习坏的(已弃用的,旧的)即时模式习惯!

最佳答案 您不应该修改程序中的顶点,这应该在着色器中完成.为此,您将创建一个表示变换的矩阵,并将在顶点着色器中使用该矩阵.

主要想法是:

您创建一个包含VBO信息的VAO(顶点,法线,纹理坐标,切线信息等)

然后,对于每个不同的对象,您将生成一个模型矩阵,其中包含位置,方向和比例(以及其他均匀转换)的信息,并将其发送到着色器以进行转换.

我们的想法是,您只需将VAO绑定一次,然后绘制所有不同的对象,只需发送更改的信息(模型矩阵,可能是纹理)并绘制对象.

要了解如何使用模型矩阵,请阅读如下教程:
http://ogldev.atspace.co.uk/www/tutorial06/tutorial06.html

有更好的方法可以做到这一点,但你可以从这里开始.

对您的案例有益的其他信息是使用实例化.
http://ogldev.atspace.co.uk/www/tutorial33/tutorial33.html

之后,您可以继续进行间接绘图,以获得更好的性能.后来…

点赞