1

可能重复:
在 OpenGL ES 中绘制球体

我已经浏览了很长一段时间,但还没有找到合适的答案。我开始学习Opengl es 2.0(因为我需要在大学做一个项目),最近完成了画一个圆圈。哇!

我看过很多类似的问题,但要么已经过时,要么我太复杂而无法理解。谁能指出我如何在 iOS 上使用 opengl ES 2.0 绘制实心球体的正确方向?

4

1 回答 1

6

我不确定你已经走了多远,所以我将给出一些我认为可能会有所帮助的一般性说明,并指出我一直在使用的一些资源来爬上学习曲线。

球体是一个足够复杂的对象,你可能不想在代码中生成顶点,因为你可能已经画了圆——你会想要使用像 Blender 或 Maya 或 Houdini 这样的程序,无论你喜欢什么用于构建 3d 对象,然后将其导出。

您的目标是遵循如下工作流程:3D 程序 > .obj 或者可能是 .collada 文件 > OpenGL 可以使用的顶点数组。

您的顶点数组(应该是 C 数组 [],而不是 NSArray)将为每个顶点保存一个 {x,y,z} 位置,您可能还想使用纹理坐标和法线。如果您打算使用纹理,则需要从 3D 程序中导出纹理坐标,如果您打算为对象照明,则需要导出法线。纹理坐标将采用 {s,t} 格式,它将与之关联的顶点连接到矩形纹理上的 2d 坐标。法线将是格式为 {x,y,z} 的向量。tex 坐标和法线可能在同一个数组中,您的顶点位于(交错)或单独的数组中。如果它们是交错的,那么在您的代码中,您将拥有一个 VBO,并且通常更快,但如果不是,您将拥有单独的 VBO - 一个用于位置顶点,

这是我遇到的一个很好的脚本,用于将 .obj 转换为 C 头文件以与 OpenGL 一起使用。因此,从 3D 程序导出到 .obj 后,您会将 .obj 传递给此脚本,它会输出一个 .h 文件: http ://heikobehrens.net/2009/08/27/obj2opengl/

一旦你有了 C 头文件,你只需 #import "sphere.h" - 然后当你稍后调用 glBufferData 来读取顶点时,你传递 sphere.h 中的数组的名称。

这本书是我在 iOS 上学习 OpenGL 时遇到的最好的书。它对 GLKit 类提供了很好的解释,对初学者很友好:http: //my.safaribooksonline.com/book/animation-and-3d/9780132478939

如果它有帮助,这里有一些示例代码,我在几个月前的一次演讲中整理了一些示例代码。它实际上让我们“进入”一个爆炸的球体,让我们滑动旋转: http ://davidsweetman.com/mobilemeetup-talk-glkit-demo.html

于 2012-11-29T01:13:39.073 回答