2012-11-28 47 views
1

可能重复:
Drawing a sphere in OpenGL ES球中的OpenGL ES 2.0的iOS

我已浏览了相当一段时间了,而且还没有找到适当的答案。我开始学习Opengl ES 2.0(因为我需要在大学开展一个项目),并且最近完成了一个圈子的绘制。 WOOPIE!

我已经看了很多类似的问题,但它或者过时了,或者我太复杂了,我无法掌握。 任何人都可以指出我如何在iOS上使用opengl ES 2.0绘制坚实球体的正确方向吗?

回答

6

我不确定你有多远,所以我只想给出一些我认为可能有帮助的一般说明,并指出一些我一直用来攀登学习的资源曲线。

球体是一个足够复杂的对象,您可能不想在代码中生成顶点,因为您可能已经绘制了圆 - 您将需要使用像Blender或Maya或Houdini这样的程序,无论你喜欢用什么来建立一个3D对象,然后导出它。

您的目标是遵循以下工作流: 3D程序> .obj或者.collada文件> OpenGL可以使用的顶点数组。你的顶点数组(应该是一个C数组[],而不是NSArray)将为每个顶点保存一个{x,y,z}位置,并且你可能还想使用纹理坐标和法线。如果您计划使用纹理,则需要从3D程序中导出纹理坐标,如果您计划照明该对象,则需要导出法线。纹理坐标将采用格式{s,t},它将与其关联的顶点连接到矩形纹理上的2d坐标。法线将是格式为{x,y,z}的向量。 tex坐标&法线可能在同一个阵列中,您有顶点(交错)或单独的阵列。如果它们是交错的,那么在你的代码中你将有一个VBO,通常它会更快,但是如果它们不是,你将拥有独立的VBO - 一个用于位置顶点,一个用于tex坐标,一个用于法线。

这是一个很好的脚本,用于将.obj转换为与OpenGL一起使用的C头文件。从您的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

+0

嗨。你提到我们的工作流程应该是3D程序> .obj或者.collada文件> .h文件。你能推荐任何脚本,比如你为.obj文件所做的一个脚本,该脚本将collada文件转换为.h,以用于OpenGL?感谢:) – ScarletWitch

+0

我相信有一个collada导入程序包含在本书学习OpenGL ES for iOS的示例代码中:http://my.safaribooksonline.com/book/animation-and-3d/9780132478939 – jankins

+0

男人你真棒!非常感谢! – gbk