例程详解XNA 3D开发(一)
来源:互联网 发布:淘宝导出csv 编辑:程序博客网 时间:2024/06/06 02:49
通过前几天的讲解我觉得有好多程序员还是没脱开2D的思考方式,其实3D多一个轴真的是很不一样.在平面系统中画一幅图的确只需要一个横纵坐标就够了.但是3D世界当中不一样了.我们身处的世界每个物体都有三维的坐标来进行定位,这就是世界系,而我们观察世界需要我们的眼睛就是VIEW也就是一般来说所说的CAMERA.而有的朋友问了有这两个不就够了吗.不对还真不够还差一个投影系,可能有的朋友理解不了投影系就是觉得我们有一点观察世界那么画面不就在我们眼前了吗?
虽然我几何光学学的不好但是我们的眼睛肯定是把像呈现在一个像平面上的,这就像平面其实就是投影系的概念,他的位置并不是眼睛所在的位置所决定的.也就是世界系(我们要观察的对象),视觉系(我们观察的位置),和投影系(在投影的2D平面).
不知道我上面的讲解是不是清楚了.不过我感觉XNA 4.0 FOR WP7的教程,尤其是中文教太少了,而且微软很多例子还是停留在XNA3.0的层面上,所以造成了学习XNA的难上加上,那么我就想在后面用一段时间以一个XNA4.0的例子来做教材和大家一起来聊一下XNA4.0的开发.
话不多说了首先要声明这个例子是来自于微软XNA3.0的一个例子,我把它改编到XNA4.0的平台上可以编译.大家可以通过本篇博客下载,之所以选这个例子是因为他是一个比较典型也比较好入门的XNA 3D的例子,大家看好啊是3D的例子,所以还是要比那个微软官方的XNA例程HELLOXNAFRAMEWORK要难.但是想了解3D游戏开发也必须有这个过程.
好了咱们一点一点来看吧.打开这个文件
GameObject.cs
首先看这个类class GameObject{ public Model Model { get; set; } public Vector3 Position { get; set; } public bool IsActive { get; set; } public BoundingSphere BoundingSphere { get; set; } public GameObject() { Model = null; Position = Vector3.Zero; IsActive = false; BoundingSphere = new BoundingSphere(); }}
这个类表示在这个游戏当中出现的游戏物体.
Model 比较好说,就是模型吗,如果没有模型那也就不会在一个游戏的画面当中做渲染了.Position 位置比较好理解也就是这个物体所在的位置,IsActive 代表这个物体会不会被渲染.BoundingSphere 这个代表这个物体的边缘.
再来说说这个类
class Camera{ public Vector3 AvatarHeadOffset { get; set; } public Vector3 TargetOffset { get; set; } public Matrix ViewMatrix { get; set; } public Matrix ProjectionMatrix { get; set; } public Camera() { AvatarHeadOffset = new Vector3(0, 7, -15); TargetOffset = new Vector3(0, 5, 0); ViewMatrix = Matrix.Identity; ProjectionMatrix = Matrix.Identity; } public void Update(float avatarYaw, Vector3 position, float aspectRatio) { Matrix rotationMatrix = Matrix.CreateRotationY(avatarYaw); Vector3 transformedheadOffset = Vector3.Transform(AvatarHeadOffset, rotationMatrix); Vector3 transformedReference = Vector3.Transform(TargetOffset, rotationMatrix); Vector3 cameraPosition = position + transformedheadOffset; Vector3 cameraTarget = position + transformedReference; //Calculate the camera's view and projection //matrices based on current values. ViewMatrix = Matrix.CreateLookAt(cameraPosition, cameraTarget, Vector3.Up); ProjectionMatrix = Matrix.CreatePerspectiveFieldOfView( MathHelper.ToRadians(GameConstants.ViewAngle), aspectRatio, GameConstants.NearClip, GameConstants.FarClip); }}那么咱们来看一下这个类的对象, AvatarHeadOffset这个的概念其实就是你头部的偏移量,比如你在观察世界的时候头相对你的身体是有一个偏上的偏移量. TargetOffset 是你的CAMERA相对于身体偏后的偏移量.ViewMatrix就是视野系了. ProjectionMatrix就是投影系.这个UPDATE方法就是用旋转的角度和所处的位置以及缩放的比例来更新视野系以及投影系的值.
- 例程详解XNA 3D开发(一)
- xna 3D游戏开发(1)
- WP7-XNA 3D开发 显示3D模型(BasicEffect、DualTexturesEffect)
- XNA 3D文字
- XNA 3D游戏开发入门基本——鼠标选择3D模型(3D物体的拾取)
- XNA那些事(六)--WINDOWS PHONE 游戏开发中的3D摄像机
- Windows Phone XNA 4.0 3D游戏开发
- XNA-顯示3D模型
- XNA-3D-绘制立方体
- XNA学习(一) 初识XNA
- XNA教程(一)
- XNA入门(一)
- XNA游戏开发之2D游戏
- XNA开发一个2D的小游戏
- XNA那些事(七)-详解WINDOWS PHONE 3D游戏中运动的摄像机与精灵(上)
- XNA那些事(四) 3D知识初步
- Direct 3D和XNA游戏开发基础(C#语言版)(奋斗的小鸟)_PDF 电子书
- xna 2D游戏开发视频网址推荐(可以下载)
- ppp拨号上网(1)
- automake/autoconf工程管理
- 拷贝构造与赋值操作(string实例)
- 四步完成Linux ppp拨号
- 孩子昨天在学校表现的还行
- 例程详解XNA 3D开发(一)
- 设计解释器来使用事件报告GPS位置信息
- 引入 ATL 头文件时是有先后顺序的
- 0高手就是高手 ------读《编程高手箴言》前言
- PPP协议详解
- C2143
- 工程师不能靠技术生存
- 两个地址相减的结果
- Ruby on Rails 体验之旅(一)--安装