Managed DirectX 教程:第八部分 - 通过基本输入探索地形






4.63/5 (4投票s)
2006年5月26日
2分钟阅读

37965

1
很好,我们有了地形,但现在,我们要像利文斯顿博士一样,探索这片广阔的地形
使用基本矩阵输入旋转地形
现在,我们将学习如何在我们的示例中执行基本的输入命令,以便我们可以从“上帝”视角穿越岛屿。
这只是基本的矩阵输入。 随着我个人对这方面的了解不断加深,我将添加更多内容/更新本教程。
简短精悍
正如我们在之前的教程中学到了很多关于矩阵的知识一样,我们现在可以相对轻松地添加输入。
将以下变量添加到您的窗体类中
public const float rotateSpeed = 2;
public float Zoom = 0.0f;
public float Alpha = 0;
public float Beta = 0;
public float Charlie = 10;
第一个变量是一个修饰符,它将定义我们旋转/缩放地形的速度。 由于这是一个示例而不是游戏,因此我们不需要计时,因为没有任何需要平衡的东西。 但是,最好有一个简单的成员来更改以修改速度。
下一个变量用于(正如名称所暗示的那样)在景观周围缩放。
其他三个用于沿其 X、Y 和 Z 轴旋转世界。
现在,在 Paint 事件处理程序的顶部,添加以下行
device.Transform.View = Matrix.LookAtLH ( new Vector3 ( 0, Zoom, 150 ), new Vector3 ( 0, -5, 0 ), new Vector3 ( 0, 1, 0 ) ); device.Transform.World = Matrix.Translation ( -256 / 2, -256/ 2, 0 )* Matrix.RotationX ( Alpha ) * Matrix.RotationY ( Beta ) * Matrix.RotationZ ( Charlie );
正如您所看到的,我们更改了视图(相机位置)的 Y 轴(为了获得不同的结果,请尝试移动 Zoom 成员以影响不同的轴)。
然后我们将世界变换乘以旋转值。
尝试摆弄这些,以了解更多关于矩阵的知识,并将我们在以前的教程中学到的知识付诸实践。
本简短教程的最后一部分是创建一个实际更改值的系统。 我们将连接 KeyDown 事件,原因在基本教程 (3) 中已解释。
该事件只是检查我们想要的键,并执行所需的事件
private void Form1_KeyDown ( object sender, KeyEventArgs e )
{
switch (e.KeyData)
{
case Keys.A:
{
Charlie += 0.01f * rotateSpeed;
} break;
case Keys.D:
{
Charlie -= 0.01f * rotateSpeed;
} break;
case Keys.W:
{
Alpha += 0.01f * rotateSpeed;
} break;
case Keys.S:
{
Alpha -= 0.01f * rotateSpeed;
} break;
case Keys.Left:
{
Beta += 0.01f * rotateSpeed;
} break;
case Keys.Right:
{
Beta -= 0.01f * rotateSpeed;
} break;
case Keys.Up:
{
Zoom += 1f * rotateSpeed;
} break;
case Keys.Down:
{
Zoom -= 1f * rotateSpeed;
} break;
}
}
不要忘记在窗体构造函数中连接事件处理程序
this.KeyDown += new KeyEventHandler(Form1_KeyDown);
正如您所看到的,我们可以简单地通过更改分配给常量成员 rotateSpeed 的值来轻松更改速度,从而使我们的示例易于调整。
就这样 :) 您现在拥有一个可旋转、可缩放的景观。 本教程只是为了给你一个关于矩阵操作的小小的“推动”。 我建议您自己玩玩这些变量。
在未来的教程中,我们可能会研究更强大的输入系统。
反馈
我总是乐于回答问题,无论是通过 MSN (jamespraveen@aol.com)、电子邮件 (james@magclan.cwhnetworks.com) 还是通过附加到本文的留言板。
如果您对我的任何示例/我的主题有任何疑问,请随时问我。
或者您可以在我的论坛上发帖,网址为 http//www.just-code-it.net
历史
26/05/06: 发布在 CodeProject 上
之前的文章
第一部分:设置 DirectX
第二部分:初始化 Direct3D
第三部分:渲染图元
第四部分:变换管道
第五部分:基本纹理
第六部分:批量处理图元
第七部分:使用高度图
第八部分:使用输入探索地形