查看: 2223|回复: 7

求助:我在控制一个飞机模型飞行时,如何获取每帧该模型的空间坐标

[复制链接]

该用户从未签到

发表于 2010-4-12 21:10:19 | 显示全部楼层 |阅读模式
如题:我希望获取飞机模型的坐标 是Vec3型的。谢谢了

该用户从未签到

发表于 2010-4-12 23:38:02 | 显示全部楼层
很遗憾我不知道您要说什么:
如何获取每帧该模型的空间坐标
您指得是什么?模型的包围体中心坐标?模型的所有几何顶点?还是您自定义的什么东西?

该用户从未签到

 楼主| 发表于 2010-4-13 01:14:21 | 显示全部楼层
是这样的 我先创建了一个飞行路线,
然后根据这个路径创建了一个运动模型(飞机)。它可以按照我的路径飞行。
但我现在想获取每一帧中该运动模型的世界坐标,不知道该怎么做。
请锐哥指点一下。

我主要想绘制飞机运动的轨迹
................
while(!viewer->done())
{
  osg->PreFrameUpdate();//帧前操作:通过获取模型的世界坐标画出轨迹(通过两点画线)
  viewer->frame();
  osg->PostFrameUpdate();
}

该用户从未签到

 楼主| 发表于 2010-4-13 01:15:08 | 显示全部楼层
2# array
是这样的 我先创建了一个飞行路线,
然后根据这个路径创建了一个运动模型(飞机)。它可以按照我的路径飞行。
但我现在想获取每一帧中该运动模型的世界坐标,不知道该怎么做。
请锐哥指点一下。

我主要想绘制飞机运动的轨迹
................
while(!viewer->done())
{
  osg->PreFrameUpdate();//帧前操作:通过获取模型的世界坐标画出轨迹(通过两点画线)
  viewer->frame();
  osg->PostFrameUpdate();
}

该用户从未签到

 楼主| 发表于 2010-4-13 01:21:04 | 显示全部楼层
2# array

osg::Vec3Array* coords = dynamic_cast<osg::Vec3Array*>(mLocus->getVertexArray());
    coords->push_back(mPrePos);
    coords->push_back(mCurrentPos);   
mLocus->setVertexArray(coords);         
mLocus->addPrimitiveSet(new osgrawArrays(osg:primitiveSetINES,coords->size()-2,coords->size()-1));
mLocus为osg::geometry,   mPrePos,mCurrentPos为两点位置,每一帧得到新mPrePos,mCurrentPos的值,然后实现一条轨迹的显示.
但是不知道如何获取mCurrentPos的值

该用户从未签到

发表于 2010-4-13 08:20:13 | 显示全部楼层
一个非常强烈的建议是:MFC+OSG开发时不要使用PreFrameUpdate()和PostFrameUpdate()这两个函数。我个人认为这是早期OSG开发留下来的一个遗迹,因为那个时候的OSG不是多线程渲染的;而现在再使用这种方法来动态更新会造成系统结构混乱以及运行的不稳定。请使用回调的机制

既然您可以通过AnimationPath来设置运动路线(我假设是这样的,尽管您从没有说明这一点),那么说明您的模型根节点是MatrixTransform(或者PositionAttitudeTransform)类型,直接使用它的getMatrix()函数就可以得到该模型在父节点局部坐标系下的矩阵,如果这个模型是直接置于场景根之下的,那么这就是它的世界坐标矩阵,否则继续向上求取模型的世界坐标

该用户从未签到

 楼主| 发表于 2010-4-13 17:26:38 | 显示全部楼层
6# array

是的,我是参考一个旧例子,现在新的例子太少了。
哈哈 谢谢了

该用户从未签到

发表于 2010-4-14 08:16:48 | 显示全部楼层
现在新的例子太少了

我想如果您认真浏览过OSG每个发行版所附带的146个例子,一定不会再有这样的说法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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