我今天要讲的是Cocos2d-x中相机的使用,在Cocos2d-x 3.3版本中加入了相机这个类,这个类在3D游戏中是必不可少的,因为3D游戏是一个立体的世界,在3D游戏中的摄像机就相当于是我们的眼睛,通过它我们可以观察整个的游戏世界。
上图就是在3D游戏中使用相机的原理,当然这是一个透视投影的相机,我们在游戏中的相机就是根据图中的原理实现的。在游戏中一般有两种类型的相机:一种就是上图中介绍的透视相机,它在3D游戏中是很常见的。还有一种是正交投影相机,它没有像透视投影一样的近大远小的效果而是在相机内任何位置的物体的大小都是一样的,通常这种类型的相机都用在角色属性面板中显示的角色模型。说完了相机的两种类型,下面我们来看看在Cocos2d-x中我们是如何来创建相机的:
上面的代码就是创建了一个透视投影的相机,下面我来说明下参数的意义:第一个参数是FOV,即视场角(field of view),它可以理解为你的视线左右能看多宽(以角度计)第二个就是上述所有的宽高比,最后两个是相机的近裁面和远裁面,这个也很好理解,距离相机比近裁面还要近的,比远裁面还要远的,都不会被渲染到。
上图是正交相机的原理。
上面的代码就是创建了一个正交投影的相机,下面我来说明下参数的意义:第一个参数是相机的宽度,第二个就是相机的高度,最后两个是相机的近裁面和远裁面,这个也很好理解,距离相机比近裁面还要近的,比远裁面还要远的,都不会被渲染到。这个和透视相机是一样的。接下来,我们需要对相机设置一个标记位(FLAG),这样可以让相机与其他的相机区分开来--在一些游戏的应用中,通常不仅仅只有一个相机,如果有多个相机的话,那么我们要标记一个物体,到底是要被哪一个相机所"看到",这时候,我们就需要设置它的CameraMask来与相机的Flag对应:
如果同时存在多个相机,怎么标记某个物体被那些相机看到呢?
注意到Camera中有个_cameraFlag属性,为枚举类型,定义如下
1
2
3
4
5
6
7
8
9
10
11
12
enum class CameraFlag
{
DEFAULT = 1,
USER1 = 1
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?