心灬魔 发表于 2014-5-10 15:05:38

大神们来帮帮我一个椎体跟踪模型的问题吧

本帖最后由 心灬魔 于 2014-5-10 15:12 编辑

场景是这样    我有一个固定不动的雷达车,发射出一个扫描椎体,当有飞机飞入我的扫描范围的时候扫描锥一直指向飞机,现在不知道计算什么地方有错,在群里也问了好些人,由于基础比较差,不太理解他们说的。。希望大神们能讲的详细点。。。谢谢大家了

void FollowCallBack::operator()( osg::Node*node,osg::NodeVisitor* nv )
{
        osg::ref_ptr<osg::MatrixTransform> _pat =
                dynamic_cast<osg::MatrixTransform*>(node);
       
        osg::PositionAttitudeTransform* animat = modelAnima->PAT;
        if (!animat->getName().empty())
        {
                osg::Vec3d currentP = animat->getBound().center();//飞机每一帧的位置(世界坐标);
                radarMt = computeWorldToLocal(nv->getNodePath());   //获得雷达的局部矩阵;
                worldPoint= osg::Vec3d(0,0,0);//雷达的位置在自己的局部坐标中为(0,0,0);
                currentPoint = currentP*radarMt;//将每一帧飞机的位置转换到雷达的局部坐标系中;
                /*求出每一帧飞机和雷达两个点的向量;*/
                double _X,_Y,_Z;
                _X = worldPoint.x()-currentPoint.x();
                _Y = worldPoint.y()-currentPoint.y();
                _Z = worldPoint.z()-currentPoint.z();
                osg::Vec3d rotateXY = osg::Vec3d(_X,_Y,0);
                rotateXY.normalize();
                osg::Vec3d rotateZ = osg::Vec3d(_X,_Y,_Z);
                rotateZ.normalize();
                osg::Quat RotationXY,RotationZ;
                RotationXY.makeRotate(osg::Vec3d(1,0,0),rotateXY);
                RotationZ.makeRotate(rotateXY,rotateZ);
                /*将椎体每一帧都旋转到和这个向量一致;*/
                osg::Matrix mat = _pat->getMatrix();
                     mat.makeRotate(RotationXY*RotationZ);
                _pat->setMatrix(mat);
        }
        traverse(node,nv);
}

T_T。。。在线等回复

nie 发表于 2014-5-15 15:11:14

osg::Vec3d currentP = animat->getBound().center();
这个求出来是世界坐标吗,怎么我得到的是一个很小的数据,像是一个相对坐标
页: [1]
查看完整版本: 大神们来帮帮我一个椎体跟踪模型的问题吧