- 爱易网页
 
                        - 
                            ASP.NET教程
 
                        - DirectX9 3D 快速上手  5 
 
                         
                    
                    
                    日期:2011-12-24  浏览次数:20603 次 
                    
                        
                        
            
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 ))