XNA那些事(六)--WINDOWS PHONE 游戏开发中的3D摄像机
马上国庆了,在这里祝各位同仁,国庆快乐,合家团圆!
前一段把3D建模当中一些基础性的工作开了个头,那么切入正题,接下来就必须要讨论一个3D游戏建模当中的一个重要概念--摄像机。
如果大家之前了解过相关的建模知识不管是D3D还是OPENGL甚至是3DMAX都应该听到过摄像机这个概念,其实这个概念非常的形象,它描述就是3D游戏中观察者的位置及观看方向的概念,但是要说清楚这个概念并不容易。
首先我们还是来建立一下对于摄像机的感性认识,比如在一款像CS一样的射击游戏中,摄像机就位于玩家所控制对象的眼部,这也就是第一视角。而在一款即时战略游戏中例如像WAR3,视角一般是在半空中某一位置。那么如果摄像机仅仅是一个位置的概念那么不值得单独讨论,更不需要给他两篇的章节说明。
我们说在几何角度上说摄像机有位置向量,方向向量和向上向量去组成。这些概念之前说过,这里再简单的说明一下,可以想象一下眼睛,位置向量就是描述眼睛的位置,那么方向向量呢就是眼睛往哪看,当然了如果把位置向量加上方向向量就是目标向量了,说通俗点也就是眼睛在哪加上眼看的方向就是看到的目标了。见下图。
还有一个概念是什么可能会令初学的朋友困扰就是向上向量,什么是向上向量,如果还是以眼睛为例说明的话其实就是指头顶的方向,其实如果大家仔细想想,假设在眼睛位置一定,眼睛看的方向一定的情况,一个人歪着头(注意不是侧着脸)看到的图像与正着头看到的图像是不一样的。
那么一个3D摄像机要能够完成什么样的基础任务呢(在这里建议微软在一下个XNA的版本里最好将摄像机类尤其是第一视角的摄像机直接加入到标准框架当中去)。
1、平移,什么是平移,当我们玩CS的时候用方向键控制人物或者使人物蹲下的时候其实这个摄像机就是在做平移的。
几何概念:平移从几何角度上来说就是向上向量与方向向量不变,但是位置向量改变的概念。
2、旋转,旋转就是摄像机绕着某个轴转。发我们玩CS的时候左右移动鼠标做转身或者回头的动作的时候其实就是在做旋转。
几何概念:旋转其实就是位置向量与向上向量不动,但是方向向量绕某一轴转动的概念。其中对于第一视角来说,旋转就是方向向量绕着向上向量转动的结果,对于第三视角旋转就是方向向量绕某固定轴(大部情况下是与向上向量平等的轴)转的概念。
3、仰俯:这又是个难解释的概念,不过用CS来说,就是你通过上下移动鼠标来达到向枪口朝上或者朝下的动作,再直白一些其实就是上下点头的动作。
几何概念:说到俯不得不说到一个立体几何中的概念即线面垂直,我们说向上向量与方向向量组成了一个平面,因为他们有交点,其交点就在眼睛的那个点上,你可以想象一下头的法线与眼看方向组成了一个平面,其实这个平面不重要,而与这个平面垂直的线很重要,我们想象一个,当咱们点头的时候,头会绕着一个轴转,这个轴就是这个平面的垂线。
根据立体几何的原理,这个轴线会与方向向量和向上向量都垂直(这也是我们后面求出这条旋转轴的要领),而方向向量与向上向量在仰俯时都会同时绕这个轴相同的方向转相同的角度。
说到底只要了解了3D摄像机的基础动作,那么很多华丽的转身其实就是这个基础动作的叠加。
下节将通过代码解释这个基础动作如何在XNA当中完成。