gpt4 book ai didi

iphone - 使用 OpenGL ES 在 2D 空间中定位元素

转载 作者:行者123 更新时间:2023-12-03 18:38:38 25 4
gpt4 key购买 nike

在业余时间,我喜欢使用 OpenGL ES 在 iPhone 上进行游戏开发。我正在制作一个小型 2D 横向卷轴演示,只是为了好玩,而且我对 OpenGL 还比较陌生,我希望获得一些更有经验的开发人员对此的意见。

所以这是我的问题:在模型空间中指定每个 2D 元素的顶点,然后每次绘制框架时将每个元素转换到其最终 View 空间是否有意义?

例如,假设我有一组 block (方 block )构成横向卷轴游戏中的地面。每个方 block 定义为:

const GLfloat squareVertices[] = {
-1.0, 1.0, -6.0, // Top left
-1.0, -1.0, -6.0, // Bottom left
1.0, -1.0, -6.0, // Bottom right
1.0, 1.0, -6.0 // Top right
}

假设我有 10 个这样的正方形,我需要将它们绘制在一起作为下一帧的地面。我应该对当前场景中可见的每个方 block 执行类似的操作吗?

glPushMatrix();
{
glTranslatef(currentSquareX, currentSquareY, 0.0);
glVertexPointer(3, GL_FLOAT, 0, squareVertices);
glEnableClientState(GL_VERTEX_ARRAY);

// Do the drawing
}
glPopMatrix();

在我看来,对场景中的每个 2D 元素、每一帧执行此操作会有点紧张,我想比我更频繁使用 OpenGL 的聪明人可能有更好的方法来执行此操作。

综上所述,我希望听到我应该分析代码并查看可能存在的瓶颈:对于那些人,我说:我还没有编写任何代码,我只是在我的思想围绕它的过程中,这样当我真正去写它时,它会变得更顺利。

关于分析和优化的主题,我真的不想在这里过早地优化,我只是想集中精力思考如何设置 2D 场景并渲染它。就像我说的,我对 OpenGL 比较陌生,我只是想了解一下事情是如何完成的。如果有人对更好的方法有任何建议,我很想听听您的想法。

请记住,我目前对 3D 不感兴趣,只对 2D 感兴趣。谢谢!

最佳答案

当您有很多模型时,您关心将模型(在本例中为正方形)从模型坐标转换为世界坐标所需的开销。这似乎是对静态模型的明显优化。

如果您在世界坐标中构建正方形的顶点,那么当然会更快,因为每个正方形将避免这三个函数(glPushMatrix、glPopMatrix 和 glTranslatef)的额外成本,因为不需要从渲染时模型到世界坐标。我不知道这会快多少,我怀疑这不会是一个巨大的优化,并且您失去了将正方形保留在模型坐标中的模块化性:如果将来您决定希望这些正方形可移动怎么办?如果你将它们的顶点保留在世界坐标中,这将会困难得多。

简而言之,这是一种权衡:

世界坐标

  • 更多内存 - 每个方 block 都需要它的自己的一组顶点。
  • 更少的计算 - 无需执行glPushMatrix、glPopMatrix 或渲染时每个方 block 的 glTranslatef。
  • 灵 active 较差 - 缺乏支持(或复杂化)动态移动这些方 block

模型坐标

  • 更少的内存 - 方 block 可以共享相同的顶点数据
  • 更多计算 - 每个方格都必须执行三个额外功能渲染时间。
  • 更灵活 - 正方形可以很容易地通过操纵来移动glTranslatef 调用。

我想知道什么是正确决定的唯一方法是通过实践和分析。我知道你说你还没有写这个,但我怀疑无论你的方 block 是在模型坐标还是世界坐标中,都不会产生太大的区别 - 如果有的话,我无法想象你可以构建的架构创建难以将方 block 从模型切换到世界坐标的位置,反之亦然。

祝您在 iPhone 游戏开发中一切顺利!

关于iphone - 使用 OpenGL ES 在 2D 空间中定位元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1116279/

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