?? matrix.h
字號:
//================================================
// 4*4矩陣,實現旋轉平移等大部分功能。
// 參照《3D數學基礎》的RotationMatrix和Matrix4x3,
// 并方便與OpenGL結合
// Copy Rights: Wonderful 2006
//================================================
#ifndef __MATRIX_H_INCLUDED__
#define __MATRIX_H_INCLUDED__
//-------------------------------------------------------------------------------
// 前向聲明
//-------------------------------------------------------------------------------
class Vector3;
//-------------------------------------------------------------------------------
// 矩陣類
//-------------------------------------------------------------------------------
class CMatrix44F
{
public:
// 設置單位矩陣
void Identity();
// 訪問行和列。
void GetRow(int i, Vector3 *pVec) const; //比如GetRow(3, &position);可以得到位置。
void GetCol(int i, Vector3 *pVec) const;
void SetRow(int i, const Vector3 &vec);
void SetCol(int i, const Vector3 &vec);
//---------------------------平移部分----------------------------------
// 移動部分置空
void ZeroTranslation();
// 直接設置移動部分
void SetTranslation(const Vector3 &d);
// 設置移動部分并把旋轉置空
void SetupTranslation(const Vector3 &d);
// 根據當前的旋轉和位置來移動矩陣
void Translate(const Vector3 &d);
//---------------------------旋轉部分----------------------------------
// 坐標軸索引:1、x軸,2、y軸,3、z軸。
// 構造繞坐標軸旋轉的矩陣
void SetupRotate(int axis, float theta);
// 構造繞任意軸旋轉的矩陣
void SetupRotate(const Vector3 &axis, float theta);
// 繞坐標軸旋轉矩陣,依照當前的矩陣
void Rotate(int axis, float theta);
// 繞任意軸旋轉矩陣,依照當前的矩陣
void Rotate(const Vector3 &axis, float theta);
// 用于旋轉的乘法,平移部分不變。34為三行四列的意思
CMatrix44F& Mul34(const CMatrix44F &m);
// 仿射反轉,用于“物體到世界”和“世界到物體”的轉變
CMatrix44F& AffineInverse();
public:
float m[16]; // 矩陣數據成員
};
//-------------------------------------------------------------------------------
// 非成員函數
//-------------------------------------------------------------------------------
// 向量乘以矩陣
Vector3 operator*(const Vector3 &v, const CMatrix44F &m);
// 矩陣相乘,會調用拷貝構造函數,慢一點
CMatrix44F operator*(const CMatrix44F &a, const CMatrix44F &b);
// 向量乘以矩陣
Vector3& operator*=(Vector3 &v, const CMatrix44F &m);
// 矩陣乘以矩陣
CMatrix44F& operator*=(CMatrix44F &a, const CMatrix44F &b);
// 計算3X3部分的行列式值
float Determinant(const CMatrix44F &m);
// 計算矩陣的逆
CMatrix44F Inverse(const CMatrix44F &m);
// 提取矩陣的平移部分
Vector3 GetTranslation(const CMatrix44F &m);
// 從局部矩陣->父矩陣,或父矩陣->局部矩陣提取位置
Vector3 GetPositionFromParentToLocalMatrix(const CMatrix44F &m);
Vector3 GetPositionFromLocalToParentMatrix(const CMatrix44F &m);
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -