Windows Phone 7 XNA 架构调用流程及第一视角实现介绍
XNA程序从第一步来说肯定是要从GAME这个类来进行继承那么,程序是怎样进行工作的呢。首先是调用INITIALIZE这个函数来进行初始化,如果大家熟悉WINDOWS 编程这个函数的调用期有点像WMCREATE这个消息的感觉。接下来是LOADCONTENT也就是我们上次说的这时候需要把程序当中用的资源调入,然后XNA框架就会不会的调用UPDATE及DRAW方法,直接程序退出时停止调用并进行UNLOADCONTENT。
接下来我们需要把3D编程的基础知识再回顾一下,一般来说在3D游戏中咱们从屏幕所看到的画面实际是由一个三维的立体映射过来的。
而三维向二维的转化是由矩阵完成的。在这里我们一共有三个概念世界(world),视角(VIEW),投影(PROJECTION),WORLD利用PROJECTION提供的偏移,压缩,及旋转的概念来形象投影。而VIEW则是提供我们观察的角度和位置。
那么我们来看看视角,一般我们都听说过视角分为第一人称视角,和第三人称视角, 这个要看这个游戏的类型,如果玩家自己扮演主人公(比如射击游戏)那么一般采取这种视角,而如果是RPG游戏一般是第三人称视角。
那么怎么来建立一个第一人称的视角呢?
首先我们先给这个模型的头一个位置:(VECTOR3指的是三维的坐标VECTOR2指二维的坐标,在这里就不加赘述了)
Vector3 avatarHeadOffset = new Vector3(0, 10, 0);
然后在游戏中需要时刻捕捉这个模式的位置
二 需要给这个模型一个视角(观察角度)
Matrix rotationMatrix = Matrix.CreateRotationY(avatarYaw);
那么有了这个位置和角度那么headOffset就可以通过Vector3.Transform得到了.
Vector3 headOffset =
Vector3.Transform(avatarHeadOffset, rotationMatrix);
三那么我们知道以后在向量几何当中新位置=起始位置+位移;
所以就有了
Vector3 cameraPosition = avatarPosition + headOffset;
四 计算摄像机的角度
Vector3 transformedReference =
Vector3.Transform(cameraReference, rotationMatrix);
五 计算摄像机观察的位置
Vector3 cameraLookat = transformedReference + cameraPosition;
六 到这里摄像机也就是VIEW的角度和位置都有了,这时候VIEW就可以被创。
view = Matrix.CreateLookAt(cameraPosition, cameraLookat,
new Vector3(0.0f, 1.0f, 0.0f));
七 再进行创建PROJECTION。(aspectRatio 这个是长宽比)
Viewport viewport = graphics.GraphicsDevice.Viewport;
float aspectRatio = (float)viewport.Width / (float)viewport.Height;
proj = Matrix.CreatePerspectiveFieldOfView(viewAngle, aspectRatio,
nearClip, farClip);
八 把WORLD当中的OBJECT按照以上的VIEW与PROJECTION进行渲梁,就可以了。