Windows Phone 7 XNA 架构调用流程及第一视角实现介绍
2010-10-03 22:03
267 查看
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进行渲梁,就可以了。
接下来我们需要把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进行渲梁,就可以了。
相关文章推荐
- Windows Phone 7 XNA 架构调用流程及第一视角实现介绍
- 【OpenHW12参赛手记】ZedBoard-自定义IP核实现+PS成功调用【详细步骤+流程介绍+源码】 转载
- ZedBoard-自定义IP核实现+PS成功调用【详细步骤+流程介绍+源码】
- 利用Anthem.net 实现前台javascript调用服务器端c#函数 及流程分析
- 架构语言ArchiMate - ArchiMate提供的基本视角(Viewpoints)介绍二
- 浅析busybox查找命令和调用相应命令函数的实现流程框架
- Trove系列(二)—Trove 的架构和流程介绍
- Android bluetooth介绍(二): android 蓝牙代码架构及其uart 到rfcomm流程
- MySQL实现递归调用,查询组织架构树
- 利用 XNA 实现 Windows Phone 7 上的电流效果
- 架构语言ArchiMate - ArchiMate提供的基本视角(Viewpoints)介绍二
- .net erp(办公oa)开发平台架构之流程服务概要介绍
- Okhttp的借口调用 和Banner实现学习下okhttp还是蛮必要的,本篇博客首先介绍okhttp的简单使用
- Linux C实现webservice调用 安装gsoap流程
- MySQL实现递归调用,查询组织架构树
- faster rcnn: 架构实现过程详细介绍
- 基于Spring Boot和Spring Cloud实现微服务架构学习(一)-Spring框架介绍
- IOS 程序框架原理介绍(iphone应用程序架构和程序组成、调用等)
- MySQL实现递归调用,查询组织架构树
- MySQL实现递归调用,查询组织架构树