osg中的矩阵计算

原创 2015年11月20日 15:35:27

OSG是行矩阵,平移向量在第4行!

4*4矩阵在前,平移向量在后(后乘)

这里的Vec3d需要变为4*4矩阵,平移向量在第4行,其他地方为1和0
inline void Matrixd::postMultTranslate(const Vec3d& v)
{
   for(unsigned i=0;i<3;i++)
   {
    double temp = v[i];
    if(tmp == 0)
    continue;
    _mat[0][i] += tmp*_mat[0][3];
    _mat[1][i] += tmp*_mat[1][3];
    _mat[2][i] += tmp*_mat[2][3];
    _mat[3][i] += tmp*_mat[3][3];
   } 
}

前乘:
inline void Matrixd::pretMultTranslate(const Vec3d& v)
{
   for(unsigned i=0;i<3;i++)
   {
    double temp = v[i];
    if(tmp == 0)
    continue;
    _mat[3][0] += tmp*_mat[i][0];
    _mat[3][1] += tmp*_mat[i][1];
    _mat[3][2] += tmp*_mat[i][2];
    _mat[3][3] += tmp*_mat[i][3];
   } 
}
计算坐标应该是右乘,矩阵在右,坐标在左。注:平移向量位于第四行,则矩阵需要右乘;平移向量位于第四列,则矩阵需要左乘

点绕着基点(2,0,0),法矢(0,1,0)旋转,则变换矩阵应该是M = T(-2,0,0)* R(angle)*T(2,0,0),然后p = p*M

求(ux,uy,uz),(Vx,Vy,Vz),(Nx,Ny,Nz)坐标系在世界坐标系下的位置的矩阵,Tr = {Ux, Uy, Uz ,0

                                                                                                                                                       Vx, Vy, Vz, 0

                                                                                                                                                       Nx, Ny, Nz, 0

                                                                                                                                                        0,   0,    0,  1}

osg中矩阵变换一般是先旋转后平移

osg::Matrix mt1;
mt1.makeTranslate(position);
osg::Matrix mt2;
mt2.makeRotate(osg::Vec3(0.0,0.0,1.0),normal);
osg::Matrix mt3;
mt3 = mt2 * mt1;    //一般是先旋转后平移变换


版权声明:本文为博主原创文章,未经博主允许不得转载。

osg的几个矩阵

#include #include #include #include #include #include using namespace std; class Follow...

OSG矩阵左乘顺序

――――――― 对以下代码: osg::Matrix T0;     // 设置矩阵的所有16个值:     T0.set(1, 0, 0, 0,            0, 1, 0,...

osg学习第一篇:矩阵

基础的物体的移动,调用translate进行平移操作,调用setUpdateCallback回调函数在每一帧调用的时候更新。 #include #include #include #includ...

OSG矩阵运算

我们都知道,OpenGL规定矩阵使用列主序存储,即glLoadMatrix等函数要求输入的数组是按列主序存储的矩阵。然而,一个很奇怪的事实是,OSG中矩阵存储是使用的标准C二维数组(行主序),并且也是...

关于OSG中各种变换的理解

最近学习OSG到第7章观察我们的世界,与之前学习的OpenGL有一些区别,当然学OpenGL时就一直不太懂各种坐标系以及变换。看了很久,现将内容整理如下。内容来自《OpenGL编程指南》+《OpenS...

OSG 视景器、漫游器、摄像机与场景的关系

视景器包括几个最主要的组件:漫游器_cameraManipulator,用于实现交互式的场景漫 游;事件处理器组_eventHandlers,负责处理视景器的事件队列_eventQueue,主要是键...
  • sdauzxl
  • sdauzxl
  • 2015年08月02日 16:01
  • 1499

osg 四元数学习

首先几个四元数相乘是几个旋转动作叠加 其次构造四元数方法osg::Quat quat(float roll, const Vec3f& axis),其中radians是旋转弧度, 后面的axis是旋...

osg 矩阵操作

  • 2014年04月16日 21:08
  • 6.31MB
  • 下载

osg 矩阵的平移缩放旋转(转)

平移旋转缩放这个三个是osg矩阵操作中,最常见的操作,下面给出示例以及说明 首先先了解下osg空间方向:  osg方向如左图所示,x轴表示屏幕水平方向,y轴表示和屏幕垂直方向即屏幕里面方向,z轴表...

关于OPenGL和OSG的矩阵

矩阵真的是一个很神奇的数学工具, 虽然单纯从数学上看, 它并没有什么特别的意义, 但一旦用到空间中的坐标变换,它就“一遇风云便成龙”, 大显神威了。简单的工具实现了复杂的功能,便预示着要理解它我们还是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:osg中的矩阵计算
举报原因:
原因补充:

(最多只允许输入30个字)