- 爱易网页
-
ASP.NET教程
- DirectX9 3D 快速上手 5
日期:2011-12-24 浏览次数:20501 次
DirectX9 3D 快速上手 5
By sssa2000
这一章的内容相对很简单,控制Mesh的移动,旋转等等,其实这一切都是在对矩阵进行操作。在 DX中,用到的变换有3种,一种是基于Word坐标系的,一种是基于View坐标系的,还有一种是基于投影的变换。而这些变换都是通过矩阵的运算来实现的,在.Net的托管环境下,实现这些操作相对于非托管来说简单一写,不用对矩阵的每个值运算。
关于矩阵的运算和变换的关系,很多文章都有分析,GameRes也有很多这样的好文章,例如:http://dev.gameres.com/Program/Visual/3D/3DGame.mht 这里就有很详细的介绍。
我们这篇文章不研究细节,因为毕竟是快速开发,我们的目标就是用键盘控制读入的Mesh的运动。
其实在前面一篇文章中我们就有提到几个函数,只是没有介绍。我们来看看我们这一篇中要用到的几个简单的函数,从字面我们就可以判断出这些函数有什么用:
Matrix.RotateX方法:public void RotateX( float angle);
Matrix. RotateY方法:public void RotateY( float angle);
Matrix.RotateX方法:public void RotateZ( float angle);
Matrix.Translation方法:public static Matrix Translation(float offsetx, float offsety, float offsetz);
好,我们现在重新打开上一次的读入Mesh的那个工程,我们现在要加入新的部分,既然是用键盘控制那么就要首先对键盘的状态进行分析:
String status=null;//用于保存状态
protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
{
// Handle the escape key for quiting
if (e.KeyCode == Keys.Escape)
{
// Close the form and return
this.Close();
return;
}
// Handle left and right keys
else if ((e.KeyCode == Keys.Left) || (e.KeyCode == Keys.NumPad4))
{
status="left"; //向左旋转
}
else if ((e.KeyCode == Keys.Right) || (e.KeyCode == Keys.NumPad6))
{
status="right";//向右旋转
}
else if((e.KeyCode ==Keys.Up )||(e.KeyCode ==Keys.NumPad8 ))
{
status="up";//向上旋转
}
else if((e.KeyCode ==Keys.Down )||(e.KeyCode ==Keys.NumPad2 ))