iPhone开发:建立3D界面

 

iPhone开发:建立3D界面

苹果公司于07年发布的iPhone是手机业一大*性的手机终端,iPhone操作系统是:Mac OS X,固件升级由去年发布1.0到现在的2.0固件.iPhone屏幕大小3.5英寸,分辨率为:320x480,触摸屏,完全用手指就可以完成所有的操作,更为我们惊喜的是条支持OpenGL_Es1.4版本,有着620MHz的ARM处理器,能够非常流畅的运行我们制作的3D精美游戏.

    我也是刚学,把自己学的分享下,难免有些错误,希望大家一起指正,下面我介绍下用iPhoneSDK开发3D游戏最基本的事情 - 建立3D窗口界面


    有关iPhone的开发环境我这里忽略了,需要的可以到网上查阅相关的文章,在这里我使用的是iPhone官方SDK来开发(可以到Apple官方网站下载免费iPhoneSDK),苹果公司iPhoneSDK提供了一个模板给我们迅速建立OpenGL_Es窗口界面的源码,接下来就用它来解释开发过程.

    我们首先打开XCode,(刚开始使用iPhoneSDK,会提示是针对iPhone还是Mac,选择iPhone即可),在上面的Xcode菜单下:"File/New Project.."来新建一个界面,截图如下:

   iPhone开发:建立3D界面_第1张图片

 在 iPhone OS面板的"Application"下选择"OpenGL ES Application",然后点击"Choose",它提示工程名称和工程保存的路径,我们这里的工程名字取为:"OpenGLEx",最后点击"OK",就可以看到iPhoneSDK,自动为我们生成的工程模板文件了,截图如下:

 (图)iPhone开发:建立3D界面

 

  二话不说,我们先不管里面的文件,立马点击"Build and Go"图标,看看在iPhone模拟器里面运行的效果,看下面截图:
    iPhone开发:建立3D界面_第2张图片

呵呵,好看不,模拟器的iPhone和真机真像,很漂亮,而且比真机运行速度流畅,你可以通过菜单来90度旋转iPhone模拟器,就和真的一样噢.


    接下来说说它的源码构成:


    如上图所示,在OpenGLEx下面有5个文件夹:Classes,Other Sources,Resources,Frameworks和Products,他们的作用分别是:程序执行源文件包,工程其他源文件包,资源文件包,相关类库包和产品文件包.而其他的"Targets","Executables"...先不管.

    1.首先看Frameworks,这是我们写程序需要导入的类库,就是iPhone公开的接口API,例如我们点击 OpenGLES.framework,可以看到EAGL.h,EAGLDrawble.h,gl.h和glext.h等API头文件,单击这些文件可以看到这些文件的详细内容,可供我们查询相关API.

    2.再看Resources,有个MainWindow.xib和Info.plist,对于MainWindow.xib文件它是Xcde的用另一个可视化编辑工具Interface Builder建立的,它的功能非常强大,可以添加和编辑UI控件到iPhone上,并且可以在代码部分控制添加的控件和在没有代码的情况下在 iPhone模拟器上预览搭建好的界面.总之,它提供给我们在设计模式下搭建界面,并且做为1个资源文件供我们在代码部分调用.

而Info.plist,它标记了工程的所以信息,例如软件版本,公司名称,图标,国际化,和模拟器设置等.如截图所示:

iPhone开发:建立3D界面_第3张图片

3.然后再看Other Sources,有个OpenGLEx_Prefix.pch文件,它是用来预先配置工程运行环境,它的默认代码为:

复制到剪贴板  C/C++代码
  1. //   
  2. // Prefix header for all source files of the 'OpenGLEx' target in the 'OpenGLEx' project   
  3. //   
  4.   
  5. #ifdef __OBJC__   
  6. #import <Foundation/Foundation.h>   
  7. #import <UIKit/UIKit.h>   
  8. #endif   


   还有个main.m文件,它是应用程序的入口程序文件,另外还有一个称为"Delegate"的主程序:OpenGLExAppDelegate,main.m代码如下:

复制到剪贴板  C/C++代码
  1. #import <UIKit/UIKit.h>   
  2. int main(int argc, char *argv[]) {    
  3. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];   
  4. int retVal = UIApplicationMain(argc, argv, nil, nil);   
  5. [pool release];   
  6. return retVal;   
  7. }  


   如果在Info.plist里面Main nib file base name没有写将MainWindow,也就是没将MainWindow.xib做为程序主框架的话,那"int retVal = UIApplicationMain(argc, argv, nil, nil);"需要修改为下面将要讲的文件的名称:OpenGLExAppDelegate,即修改为:"int retVal = UIApplicationMain(argc, argv, nil, @"OpenGLExAppDelegate");",也就是程序将调用OpenGLExAppDelegate文件继续执行.
   4.重要的来看Classes,它其实有两个类,一个OpenGLExAppDelegate和EAGLView,他们的作用分别是:前一个是iPhone第3方本地程序控制文件,另一个是我们建立的EAGL视图,即OpenGL ES的3D界面类.下面分别介绍:
   对于OpenGLExAppDelegate类它由OpenGLExAppDelegate.h头文件和OpenGLExAppDelegate.m执行文件组成,源文件如下: 

复制到剪贴板  C/C++代码
  1.   
  2. //  OpenGLExAppDelegate.h   
  3. #import <UIKit/UIKit.h>   
  4. @class EAGLView;   
  5. @interface OpenGLExAppDelegate : NSObject <UIApplicationDelegate> {   
  6. IBOutlet UIWindow *window;   
  7. IBOutlet EAGLView *glView;   
  8. }   
  9. @property (nonatomic, retain) UIWindowhttp://msnpiki.msnfanatic.com/index.php/Main_Page-->   
  10. @property (nonatomic, retain) EAGLView *glView;   
  11. @end   
  12.   
  13.   
  14. //  OpenGLExAppDelegate.m   
  15.   
  16. #import "OpenGLExAppDelegate.h"   
  17.   
  18. #import "EAGLView.h"   
  19.   
  20. @implementation OpenGLExAppDelegate   
  21.   
  22. @synthesize window;   
  23.   
  24. @synthesize glView;   
  25.   
  26. - (void)applicationDidFinishLaunching:(UIApplication *)application {   
  27.   
  28. glView.animationInterval = 1.0 / 60.0;   
  29.   
  30. [glView startAnimation];   
  31.   
  32. }   
  33.   
  34. - (void)applicationWillResignActive:(UIApplication *)application {   
  35.   
  36. glView.animationInterval = 1.0 / 5.0;   
  37.   
  38. }   
  39.   
  40. - (void)applicationDidBecomeActive:(UIApplication *)application {   
  41.   
  42. glView.animationInterval = 1.0 / 60.0;   
  43.   
  44. }   
  45.   
  46. - (void)dealloc {   
  47.   
  48. [window release];   
  49.   
  50. [glView<   
  51.   
  52. span style="color: rgb(0, 0, 0);"> release];   
  53.   
  54. [super dealloc];   
  55.   
  56. }   
  57.   
  58. @end   
  59.   


   上面在.m文件里面并没有使用window和glView类对象,其实它是是通过使用Xib文件初始化窗口window和将glView添加到了 windwo上面,建立了基本的界面层次结构,省去了我们用代码来初始化的编程工作,当然也可以自己来编写代码来初始化建立窗口系统,这样更容易理解,以后的例子可能都是用代码来初始化.
   另外1个,EAGLView类,暂时不介绍,留到下节.
   5.最后看Products,iPhoneSDK允许我们设置打包生成多个不同类型的产品,iPhoneOS系统中可执行文件是一个带有后缀为app的文件夹,例如:OpenGLEx.app,我们可以打开文件查看里面的程序和资源文件等.设置的方法是通过菜单Project/set Active Target,Project/set Active SDK,Project/set Active Build Configure等来设置打包的产品的属性.常见的属性例如:开发环境(真机/模拟器),编译(调试/发布)等.
   上半部分就介绍到这,这部分主要介绍了iPhoneSDK的相关编写流程和构建,下面部分将主要讲EAGLView类(它是OpenGLES的界面),怎样建立高效的OpenGLES界面.有什么错误,望看到文章的同行们海涵~*_*~

你可能感兴趣的:(iPhone开发:建立3D界面)