osg.Matrixd类是OpenSceneGraph中用于处理4x4矩阵的类。它提供了各种矩阵相关的操作和计算。
Matrixd()
Matrixd(const Matrixd& matrix, const CopyOp& copyop=CopyOp::SHALLOW_COPY)
Matrixd(double a00, double a01, double a02, double a03,
double a10, double a11, double a12, double a13,
double a20, double a21, double a22, double a23,
double a30, double a31, double a32, double a33)
第一个构造函数创建一个默认构造的矩阵(单位矩阵)。
第二个构造函数复制给定的矩阵。
第三个构造函数根据给定的16个元素创建一个新矩阵。
void makeIdentity()
将矩阵转换为单位矩阵。
void makeScale(const Vec3d& sv)
根据给定的三维向量元素创建缩放矩阵。
void makeTranslate(const Vec3d& tv)
根据给定的三维向量元素创建平移矩阵。
void makeRotate(double angle, const Vec3d& axis)
根据给定的旋转轴和角度元素创建旋转矩阵。
void makeLookAt(const Vec3d& eye,const Vec3d& center,const Vec3d& up)
根据给定的观察坐标系元素创建观察矩阵。
void makeOrtho(double left, double right, double bottom, double top, double zNear, double zFar)
根据给定的参数创建投影矩阵。
void makePerspective(double fovy, double aspectRatio, double zNear, double zFar)
根据给定的参数创建投影矩阵。
void invert(const Matrixd& matrix)
计算给定矩阵的逆矩阵。
void transpose()
将矩阵转置。
double* ptr()
返回矩阵的底层存储数组指针。
const double* ptr() const
返回矩阵的底层存储数组指针,不允许修改。
Vec3d getTrans() const
返回矩阵的平移部分,即第4列向量。
Vec3d getScale() const
返回矩阵的缩放部分,即从三个方向分别计算。如果存在非均匀缩放,则返回一个近似值。
void decompose(Vec3d& translation,Quat& rotation,Vec3d& scale,Quat& so) const
对矩阵进行分解,返回平移、旋转、缩放和切割平面四部分。
static Matrixd identity()
返回单位矩阵。
static Matrixd scale(double sx, double sy, double sz)
返回根据给定缩放因子创建的缩放矩阵。
static Matrixd translate(double tx, double ty, double tz)
根据给定的位移构造平移矩阵。
static Matrixd rotate(double angle,const Vec3d& axis)
根据给定的旋转角度和轴创建旋转矩阵。
static Matrixd lookAt(const Vec3d& eye,const Vec3d& center,const Vec3d& up)
根据给定的观察坐标系元素创建观察矩阵。
static Matrixd ortho(double left, double right, double bottom, double top, double zNear, double zFar)
根据给定的参数创建投影矩阵。
static Matrixd perspective(double fovy,double aspectRatio,double zNear,double zFar)
根据给定的参数创建投影矩阵。
Matrixd operator * (const Matrixd& other) const
矩阵乘法运算符,返回两个矩阵相乘后的结果。
Vec3d operator * (const Vec3d& v) const
矩阵和向量乘法运算符,返回矩阵和向量相乘后的结果。
double& operator () (int i, int j)
const double& operator () (int i, int j) const
矩阵访问运算符,返回矩阵中(i,j)元素的引用/常量引用。
#include <osg/Matrixd>
osg::Matrixd m;
m.makeScale(osg::Vec3d(2.0,3.0,4.0));
m.makeTranslate(osg::Vec3d(1.0,2.0,3.0));
m.makeRotate(osg::DegreesToRadians(45.0), osg::Vec3d(1.0,0.0,0.0));
osg::Vec3d scale = m.getScale();
osg::Matrixd inv;
inv.invert(m);
osg::Matrixd result = m * inv;
osg::Matrixd perspective = osg::Matrixd::perspective(60.0, 4.0/3.0, 0.1, 1000.0);
osg::Matrixd lookAt = osg::Matrixd::lookAt(osg::Vec3d(0.0,0.0,10.0), osg::Vec3d(0.0,0.0,0.0), osg::Vec3d(0.0,1.0,0.0));
osg::Matrixd projection = perspective * lookAt;
以上代码展示了一些常见的矩阵操作和使用方法。