移动对象Opengl Es 2.0

时间:2011-08-14 08:20:56

标签: opengl-es

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

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

我也使用VBO

2 个答案:

答案 0 :(得分:3)

从准确的角度来看,这两种方法大致相同。

从性能的角度来看,它是关于最大限度地减少瓶颈: 对于单个方块,您可能无法测量任何差异,但是当您考虑100万个方块(或三角形)时,认为会变得更复杂:

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

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

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

答案 1 :(得分:1)

不要通过更改所有顶点来移动对象!具有数千个顶点的复杂模型怎么样?即使它是一个简单的方块,也不要进化出这样糟糕的做法。这正是变换矩阵的用途。您已在着色器代码中使用转换矩阵。从命名我认为它是一个预乘的模型 - 视图 - 投影矩阵。因此,它包括将对象定位在世界空间中的模型矩阵(这里是您的翻译通常应该进入的位置),视图矩阵将世界定位在眼睛/相机空间中(有时模型和视图矩阵被组合成单个模型视图矩阵,如在固定函数GL)和投影矩阵中对剪切体积进行任何类型的透视投影和/或变换,所有三个相乘在一起作为P * V * M.如果对这些变换矩阵及其使用仍有一些问题,请参考一些关于三维变换的文献或者只是你最喜欢的OpenGL教程。