1
10
因为我对OpenGL ES非常了解,所以我参加了一个演示项目,做了很多你描述的事情。其具体目的是,只要性能足够好,就可以用OpenGL ES提供的最简单的方法来完成所有工作。 从苹果提供的OpenGL模板开始,我编写了一个新的类,其中包含一个注释很多的实现文件122行,将PNG图像作为纹理加载。我修改了示例视图控制器,根据需要绘制一个skybox,并使用普通版iPhone惯性滚动响应触摸,这意味着编写的代码少于200行(也有注释)。 为了达到这个目的,我需要知道:
当然,要遵守正常的视图控制器生命周期指令。例如,纹理在viewDidLoad上加载,在viewDidUnload上释放,以确保该视图控制器能够很好地处理潜在的内存警告。 主要的观察结果是,除了了解Objective-C的信号机制外,大部分都是C的东西。您主要使用C数组和引用来调用C函数,包括OpenGL和CoreGraphics。所以你自己编写这个代码的一个先决条件是在C中感到快乐,而不仅仅是在Objective-C中。
我假设磁盘上的纹理大小合适。出于实际目的,这意味着假设它们是沿每条边两个大小的幂。我的是512x512。 OpenGL的纹理管理非常简单;它只是阅读手册来了解纹理名称、名称分配、纹理参数和上传图像数据。更多的日常事务,更多的是了解正确的功能,而不是管理一个直观的飞跃。 为了向OpenGL提供几何图形,我刚刚完整地写出了数组。我想你需要一点空间思维来做这件事,但在纸上画出一个三维立方体,并给角落编号将是一个很大的帮助。有三个相关数组:
在我的代码中,我使用了24个顶点,将立方体的每个面都视为一个逻辑上离散的东西(所以,6个面,每个面都有4个顶点)。为了简单起见,我只使用三角形定义了几何图形。向OpenGL提供这些东西实际上是非常烦人的,当你开始时,犯一个错误通常意味着你的程序在OpenGL驱动程序的内部崩溃,而没有给你一个你做错了什么的提示。一次积累一点可能是最好的。 就能够托管OpenGL内容的UIView而言,我或多或少使用了OpenGL模板中苹果直接提供的普通功能。我所做的一个更改是显式地禁用任何尝试使用OpenGL ES 2.x.1.x的操作,这对于这个任务来说已经足够了,因此我们首先通过不提供两个可选的渲染路径来获得简单性,其次因为es2.x路径会复杂得多。ES 2.x是带有像素和顶点着色器的完全可编程管道,但在ES-land中,固定管道被完全删除。因此,如果你想要一个,那么你必须提供你自己的正常矩阵堆栈的替代品,你必须编写顶点和片段着色器来做'一个有纹理的三角形',等等。 触摸跟踪并不是特别复杂,或多或少只是需要我了解视锥是如何工作的,以及如何在Cocoa touch中传递触摸。一旦你做了其他的事情,这一点应该很容易。 值得注意的是,我必须实现的数学非常简单。只是触摸跟踪,真的。假设您想要一个Google Maps类型视图,这意味着我可以完全依赖OpenGL的内置旋转功能。在任何时候,我都不会显式地处理矩阵。 所以,你需要多长时间来写取决于你对C和CoreGraphics的自信,以及你有时在黑暗中编写代码的快乐程度。因为我知道我在做什么,整个过程花了两三个小时。
我将视图控制器设置为只有一个视图,即OpenGL视图。但是,普通的iPhone合成规则适用,在您的项目中,您可以轻松地将普通控件放在顶部。你可以在 mediafire . StackOverflow post的长度限制使我无法在这里放置大量代码片段,但是如果您有任何特定的问题,请随时提问。 |
2
2
如果你是从零开始学习OpenGL ES的话,那将会非常困难。我会用一个图形引擎来完成大部分繁重的工作。我现在正在玩《食人魔3》,从我目前看到的情况来看,我可以推荐它: http://www.ogre3d.org/ . 它有Skybox(和更多)的盒子外,应该是相当直接的做。 |
3
1
我想你可以这样做,这里有一些帮助你开始的链接: http://sidvind.com/wiki/Skybox_tutorial 常见问题:
查看stackoverflow项目编号2859722和2297564。
太空景观
网 它们不是iphone特有的,但是它们很好地解释了opengl。我想有些人也把它们移植到了电话里,我现在就是找不到它们。 |
ThomThomPhao · 在另一个视图中访问变量以重置它 2 年前 |
bvh · 禁用UISearchBar中的搜索字段 6 年前 |
Pradumna Patil · REST API的问题 6 年前 |
yakovlevvl · iPad和iPhone的不同UI 7 年前 |
Swathi · 我想用JSON数据生成tableview表单[关闭] 7 年前 |
Zander · 带伸缩高度的iPad 7 年前 |