移动对象Opengl Es 2.0



我有点困惑,我需要移动我的基本正方形。我应该使用我的翻译矩阵或只是改变对象顶点。哪个是准确的?

使用顶点着色器gl_Position = myPMVMatrix * a_vertex;

和VBO

从准确性的角度来看,这两种方法都差不多。

从性能的角度来看,这是关于最小化瓶颈:对于单个正方形,您可能无法测量任何差异,但当您考虑一百万个正方形(或三角形)时,情况就变得有点复杂了:

如果你所有的三角形都改变了相对于彼此的位置,你可能最好改变vbo,因为你可以将数据直接推送到显卡的内存,而不是进行一百万次OpenGl调用(这非常慢)。

如果所有的三角形相对于彼此保持在相同的位置(就像在普通3d模型中的情况一样),你应该改变变换矩阵。在这种情况下,您不必再次将数据推入gfx内存,并且您只有一个函数调用,并且您只将几个字节的数据传输到gfx内存。

根据您的应用程序,将您的三角形划分为不同的类别并适当地更新它们可能是一个不错的选择。

不要通过改变所有顶点来移动对象!那么一个有数千个顶点的复杂模型呢?即使是一个简单的正方形,也不要养成这种坏习惯。这就是变换矩阵的作用。你已经在着色器代码中使用了一个变换矩阵。从命名来看,我认为它是一个预乘模型-视图-投影矩阵。所以它由模型矩阵组成,在世界空间中定位对象(这是你的翻译通常应该进入的地方),视图矩阵在眼睛/相机空间中定位世界(有时模型和视图矩阵被组合成一个单一的模型视图矩阵,就像在固定函数GL中一样),投影矩阵做任何类型的透视投影和/或转换到剪辑体积。如果对这些变换矩阵和它们的使用还有一些问题,可以参考一些关于3d变换的文献或你最喜欢的OpenGL教程。

最新更新