惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
MyScale Blog
MyScale Blog
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Blog of Author Tim Ferriss
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
C
Check Point Blog
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
博客园 - 聂微东
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG

博客园 - AppleSeeker(冯峰)

XNA游戏开发——播放音效(2) XNA游戏开发——播放音效(1) 公告板 粒子系统介绍 在游戏框架中实现天空体 创建天空体 天空体介绍 添加雾化效果 使用追踪相机 实现追踪摄像机 创建一个追踪摄像机(2) 创建一个追踪摄像机(1) XNA——相机类 XNA——使用摄像机 在游戏框架中添加支持 渲染已保存的几何图形 将已保存的几何图形导入到XNA项目中 导出3D几何体 导入几何图形——SketchUp介绍
相机定位
AppleSeeker(冯峰) · 2012-05-08 · via 博客园 - AppleSeeker(冯峰)

虽然我们有一个清晰地良好的控制相机,简单的通过设置它的位置和LookAtTarget,这里有另一个相机定位机制,我们可以利用它将在一些状况中提供一个更简单的方法来将相机放到我们想它放置的地点。这个机制就是使用我们已经为我们的游戏对象所使用的矩阵转换方法。

如果我们使用矩阵转换,我们可以再一次提供一系列操作,相机将坚持决定它的最终位置。举例,我们可以在场景中决定去转换相机到一个不同的位置,围绕y轴预先的角度,旋转相机的矩阵,随着旋转角度的改变,相机将围绕着在首先转换的定义的坐标旋转。在相机的循环路径上,这是计算方法要比使用三角法去计算更简单, 如果我们简单的设置它坐标矢量。

下面代码显示了一个使用技巧降低派生相机类的Update方法来定位相机的示例。它首先旋转相机;然后沿它的新的z坐标轴和y坐标轴转换。最终结果是相机逐步围绕这个场景。

// Reset the  position using  the  identity  matrix
SetIdentity();
// Rotate the  camera
ApplyTransformation(Matrix.CreateRotationY(AngleY));
// Translate  the  camera  away from the  origin
ApplyTransformation(Matrix.CreateTranslation(0, 5,  -14));

这种比较方法,在下面代码,它产生完全正确的相同相机移动,但使用三角法来代替矩阵转换。

// Reset the  position using  the  identity  matrix
SetIdentity();
// Calculate  the  camera  position
Position = new Vector3((float)Math.Sin(AngleY) * 14,5, (float)Math.Cos(AngleY) * 14);
// Apply the  standard  transformations to  the  object
ApplyStandardTransformations();

相机对象的作用

伴随着这个章节是一个名叫CameraMovement的示例工程,它提供一个简单的在游戏中使用相机的示例。

它创建了一个简单的场景,包含一个广场,在其上面放置了一些房屋。然后相机围绕着场景旋转,允许它从不同角度看。除了相机以外,在场景中的所有对象是完全固定的。为了让场景在显示上更适合点,这个工程已使用支持屏幕横向来实现,所以你将必须去旋转你的设备或者相应的模拟器。一个工程效果图片如图所示。

image

工程的ResetGame函数为地面和房屋添加对象到GameObjects集合中,然后创建相机对象,并设置到相机属性中。

使用一个自定义的命名为CameraObject的派生类来实现相机对象,为了围绕场景来移动相机。在它的Update函数中,你将看到2个不同的为了定位相机的代码块:1个使用矩阵转换,另一个直接设置坐标属性。这其中之一最初就被注释掉了,但尝试去掉注释,运行下2个方法来研究下,看下它们是如何工作的。

你可以同样尝试使用LookAtTarget属性来研究,以便随着它围绕场景移动时,相机在不同方向看起来不同。

posted on 2012-05-08 10:52  AppleSeeker(冯峰)  阅读(1991)  评论()    收藏  举报