0

我想知道在 3D 场景中存储对象位置的最佳方法是什么。就我而言,场景实际上是游戏的关卡。

每个场景都有:

  • 它是自己的投影矩阵。
  • 要渲染的模型列表

每个模型都有:

  • 顶点列表
  • 一个 GLSL 程序来呈现自己
  • 质感
  • “模型”矩阵

我正在使用 GLES 2。所以没有 glPushMatrix、glPopMatrix、glTranslate 等。它们不可用。相反,我有自己的函数,可以对自己的 Matrix 对象进行操作。

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 与旋转、缩放和平移因子一起存储在某个文件中吗?

4

1 回答 1

1

通常,您希望每帧尽可能少的矩阵计算,因为这些计算非常昂贵。因此,在您的实体类中,将它们的位置、旋转、缩放绝对值存储在单独的 3D 向量中(旋转甚至可能在四元数中),并且仅在渲染期间将它们连接到矩阵。

于 2011-04-17T06:02:49.487 回答