技术开发 频道

iPhone 开发基础教程之四

  【IT168 技术文档】

        一些OpenGL ES基础知识

  如前所述,OpenGL ES和Quartz 2D采用完全不同的方法进行绘图。对OpenGL ES的详细介绍本身就是一本书,因此我们在此不对其进行讨论。我们使用OpenGL ES重新创建我们的Quartz 2D应用程序,只是为了让你对其有个基本了解,并且向你提供一些示例代码,你可以依据这些代码实现自己的OpenGL应用程序。

  说明 准备在你自己的应用程序中添加OpenGL时,请顺便浏览一下http://www.khronos.org/ opengles/,该网页是OpenGL ES标准组的主页。更好的做法是访问此页并搜索单词“tutorial”:http://www.khronos.org/developers/resources/opengles/

  让我们开始创建应用程序吧。

  构建GLFun应用程序

  在Xcode中,创建一个基于视图的新应用程序,并将其命名为GLFun。为了节省时间,将文件 Constants.h、UIColor-Random.h、UIColor-Random.m和iphone.png从Quartz-Fun项目复制到这个新项目中。打开GLFunViewController.h并进行以下更改。你应该能够识别它们,因为它们与我们之前对 QuartzFunViewController.h进行的更改相同:

  切换到QuartzFunViewController.m并进行以下更改。你应该对它们非常熟悉:

 

 

  这与QuartzFunController.m之间的唯一差别是,我们引用一个名为GLFunView的视图,而不是名为QuartzFunView的视图。进行绘图的代码包含在UIView的子类中。由于这次我们进行绘图的方式完全不同,因此使用一个新类来包含绘图代码比较有意义。

  继续操作之前,你需要在项目中添加几个文件。在12 GLFun文件夹中,你可以找到4个文件,名称分别为Texture2D.h、Texture2D.m、OpenGLES2DView.h和 OpenGLES2DView.m。这些文件中的代码是由苹果公司编写的,它们使得在OpenGL ES中绘制图像更加容易。如果你愿意,可以在自己的程序中随意使用这些文件。

  OpenGL ES本身并没有sprite或图像;它具有纹理,但纹理必须绘制到对象上。在OpenGL ES中绘制图像的方法是绘制一个多边形,然后将纹理映射到该多边形上,以便它与多边形的大小完全匹配。Texture2D将相对比较复杂的过程封装到一个易于使用的类中。

  OpenGLES2Dview是一个 UIView子类,它使用OpenGL进行绘图。我们设置此视图的目的是便于在一对一的基础上映射OpenGL ES的坐标系和视图的坐标系。OpenGL ES是一个三维系统。OpenGLES2Dview将OpenGL 3-D世界映射到2-D视图的像素。注意,尽管视图和OpenGL上下文之间是一对一的关系,但是y坐标仍然是翻转的,因此我们必须将y坐标从视图坐标系(y增加表示向下移动)转换为OpenGL坐标系(y增加表示向上移动)。

  若要使用OpenGLES2Dview类,首先要将其子类化,然后实现draw方法进行实际绘图。还可以在视图中实现所需的任何其他方法,如与触摸有关的方法。

  使用UIView子类模板创建一个新文件,并将其命名为GLFunView.m,必须创建它的头文件。现在,你可以双击 GLFunViewController.xib,然后设计其界面。

  完成之后,保存并返回到Xcode。单击GLFunView.h并进行以下更改:

  此类与QuartzFunView.h非常相似,但它不使用UIImage来存放图像,我们使用Texture2D来简化将图像绘制到OpenGL ES上下文中的过程。我们还将超类从UIView改为OpenGLES2Dview,以便视图支持使用OpenGL ES进行二维绘图。

       更多详情,请到http://www.mobpub.net/viewthread.php?tid=3324&page=1&extra=#pid3550下载PDF资料,详细阅读

      注意:需要注册登陆之后才能下载附件,此ID与IT168各站点通用。在此代表Mobpub.net对大家表示欢迎

0
相关文章