iPhone开发 - 3D - 建立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 OS面板的"Application"下选择"OpenGL ES Application",然后点击"Choose",它提示工程名称和工程保存的路径,我们这里的工程名字取为:"OpenGLEx",最后点击"OK",就可以看到iPhoneSDK,自动为我们生成的工程模板文件了,截图如下:

二话不说,我们先不管里面的文件,立马点击"Build and Go"图标,看看在iPhone模拟器里面运行的效果,看下面截图:

呵呵,好看不,模拟器的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,它标记了工程的所以信息,例如软件版本,公司名称,图标,国际化,和模拟器设置等.如截图所示:

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

//
// Prefix header for all source files of the 'OpenGLEx' target in the 'OpenGLEx' project
//

#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#endif

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

#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}

如果在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执行文件组成,源文件如下:

//  OpenGLExAppDelegate.h
#import <UIKit/UIKit.h>
@class EAGLView;
@interface OpenGLExAppDelegate : NSObject <UIApplicationDelegate> {
IBOutlet UIWindow *window;
IBOutlet EAGLView *glView;
}
@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) EAGLView *glView;
@end

//  OpenGLExAppDelegate.m

#import "OpenGLExAppDelegate.h"

#import "EAGLView.h"

@implementation OpenGLExAppDelegate

@synthesize window;

@synthesize glView;

- (void)applicationDidFinishLaunching:(UIApplication *)application {

glView.animationInterval = 1.0 / 60.0;

[glView startAnimation];

}

- (void)applicationWillResignActive:(UIApplication *)application {

glView.animationInterval = 1.0 / 5.0;

}

- (void)applicationDidBecomeActive:(UIApplication *)application {

glView.animationInterval = 1.0 / 60.0;

}

- (void)dealloc {

[window release];

[glView release];

[super dealloc];

}

@end

   上面在.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 - 建立3D界面(上)相关推荐

  1. iPhone开发 - 3D - 建立3D界面(下)

    iPhone开发 - 3D - 建立3D界面(下)      前面主要写了iPhone开发的一些基本知识,有iPhone设备的介绍,iPhoneSDK开发的流程和文件的组成等,下面就据上部分介绍EAG ...

  2. Win10系统下安装CAA二次开发程序,VS界面上不出现CAA菜单栏或菜单栏为灰色的

    问题描述:Win10系统下安装了CATIA_CAA V5R19和V4R24两个版本,其中V5R19版本安装完成后VS2005中没有出现CAA菜单栏,V5R24安装完成后VS2008中出现部分集成菜单且 ...

  3. IPhone开发三天上手纪实(ZT)

    http://www.unfish.net/archives/471-20090601.html 1.如果你有自己的Mac电脑,跳过这一步.如果没有,可以去下载这个:http://www.verycd ...

  4. 三维虚拟电子沙盘开发教程第一课 利用WPF建立3d gis数字地球(非axhost方式)

    三维虚拟电子沙盘开发教程第一课 利用WPF建立3d gis数字地球(非axhost方式) 下一步新建一个wpf工程.然后引用SDK中的gislib.dll,NewGisBiao.dll如下图: 下面上 ...

  5. Unity之在UI界面上显示3D模型

    1.创建一个3D摄像机,渲染3D模型.(我为了方便就把模型放到了Camera的下面,你可以不这样) 2.在2D里面指定一个TopLeft和BottomRight,用来表示模型渲染到UI上面的区域. 3 ...

  6. unity 全息交互ui_UI向3D投影全息界面的连续发展

    unity 全息交互ui The user interface has been natural in its evolution and strategically heading towards ...

  7. iPhone 或将告别 3D Touch ?

    作者 | 屠敏 出品 | CSDN(ID:CSDNnews) 生于创新,死于无用. 或许这句话说的太过绝对,但是用在 3D Touch 这项技术身上似乎又毫不为过,当然其中的"无用" ...

  8. XNA开发思考之3D开发中的小常识

    PS:个人学习总结,转载请著明出处 在XNA的3D开发中,时常要涉及到坐标系统和摄象机的一些参数.同时还有矩阵的变化来在3维世界里的移动. 在二维世界里的坐标系统里,使用x,y坐标来表示一个点在坐标系 ...

  9. Silverlight C# 游戏开发:L5 3D基本的灯光

    Silverlight C# 游戏开发:L5 3D基本的灯光 我们在设计和开发3D的时候最常用的就是灯光,它有的时候比摄像机还要重要,一些花哨漂亮的表现主要通过灯光实现,相比场景中只有一个的主要摄像机 ...

最新文章

  1. 避免神经网络过拟合的5种技术(附链接) | CSDN博文精选
  2. ocx js php,JS实现OCX控件的事件响应示例_javascript技巧
  3. android 隐藏闹钟通知,redis环境搭建
  4. cmake / CMAKE _ * _ OUTPUT_DIRECTORY 说明
  5. 目标检测 /yolo算法原理的详解
  6. 浏览器卡怎么办_【十全十美】宽带断线、wifi连不上怎么办?自助排障帮到你!...
  7. *【HDU - 1506】【POJ - 2559】Largest Rectangle in a Histogram(单调栈或动态规划)
  8. 语句拼接_Linux 进阶语句
  9. java编程线程怎么处理_java编程多线程并发处理的教程
  10. python中sorted函数的作用_Python中排序方法sort、函数sorted的key参数的作用分析
  11. maven打包可执行jar
  12. LAMP、LNMP实战之九搭建cms、blog、bbs(持续更新)
  13. c语言中文网_在C语言中使用中文字符
  14. 假如 C++ 是一只箭,你会用它来射哪只雕?
  15. 14.jQuery常用方法
  16. 3.SpringBoot 常用配置
  17. UVA10943 How do you add【递推打表】
  18. 初测ONES项目管理工具,寻求与众不同
  19. 误差平方和用python,残差平方和sklearn.linear_模型线性回归
  20. win10pe命令打开计算机,hp电脑win10如何进pe_惠普电脑怎么进去u盘pe系统

热门文章

  1. seo具体是怎么操作的(seo网站优化如何做)
  2. 将矩阵的行列互换得到的新矩阵称为转置矩阵
  3. php实现店铺装修,php 实现店铺装修2
  4. 苹果手表支持心电图功能,可能还是逃不过噱头的命运
  5. [200127] Java类初始化与实例初始化 - Thinking in Java学习日志
  6. crontab fastadmin thinkphp 定时任务权限不足
  7. luckysheet 国产超强纯前端在线excel表格功能强大 简单使用记录 异常报错记录及处理
  8. 扒一扒随机数(Random Number)的诞生历史
  9. 王牌竞速安装后显示服务器维护,王牌竞速怎么修车 王牌竞速怎么维修车 王牌竞速的车怎么维护...
  10. Java学习——类和对象(上)