gpt4 book ai didi

ios5 - 在 Open GL ES 2.0 (iOS GLKit) 中处理多个网格?

转载 作者:行者123 更新时间:2023-12-04 09:43:56 24 4
gpt4 key购买 nike

我已经设法使用 iOS 的 GLKit 在 Open GL ES 2.0 中创建了一个网格。我不知道如何创建第二个网格,除了位置不同外,它看起来与第一个网格相同。

我认为如果有人可以简单地提供一些绘制多个网格的示例代码,那将是最有帮助的,因为我认为我完全错误地解决了这个问题。尽管如此,这里列出了我为尝试完成这项工作所做的工作。

  • 我创建了两个顶点信息的 C 数组。第一个是我的模板(以 0,0,0 为中心的硬编码坐标),第二个是我想要显示的(最初为空)。
  • 我创建了两个索引信息的 C 数组。与顶点信息处理相同。
  • 我有两个全局变量 int,vertexCount 和 indiceCount,最初都是 0。
  • 我有一个 c 函数,createAt(float x, float y, float z)。此函数将我的顶点模板复制到我的顶点显示数组中,然后将传入的偏移量应用于每个顶点。它还复制索引并应用偏移量,以便它们指向新的显示顶点。

  • 但这不起作用。只有一个对象被绘制在屏幕上。

    查看其他人的问题和答案,听起来可能我应该有多个顶点缓冲区?我不知道;我非常困惑。

    最佳答案

    由于 GLKBaseEffect 类,使用 GLKit 渲染具有相同几何形状但不同位置或方向的多个网格非常容易。看看 Xcode 提供的“OpenGL Game”模板,它用 GLKit 渲染一个立方体,用 OpenGL ES 2.0 渲染另一个立方体。

    这是对 OpenGL 游戏示例的修改,它在两个旋转的立方体上方添加了一个新立方体:

    - (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
    {
    glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glBindVertexArrayOES(_vertexArray);

    // Render the object with GLKit
    [self.effect prepareToDraw];

    glDrawArrays(GL_TRIANGLES, 0, 36);

    // Render another version of the object with GLKit

    // First put it in a different place (you would normally
    // do this in the update loop):
    GLKMatrix4 baseModelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, -4.0f);
    baseModelViewMatrix = GLKMatrix4Rotate(baseModelViewMatrix, _rotation, 0.0f, 1.0f, 0.0f);
    GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 1.5, -0.0f);
    modelViewMatrix = GLKMatrix4Multiply(baseModelViewMatrix, modelViewMatrix);
    self.effect.transform.modelviewMatrix = modelViewMatrix;

    // Now render it:
    [self.effect prepareToDraw];
    glDrawArrays(GL_TRIANGLES, 0, 36);

    // Render the object again with ES2
    glUseProgram(_program);

    glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, _modelViewProjectionMatrix.m);
    glUniformMatrix3fv(uniforms[UNIFORM_NORMAL_MATRIX], 1, 0, _normalMatrix.m);

    glDrawArrays(GL_TRIANGLES, 0, 36);
    }

    “渲染另一个版本”和“再次渲染对象”注释之间的代码是新的。它需要做的第一件事是为额外的立方体提出一个新的模型 View 矩阵;这是基于 update: 中的代码(未显示)。通常我会把代码放在那里,但我想保持样本简短。

    接下来它渲染立方体,这对于 GLKit 来说非常简单。耶 GLKit!

    Screenshot of three cubes in Apple's GLKit / OpenGL Game sample

    我希望这有帮助。听起来你在用额外的顶点和索引数组咆哮错误的树;如果你想渲染不同的几何图形,这是必要的,但你在不同的地方说了同一个模型。这是 GLKit 的理想选择。

    关于ios5 - 在 Open GL ES 2.0 (iOS GLKit) 中处理多个网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9142742/

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