DirectX&Direct 3D 游戏开发之3D图形的数学基础

3D坐标系统和坐标

3D笛卡尔坐标系统分为左手和右手笛卡尔坐标系统

DirectX使用左手系统,XNA使用右手系统

Public Vector3();

Public Vector3(float x, float y, float z);

当使用仿射矩阵对3D坐标点进行移位、旋转等复合变换时,点的3D坐标必须使用Vector4结构表示。

 

 

向量(scalar)

Dirrect 3D和XNA用vector3结构表示向量,其提供的求向量长度的方法:

Public float Length();

Public static float Length(Vector source);

Vector3结构提供求单位向量的方法:

Public void Normalize();

Public static Vector3 Normalize(Vector3 source);

向量和:

Public static Vector3 Add(Vector3 left,Vector right);

Public void Add(p1,p2);

 

            Vector3 p1 = new Vector3(4, 5, 6);

            Vector3 p2 = new Vector3(1, 2, 3);

            Vector3 p3 = Vector3.Add(p1, p2);//向量和

 

 

表量乘向量:

Public void Mutiply(float s);

Public static Vector3 Mutiply(Vector3 source,float f);

Vector3 p4 = Vector3.Multiply(p3, 2.0f);//标量乘向量

 

标量积(点积)

标量积主要用来计算光照。

Public static float Dot(Vector3 left,Vector rigght);

float m = Vector3.Dot(p1, p2);//标量积

 

矢量积:

主要用来计算平面的法线向量。

Public static Vector3 Cross(Vector3 left,Vector right);

Vector3 p5 = Vector3.Cross(p1, p2);//矢量积

 

矩阵和Matrix结构

单位矩阵

Matrix m1 = Matrix.Identity;//单位矩阵

 

矩阵相加

Public static Matrix Add(Matrix left,Matrix right);

 

矩阵相减

Public static Matrix Subtract(Matrix left,Matrix right);

 

矩阵相乘

Public void Mutiply(Matrix source);

Public static Matrix Mutiply(Matrix left,Matrix right);

 

求逆矩阵

Public void Invert();

Public static Matrix Invert(Matrix source);

 

求转置矩阵

Public void Transpose(Matrix source);

Public static Matrix TransposeMatrix(Matrix source);

 

仿射矩阵

2D仿射矩阵 第3列固定为0 0 1

3D 仿射矩阵(3D变换矩阵) 任何一个3D坐标系统中的点用(x,y,z,1)表示,用一个4*4的3D仿射矩阵来记录各种3D复合变换的操作,包括平移、旋转、缩放等操作。在Direct 3D和XNA中,点的坐标(x,y,z,1)用Vector4结构表示,而4*4仿射矩阵用Matrix结构表示。

 

 

Matrix结构表示3D变换矩阵

(注意:这里列出的是在Direct 3D中的函数名称,在XNA中函数名称前要加Create)

 

平移变换

返回的Matrix结构是一个4*4的3D反射矩阵

Pubic static Matrix Translation(float x,float y,floar z); //XNA为CreateTranslation

Pubic static Matrix Translation(Vector3 source);

 

旋转变换

Yaw、picch、roll分别表示绕Y轴、X轴、Z轴旋转弧度。

Public static Matrix RotationYawPitchRoll(float yaw,float pitch,float roll);

 

围绕中心轴旋转

Public static Matrix RotationX(float yaw);//围绕X旋转矩阵

Public static Matrix RotationY(float pitch); //围绕Y旋转矩阵

Public static Matrix RotationZ(float roll); //围绕Z旋转矩阵

 

比例变换

Public static Matrix Scaling(Single x,Single y,Single z);

或Public static Matrix Scaling(Vector3 source);

 

复杂的变换可采用矩阵乘法,矩阵乘法不满足乘法交换律。

posted @ 2012-07-16 21:35  Ghost Soar  阅读(409)  评论(0编辑  收藏  举报