游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2016|回复: 3

如果让一辆车在山路上行走时方位正确?

[复制链接]

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-9-25 11:48:00 | 显示全部楼层 |阅读模式
我想让一辆车沿着固定的路线走,并且时刻面对前方。我用下面的代码可以保证在水平面上完美实现:
Vector3 mDestination = mWalkList.front();                    
Vector3 mDirection = mDestination - mNode->getPosition();
Vector3 src = mNode->getOrientation() * Vector3::UNIT_X;
Real mDistance = mDirection.normalise();
Quaternion quat = src.getRotationTo(mDirection);
mNode->rotate(quat);
这是Ogre中级教程一所使用的方法。


但是,如果车还要上坡下坡的话,就会出现错误。有时候车身会侧着。


因为我用了TerrainSceneManager的场景管理器,于是,我用了下面的方法:

Vector3 vecPos = mNode->getPosition();
Vector3 vecUp(0, 0, 0);
TerrainRenderable * tile = mSceneMgr->getTerrainTile(vecPos);
tile->_getNormalAt(vecPos.x, vecPos.y, &vecUp);
vecUp.normalise();
Vector3 vecRight = mDirection.crossProduct(vecUp);
vecRight.normalise();
Ogre:uaternion quat(vecRight, vecUp, mDirection);
mNode->setOrientation(quat);

这样做以后,根本不起作用,根本不影响车辆当前的方位,路线再怎么转弯,车子走过去以后,也跟max里的方位相同,不会转弯!

2

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2008-9-25 16:55:00 | 显示全部楼层

Re:如果让一辆车在山路上行走时方位正确?

首先 vecUp mDirection 都要判?嗍遣皇?向量

再? 你犯了一??基本的??
vecUp mDirection 2者?A角不???0度
Ogre:uaternion quat(vecRight, vecUp, mDirection);
取出的quat?然??绣e

正常??拥那?r都?? ?node
省?r省力

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2008-9-25 18:04:00 | 显示全部楼层

Re:如果让一辆车在山路上行走时方位正确?

vecUp 和 mDirection 夹角确实不会是90度。我先让 vecUp 和 mDirection 叉乘,得到 vecRight,这个时候
是让 vecUp 和 vecRight叉乘得到矫正后的 mDirection 合适呢?
还是让 mDireciton 和 vecRight叉乘得到矫正后的 vecUp 合适?


还有,你说的双node是什么意思?能详细说下吗?谢谢!

2

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2008-9-25 19:53:00 | 显示全部楼层

Re:如果让一辆车在山路上行走时方位正确?

>> 是? vecUp 和 vecRight叉乘得到?正後的 mDirection 合?呢?
>> ?是? mDireciton 和 vecRight叉乘得到?正後的 vecUp 合??
?????? 想一下就明白了
vecUp 的xyz都是正?值
mDireciton 的垂直向 永?是?的
你?得???怎?铀隳兀

>> ?node是什?意思?能???下?幔恐x?!
就是在 mNode 之上 再加上一?? parents node
1??依地形??
1??依水平向??
??硬挥盟阋欢?|西 控制又方便
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 05:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表