查看: 1733|回复: 9

视点动态变化问题。

[复制链接]

该用户从未签到

发表于 2009-10-17 17:16:22 | 显示全部楼层 |阅读模式
我给飞机模型写了个更新回调函数使其位置动态变化。我想让视点随着飞机模型动态的变化。怎么实现?
我使用下面的方式好像不行。。
更新回调类如下:
class NodeCallback : public osg::NodeCallback
{
        virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
  {    osg::MatrixTransform*
  mtCow=dynamic_cast<osg::MatrixTransform*>(node);
  osg::Matrix mr;
   mr.makeRotate(angle,osg::Vec3(0.0f,0.0f,1.0f));
  mtCow->setMatrix(mr);
  angle+=0.01;
   traverse(node,nv);
        }
public:
double angle;
};
int main(){
  .
  .
  .
  .

while (!viewer.done())
{  
viewer.getCamera()->setViewMatrixAsLookAt(osg::Vec3(bb.center().x(),bb.center().y(),bb.center().z()+100.f),osg::Vec3(0.f,0.f,-10.f),osg::Vec3(0.f,10.f,0.f));
viewer.frame();
}
其中bb是飞机模型的包围盒。

该用户从未签到

 楼主| 发表于 2009-10-17 17:18:06 | 显示全部楼层
不好意思,类名写错了。class MYNodeCallback : public osg::NodeCallback

该用户从未签到

发表于 2009-10-18 08:34:44 | 显示全部楼层
您正确地获得mtCow指针了吗?或者进一步说,您能够保证MYNodeCallback肯定是作用于一个MatrixTransform节点之上吗?
此外直接在仿真循环中设置相机矩阵的方法不太可取,还是继承MatrixManipulaotr更为合适一些

该用户从未签到

 楼主| 发表于 2009-10-18 14:23:09 | 显示全部楼层
MYNodeCallback是作用于一个MatrixTransform节点之上
mtCow->setUpdateCallback(new MYNodeCallback());
继承MatrixManipulaotr的方法怎么做?具体点。。

该用户从未签到

发表于 2009-10-18 14:30:50 | 显示全部楼层
看一看TrackballManipulator等类的源代码,没有比源代码更具体的了

该用户从未签到

 楼主| 发表于 2009-10-18 14:41:41 | 显示全部楼层
初学者直接看源代码难道比较大。给个例子比较直观。

该用户从未签到

发表于 2009-10-18 22:53:04 | 显示全部楼层
没必要,看源代码就是最好的例子;其中没有任何难点可言

该用户从未签到

发表于 2009-10-21 19:39:02 | 显示全部楼层
7# array 呵呵。支持,看样子我也得看源码了。。

该用户从未签到

发表于 2009-10-21 20:45:19 | 显示全部楼层
nodetrackManipulator

该用户从未签到

 楼主| 发表于 2009-10-22 15:37:18 | 显示全部楼层
nodetrackManipulator怎么用?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表