|
本帖最后由 心灬魔 于 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。。。在线等回复 |
-
场景
|