【问题标题】:How do I create a zoom effect in OpenGLES on the iPhone?如何在 iPhone 上的 OpenGLES 中创建缩放效果?
【发布时间】:2008-09-19 16:38:34
【问题描述】:

我有一个 OpenGL ES 游戏,我正在一起破解。其中一部分涉及查看一个大的“类似地图”的区域,然后双击一个部分以“放大”它。您将如何使用 OpenGL ES 来提供这种效果(假设它可能需要放大地图的不同部分)。

我听说过 glScale 和 glOrtho,但我不清楚它们实际上是如何工作的,因为整个 openGL 世界对我来说都是全新的。

【问题讨论】:

    标签: iphone objective-c opengl-es


    【解决方案1】:

    您描述的 2-D 缩放使用 Core Animation 可能会更好地实现。 NSView(及其 NDA 的 iPhone 对应物)在您更改其框架时提供隐式动画。在这种情况下,您需要做的就是将框架的 origin.x 和 origin.y 以及 size.width 和 size.height 设置为这样的值,以使视图大于屏幕。如果您这样做并将其包装在适当的调用中以启动和提交动画,您将免费获得缩放动画。 Core Animation 在幕后使用 OpenGL 来制作动画。

    但是,如果您觉得必须在 OpenGL 中执行此操作,我可以建议我在 http://www.sunsetlakesoftware.com/2008/08/05/lessons-molecules-opengl-es 上写的一些小文章吗?我是Molecules 的作者,这是一个免费的 iPhone 3-D 分子可视化工具,在我开始这个项目之前,我对 OpenGL ES 一无所知。 3 周后,它在 App Store 中发布。

    OpenGL 调用非常简单,围绕它们的数学运算会让您头疼。放大对象实际上非常简单,可以通过移动相机或实际缩放对象来完成。对于分子,我使用 glScalef(x,y,z) 函数缩放对象,其中 x、y 和 z 是您希望应用于模型对象的缩放因子。我逐步进行缩放。也就是说,我不会在每个渲染帧的开头重置转换矩阵(使用 glLoadIdentity()),而是根据用户输入稍微缩放它。如果用户将手指分开 5%,我将比例增加 5%。

    再次,我建议 Core Animation 用于您描述的 2-D 缩放,但在 OpenGL ES 中实现相同的结果并不难。

    【讨论】:

    • 我原以为缩放分子实际上比移动相机慢很多,因为缩放分子意味着必须修改所有数据,但移动相机只是改变一个将被发送的矩阵到图形 CPU。
    • @danio 我认为这不一定是真的。缩放所有对象需要一次性修改应用于这些对象的模型到世界转换矩阵。将每个对象从模型坐标转换为世界坐标仍然只是一个矩阵乘法。
    【解决方案2】:

    恕我直言,答案是花几天时间学习 OpenGL 的基础知识,网上有比这里更好的地方。

    【讨论】:

    • 我倾向于通过回答几个基本问​​题来学习。这似乎是回答这个特定问题的好地方,因为它很可能是 1-4 行代码。
    • 很公平,但您的问题的答案必然是关于 OpenGL 转换等的冗长教程。花时间了解基本面是值得的; nehe.gamedev.net 是一个很好的起点。
    猜你喜欢
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2013-03-23
    • 1970-01-01
    相关资源
    最近更新 更多