本教程是讲Cocos2d-x中相机的使用,在Cocos2d-x 3.3版本中加入了相机这个类,这个类在3D游戏中是必不可少的,因为3D游戏是一个立体的世界,在3D游戏中的摄像机就相当于是我们的眼睛,通过它我们可以观察整个的游戏世界。相机相当于人的眼睛,人在用眼睛看物体的时候,可以从理论上的任意位置,以任意的角度观察物体,所以物体的形状会受到相机的位置、旋转角度的影响而影响。
上图就是在3D游戏中使用相机的原理,当然这是一个透视投影的相机,我们在游戏中的相机就是根据图中的原理实现的。在游戏中一般有两种类型的相机:一种就是上图中介绍的透视相机,它在3D游戏中是很常见的。还有一种是正交投影相机,它没有像透视投影一样的近大远小的效果而是在相机内任何位置的物体的大小都是一样的,通常这种类型的相机都用在角色属性面板中显示的角色模型。说完了相机的两种类型,下面我们来看看在Cocos2d-x中我们是如何来创建相机的:
上面的代码就是创建了一个透视投影的相机,下面我来说明下参数的意义:第一个参数是FOV,即视场角(field of view),它可以理解为你的视线左右能看多宽(以角度计)第二个就是上述所有的宽高比,最后两个是相机的近裁面和远裁面,这个也很好理解,距离相机比近裁面还要近的,比远裁面还要远的,都不会被渲染到。
上图是正交相机的原理。
上面的代码就是创建了一个正交投影的相机,下面我来说明下参数的意义:第一个参数是相机的宽度,第二个就是相机的高度,最后两个是相机的近裁面和远裁面,这个也很好理解,距离相机比近裁面还要近的,比远裁面还要远的,都不会被渲染到。这个和透视相机是一样的。接下来,我们需要对相机设置一个标记位(FLAG),这样可以让相机与其他的相机区分开来--在一些游戏的应用中,通常不仅仅只有一个相机,如果有多个相机的话,那么我们要标记一个物体,到底是要被哪一个相机所"看到",这时候,我们就需要设置它的CameraMask来与相机的Flag对应:
如果同时存在多个相机,怎么标记某个物体被那些相机看到呢?
注意到Camera中有个_cameraFlag属性,为枚举类型,定义如下