我正在尝试使用现代的OpenGL和着色器,而不是我到目前为止使用的立即模式。我最近了解了VBO和VAO,我仍然试图绕过它们,但我知道VBO采用了一系列顶点浮点数,然后传递给GPU等
使用VBO绘制多个对象(都是相同的)但在不同位置的最佳方法是什么。我是否需要绘制一个,然后修改预先传入的数组,然后再次绘制并修改,绘制和修改等等......对于屏幕中的所有块,每帧?或者有更好的方法吗?
我正在努力实现这一目标:http://imgur.com/cBgJ0sK
感谢任何帮助 - 当我学习更现代的方式时,我不想学习坏的(已弃用的,旧的)即时模式习惯!
答案 0 :(得分:3)
您不应该修改程序中的顶点,这应该在着色器中完成。为此,您将创建一个表示变换的矩阵,并将在顶点着色器中使用该矩阵。
主要思想是:
您创建一个包含VBO信息的VAO(顶点,法线,纹理坐标,切线信息等)
然后,对于每个不同的对象,您生成一个模型矩阵,其中包含位置,方向和比例(以及其他均匀转换)的信息,并将其发送到着色器以进行转换。
这个想法是你只绑定你的VAO一次,然后绘制所有不同的对象,只发送变化的信息(模型矩阵,可能是纹理)并绘制对象。
要了解如何使用模型矩阵,请阅读以下教程: http://ogldev.atspace.co.uk/www/tutorial06/tutorial06.html
有更好的方法可以做到这一点,但你可以从这里开始。
对您的案例有益的其他信息是使用实例化。 http://ogldev.atspace.co.uk/www/tutorial33/tutorial33.html
稍后,您可以继续间接绘图以获得更好的性能。后来...