LiveForMyself 发表于 2016-11-17 10:42:40

OSG绕Z轴旋转总是世界坐标系?烦请看一下,就一下下

想实现的效果:坦克绕物体坐标系PITCH,YAW,ROLL正常旋转
但现实的效果:坦克绕物体坐标系PITCH,YAW正常,ROLL总是以世界坐标系来旋转
使用的是MatrixTransform,
也用PositionAttitudeTransform试过,也是一样的效果,后来我用一个MatrixTransform表示位移,另一个表示旋转,还是无法解决问题

节点结构
MatrixTransform *tankLocalMT
----Node *tank
变量
doublepitch,yaw,roll;
Quat_rotate;
Vec3d_translate;
Vec3d_scale;

烦请大神看一下,困扰很久了
代码:

Matrix tankData::setState()
{
        _rotate.makeRotate(
                osg::DegreesToRadians(pitch), Vec3d(1, 0, 0),
                osg::DegreesToRadians(yaw), Vec3d(0, 1, 0),
                osg::DegreesToRadians(roll), Vec3d(0, 0, 1)
                );
        returnMatrix(
                Matrix::scale(_scale)*
                Matrix::rotate(_rotate)*
                Matrix::translate(_translate)
                );
}

//向前移动
void tankData::moveForward()
{
        _translate=_translate+(distance*flySpeed);
        tankLocalMT->setMatrix(setState());
}


//朝正后方移动
void tankData::moveBack()
{
        _translate=_translate-(distance*flySpeed);
        tankLocalMT->setMatrix(setState());
}
//Roll旋转
void tankData::turnRoll()
{
        roll++;
        if (roll == 180) roll = -180;
        tankLocalMT->setMatrix(setState());
       
}
void tankData::turnRoll_()
{
        roll--;
        if (roll == 180) roll = -180;
        tankLocalMT->setMatrix(setState());
}

//Pitch旋转
void tankData::turnPitch()
{
        if (pitch < 90)
        {
                pitch++;
                tankLocalMT->setMatrix(setState());
        }
}
void tankData::turnPitch_()
{
        if (pitch >- 90)
        {
                pitch--;
                tankLocalMT->setMatrix(setState());
        }
       
}
//Yaw旋转
void tankData::turnYaw()
{
        yaw++;
        if (yaw == 180) yaw = -180;
        tankLocalMT->setMatrix(setState());
}
void tankData::turnYaw_()
{
        yaw--;
        if (yaw == 180) yaw = -180;
        tankLocalMT->setMatrix(setState());
}

LiveForMyself 发表于 2016-12-6 16:16:16

自顶!!
三次矩阵相乘
只有第一次旋转的矩阵能以物体坐标系旋转,后面两次都是全局坐标系
页: [1]
查看完整版本: OSG绕Z轴旋转总是世界坐标系?烦请看一下,就一下下