Matrix4x4类
脚本中通常用Vector3、Quaternion、Transform等类地属性和方法来对物体进行变换
Matrix4x4类则通常用于 摄像机的非标准投影变换 等特殊地方
A、Matrix4x4类实例方法
1、MultiplyPoint
public Vector3 MultiplyPoint(Vector3 v);
用来对点v进行投影矩阵变换
m1为Matrix4x4实例
v1为Vector3实例
Vector3 v2=m1.MultiplyPoint(v1)
MultiplyPoint主要用于Camera的投影变换,对于一般物体的矩阵变化用MultiplyPoint3x4方法
不涉及投影变换,计算速度也快
2、MultiplyPoint3x4
public Vector3 MultiplyPoint3x4(Vector3 v);
对参数点进行矩阵变换,不涉及投影变换
3、MultiplyVector
public Vector3 MultiplyVector(Vector3 v);
对方向向量v进行矩阵变换,而非点坐标进行变换
4、SetTRS
public void SetTRS(Vector3 pos, Quaternion q, Vector3 s);
pos为位置向量,参数q为旋转角,参数s为放缩向量
重设Matrix4x4变换矩阵
Matrix4x4 m1=Matrix4x4.identity; //Matrix4x4实例m1
m1.SetTRS(pos, q, s); //m1position增加pos,rotation旋转q,scale放缩s
Vector3 v2=m1.MultiplyPoint3x4(v1); //m1矩阵变换赋值给v2
矩阵变换的用途?//
B、Matrix4x4类静态方法
1、Ortho
public static Matrix4x4 Ortho(float left,float right,float bottom,float top,float zNear,float zFar);
前四个参数是正交视口的左右下上边的边长,zNear为近视口距离,zFar为远视口距离
创建一个正交投影矩阵
//一般以参数right、top为正数,left和bottom为负数
//left和right的值不能相等,bottom和top的值也不能相等
//为防止视图变形,参数的设定通常需要和Camera的aspect结合使用
2、Perspective
public static Matrix4x4 Perspective(float fov, float aspect, float zNear, float zFar);
fov为视口夹角,aspect为视口纵横比例,参数zNear为近视口距离,zFar为远视口距离
创建一个透视投影矩阵
若要更待摄像机的透视投影矩阵,可用:
Camera.main.projectionMatrix=Matirx4x4.Perspective(fov, aspect,zNear,zFar);
若要重置其投影矩阵,可用:
Camera.main.ResetProjectionMatrix();
3、TRS
public static Matrix4x4 TRS(Vector3 pos, Quaternion q, Vector3 s);
pos为位置向量,q为旋转角,s为放缩向量
使用变换参数返回一个Matrix4x4实例