osg中的矩阵计算

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;    //一般是先旋转后平移变换


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wang15061955806/article/details/49947477
文章标签: 矩阵计算
个人分类: OSG
上一篇24个希腊字母的英文写法
下一篇OpenGL中视口变换的矩阵求解
想对作者说点什么? 我来说一句

osg 矩阵操作

2014年04月16日 6.31MB 下载

没有更多推荐了,返回首页

关闭
关闭