iPhone Cocos3D 教程
2013-02-22 11:58 三戒1993 阅读(126) 评论(0) 编辑 收藏 举报
Cocos3d框架是iOS平台高度提炼的3D应用开发框架。
Cocos3d是cocos2d的扩展集,cocos2d深入人心,广泛使用在iOS2d游戏开发中。
因此此文章适用于有一定cocos2d开发基础的开发者。
几个重要的概念介绍:
既然是3D游戏,必然存在X,Y,Z轴,Z代表视图中深浅,即与玩家眼前的距离远近。
重要类介绍:
CC3Layer
CC3Layer是两个最重要的类之一。它实现了CC3World与2D世界的巧妙联系。
CC3Layer属于cocos2d中的CCLayer的比较特殊的一个子类,也正是因此,CC3Layer与cocos2d中的CCLayer可以无缝切换,允许CCLayer(即一个2D平面的总管)的子部件,比如CCNode,controls,label与3D部件互相交互,允许2D部件在CC3Layer的上方,下方底部,旁边儿共同存在视图中。
CC3Layer可以随处放在cocos2d程序中。我说以上部分的目的,大部分是为了3D游戏的2D菜单,2D控制手柄,等部件可以与3D游戏界面共存。这些并不冲突。
使用过程中,当你使用CC3Layer的子类,请重载以下方法:
initializeControls– 这个方法就是你添加2D物体的入口。请在这里添加。CC3Layer开始初始化的时候,会自动触发这个函数,你甭担心代码不会执行到这里。
update: –如果你有标准CCNode在里面,并且通过scheduleUpdate方法来自动刷新物体,那么这个方法便会自动被执行到这里。如果想刷新2D物体,传值,请重载此方法实现。
CC3World
明眼人都看出来了,第二个最关键的类,便是它。
所有3D对象的渲染,创造,委托,位置等等都在这里处理。
同样CC3World也有这两个函数需要重载实现。
initializeWorld–这里3D模型开始初始化,植入的代码。可以直接用函数,类对象来生成,也可以直接导入POD文件。CC3World就像树一样,可以在上面放满child,即所有的CC3Node想添加进去,直接调用addChild:method。
update: –这个函数,也差不多啦。大致就是更新移动3D对象位置,处理物体更新。
以下非必须重载的方法,但是也非常常用:
addChild:–与cocos2d一样,添加child到3D世界。
addContentFromPODResourc
getNodeNamed:–返回child的标记的名字。
activeCamera–此方法用处不是特别多,大部分在有多个camera镜头的时候,开启。大多数是场景对话,切换两个不同的镜头。
ambientLight– 周围的灯源,这个有区别与当作childNode添加进去的灯。
CC3Node
3D世界里,所有的模型,摄像头,光线,甚至CC3World都是nodes。CC3Node显然是万物之源啦。什么移动,旋转,隐藏,等等操作,都是这里来的。具体的,慢慢参考API文档吧。
CC3Camera& CC3Light
这两个是比较特别的,是继承自CC3TargettingNode,顾名思义,用来跟踪node移动的。说白了,就是摄相机视角。所以这个也可以旋转,移动,切换视角。
CCActions
注意,这里基本跟cocos2d方法一致。可以实现控制着色,阴影,扭曲,旋转,绝大部分操作。
尽管如此,依然有CC3Transform来实现部分3D世界才有的效果。
Automatic Frustum Cullingand Bounding Volumes
3D世界里,你看到的,只是片面的摄像头一角。所以有大量的3D物件,你没必要去渲染,浪费资源。
所以FrustumCulling就是用来从渲染管道里,把不在视角之内的物体,去除掉。这是自动滴哦。
还有一个Ocllusionculling,就是这个物体的确在视角里,但是,它被其他物体挡住了。它也不会被批准通过进入渲染管道。
Blah…blah…blah….以上讲了省内存,渲染顺序,等等。
总之,他自动省事儿。你啥都不需要担心。
以上都是概念。
安装就自行看cocos3d的README吧,里面写好了,要先安装cocos2d模版,3D是覆盖到原目录的哦。
New一个新的cocos3d的project,自己慢慢摸索吧。