我想知道在3D场景中存储对象位置的最佳方法是什么。在我的例子中,场景实际上是游戏的关卡。
每个场景有:
- 它自己的投影矩阵。
- 要渲染的模型列表
每个模型有:
- 一个显示自身的GLSL程序
- 纹理
- "模型"矩阵
我正在使用gles2。所以没有glPushMatrix glPopMatrix glTranslate等。他们不在。相反,我有我自己的函数来操作我自己的矩阵对象。
1)设置投影矩阵(使用正交矩阵)
_math_matrix_ortho(&this->ProjectionMatrix, 0.0, 1.0, 0.0, (float)height / (float)width, -1.0f, 1.0f);
2)加载每个模型
3)缩放每个模型,使它们按比例排列在右边。缩放函数调整模型的"模型"矩阵。
model->modelMatrix.Scale(0.25, 0.25, 0.25);
4)将每个模型移动到合适的位置
model->modelMatrix.Translate(2.0, 0.0, 0.0);
7)渲染每个模型
对我来说似乎很奇怪:为了定位模型,翻译模型的矩阵是否合适?
我应该将模型ID与旋转,缩放和翻译因素一起存储在某个文件中吗?
一般来说,你希望每帧尽可能少地进行矩阵计算,因为这些计算非常昂贵。所以在你的实体类中,将它们的位置,旋转,缩放绝对值存储在单独的3D向量中(旋转甚至可能是四元数),并且仅在渲染期间将它们连接到矩阵。