gpt4 book ai didi

ios - OpenGL绘制多个等角立方体

转载 作者:行者123 更新时间:2023-11-29 04:00:13 25 4
gpt4 key购买 nike

我正在尝试以等距相机角度绘制多个立方体。这是绘制一个的代码。 (iOS 上带有 GLKit 的 OpenGL ES 2.0)。

float startZ = -4.0f;

// position
GLKMatrix4 modelViewMatrix = GLKMatrix4Identity;
modelViewMatrix = GLKMatrix4Translate(modelViewMatrix, location.x, location.y, location.z + startZ);

// isometric camera angle
modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, GLKMathDegreesToRadians(45), 1.0, 0, 0);
modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, GLKMathDegreesToRadians(45), 0.0, 1.0, 0);

self.effect.transform.modelviewMatrix = modelViewMatrix;

[self.effect prepareToDraw];
glDrawArrays(GL_TRIANGLES, 0, 36);

问题是它先平移,然后旋转,这意味着对于多个盒子,它们不会对齐(它们看起来像一串钻石。每个盒子都就位并旋转,因此角重叠)。

Cubes

我尝试切换顺序,以便旋转在翻译之前,但它们根本不显示。我的顶点数组绑定(bind)到以原点为中心的单位立方体。

我真的不明白如何控制相机与物体分开。我用投影矩阵搞了一段时间却没有得到它。据我了解,相机应该由 modelViewMatrix 控制,对吧? (“查看”部分)。

最佳答案

您的“相机”变换(模型 View )似乎是正确的,但看起来您正在使用透视投影 - 如果您想要等轴测,则需要更改投影矩阵。

看起来您在绘制每个对象时正在将相机旋转应用于每个对象。相反,如果您的用例如此简单,请模拟 2 深的矩阵堆栈,这样您就只有相机矩阵和每个立方体的矩阵。

  1. 设置您的投影和相机矩阵 - 保留对相机矩阵的引用。
  2. 为每个立方体生成单独的立方体变换矩阵(可能应该仅包含平移 - 无旋转,因此立方体保持轴对齐 - 我认为这就是您想要的)。
  3. 向后 - 将立方体矩阵乘以相机矩阵,并将其用作模型 View 矩阵。

请注意,对于渲染的每个立方体,相机矩阵将保持不变,但模型 View 矩阵会将立方体的单独变换矩阵和相机矩阵合并到单个模型 View 矩阵中。这相当于旧的矩阵堆栈方法 glPushMatrixglPopMatrix(在 GLES 2.0 中不可用)。如果您需要更复杂的对象层次结构(其中立方体在其“本地”坐标空间中具有子对象),那么您可能应该实现自己的完整矩阵堆栈,而不是上面讨论的 2 深等效矩阵。

关于ios - OpenGL绘制多个等角立方体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15958540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com