查看: 2337|回复: 11

小车为什么不能和地形匹配

[复制链接]

该用户从未签到

发表于 2009-11-28 23:30:48 | 显示全部楼层 |阅读模式
代码:
osg:uat quat = trans->getAttitude();//得到四元数
osg::Vec3 dir = quat * osg::Vec3(1, 0, 0);
dir.normalize();
pos = trans->getPosition();
osg::Vec3 midPos=pos;//
pos += dir * dumptruckSpeed;
ChangePosition(osg::Vec3(pos[0],pos[1],0));//得到了一个新的位置的坐标并将其赋值给了pos
trans->setPosition(pos);

我现在想让小车也就是这个trans运动的时候和地形匹配。但是不知道为什么总是走梯形  。我觉得就是用setRotate,但是我要得到这个新位置的四元数。我觉得新的位置的四元数应该是quat*旋转矩阵。旋转矩阵的求法我不会。不知道我分析的对不对?还有那位可以告诉我旋转矩阵怎么求?感谢.
还有一个问题
// 设置场景和视口(包括tankTransform节点的添加)……

transformAccumulator* tankWorldCoords = new transformAccumulator();

tankWorldCoords->attachToGroup(tankTransform);

followNodeMatrixManipulator* followTank =


new followNodeMatrixManipulator(tankWorldCoords);

osgGA::KeySwitchMatrixManipulator *ksmm =

viewer.getKeySwitchMatrixManipulator();

if (!ksmm)

return -1;

// ?
添加跟随坦克的矩阵控制器的。按下“m”键即可实现视口切换到该控制器。

ksmm->addMatrixManipulator('m',"tankFollower",followTank);

// ...
进入仿真循环...
这是海军教程了里的代码,是视点跟随节点的变化的,现在有个问题是这里面有几个函数不是osg2.6里面的不知道该怎么换
感谢大家

该用户从未签到

发表于 2009-11-28 23:37:37 | 显示全部楼层
1、四元数本身就是表达旋转的方式,它可以完全替代矩阵的表达方式并且更加简便(矩阵需要16个数来存储,而四元数只需要4个!);场景中任何形式的旋转都可以表现为绕某个向量的转动,即四元数的形式。

2、请您明确指出,是那几个函数不知道如何转换

该用户从未签到

 楼主| 发表于 2009-11-29 10:18:14 | 显示全部楼层
osgGA::KeySwitchMatrixManipulator
viewer.getKeySwitchMatrixManipulator();
ksmm->addMatrixManipulator('m',"tankFollower",followTank); 是这三个函数不知道如何转换。
我明白四元数可以替代矩阵,但我是想得到新位置的四元数,不知道怎么得到。我把我的代码发到上面,麻烦给看一下。谢谢

osgVR.rar

1.58 MB, 下载次数: 204, 下载积分: 威望 1

该用户从未签到

 楼主| 发表于 2009-11-30 00:05:48 | 显示全部楼层
为什么没人告诉我啊

该用户从未签到

发表于 2009-11-30 08:37:56 | 显示全部楼层
osgGA::KeySwitchMatrixManipulator* ksmm,这个类在目前的任何版本中都可用;
viewer.getKeySwitchMatrixManipulator(),可以考虑用viewer.getCameraManipulator()替代,前提是您设置了setCameraManipulator(ksmm)
ksmm->addMatrixManipulator(),这个函数在目前的任何版本中都可用。

我不想看那么庞大的代码(1.58M),麻烦您尝试将其简化到20行以内,或者换一种方法来提出问题。相信在这个过程中您自己也会得到更多启发

该用户从未签到

 楼主| 发表于 2009-12-1 18:25:58 | 显示全部楼层
恩 ,那我捡详细的说啊。
首先,车子的初始位置是midpos,初始位置的三维空间的坐标是正确的,其四元数也是正确的。
第二个位置是pos,第二个位置只在第一位置的前方加了段距离,它的三维坐标是正确的,但是我不知道怎么求出四元数。
还有一个已经xy坐标求出z坐标的函数changeposition。参数是新点的xy坐标值
希望能得到大家的帮助。
我已经有弄了2周了,没有一点进展。

该用户从未签到

 楼主| 发表于 2009-12-1 20:43:13 | 显示全部楼层
其实我的代码不大,真正的就这么点

main.rar

7.5 KB, 下载次数: 141, 下载积分: 威望 1

该用户从未签到

发表于 2009-12-1 23:23:54 | 显示全部楼层
你的问题其实简化起来只是一个姿态控制问题,,如果想要小车精确的在地形上行走的话,,你可以参考小车爬坡算法来实现姿态问题~~~~~~·

该用户从未签到

发表于 2009-12-2 08:46:14 | 显示全部楼层
首先,车子的初始位置是midpos,初始位置的三维空间的坐标是正确的,其四元数也是正确的。第二个位置是pos,第二个位置只在第一位置的前方加了段距离,它的三维坐标是正确的,但是我不知道怎么求出四元数


首先要明确的是:您到底希望这个车子是如何运动的。例如,车从位置p1到p2,您是否希望它的角度变化是符合下图的策略的?
car.jpg
通过图示可以推论:如果p1位置时车的朝向是(p1-p0),那么p2位置时它的朝向就应当是(p2-p1)。那么旋转角度的计算就很简单了,用makeRotate(p1-p0, p2-p1)就可以得到车从p1到p2的旋转增量值;如何应用这个增量值呢?把它级联到模型矩阵中就可以了

这只是一种简单的思路,至于您的设想是否是这样~~或者您的实验该如何进行。我希望由您自己去思考和完成。论坛和QQ群为大家提供的帮助,是在您自己已有解决方案,并且您期望与大家探讨您的解决方案的前提下。如果只是一味地提出问题并追着要答案的话,那么您和出题老师就无异了~~偏偏我们大多是懒得搭理学校那档子事的坏学生。


希望能得到大家的帮助。我已经有弄了2周了,没有一点进展。

听这句话我有些遗憾。如果这两周中您一直在研读空间几何和图形学的基础书籍的话,想必现在这个问题对您而言已经不在话下了。提高自己的方式不是“死扣”某个问题,而是以此为契机,全面地阅读和掌握知识原理。您觉得呢?

该用户从未签到

 楼主| 发表于 2009-12-13 20:05:43 | 显示全部楼层
恩,麻烦了,今天刚出差回来,出差前我买了2本书其中有一本是3D数学基础还有一本是OpenSceneGraph三维渲染引擎设计与实现。看了看,还是不太明白,可能基础太差吧。
1.jpg 请问这个图里面如果AB为物体 AB‘为物体变换后的位置  那个为四元数里面的旋转角度  那个为四元数里面的旋转轴?

该用户从未签到

发表于 2009-12-13 21:06:28 | 显示全部楼层
尝试用lookup vector

该用户从未签到

发表于 2009-12-14 12:25:58 | 显示全部楼层
旋转轴当然就是AB与AB'的叉积了~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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