查看: 1377|回复: 9

一个模型贴紧另外一个模型运动

[复制链接]

该用户从未签到

发表于 2012-3-26 16:47:56 | 显示全部楼层 |阅读模式
怎么实现一个模型A(比如一个盒子)在另外一个模型B(比如一个球或者人体)贴紧表面运行, 模型A根据模型B的表面的曲度自动旋转让自己的一个表面始终贴紧模型B,    大家帮提供一下思路.   

该用户从未签到

发表于 2012-3-26 17:54:38 | 显示全部楼层
用射线网格求交器osgUtil:ineSegmentIntersector,交点为接触点,再把A相对移动一下即可

该用户从未签到

 楼主| 发表于 2012-3-26 21:10:45 | 显示全部楼层
liushui 发表于 2012-3-26 17:54
用射线网格求交器osgUtil:ineSegmentIntersector,交点为接触点,再把A相对移动一下即可

那想转的角度怎么获取,  我想计算两个接触面的法线的方向球两个方向夹角, 但是怎么回去接触面的法线的方向啊?

该用户从未签到

发表于 2012-3-27 10:00:39 | 显示全部楼层
采用多个osgUtil:ineSegmentIntersector在物体的不同位置进行探测,此时根据探测到的点确定一个平面,然后将需旋转的物体的底面与此平面平行。即通过求物体底面旋转到平面的旋转矩阵即可。一般需要进行3次求交探测,因为确定一个面需要3个点。

该用户从未签到

 楼主| 发表于 2012-3-27 11:39:46 | 显示全部楼层
fenma3422 发表于 2012-3-27 10:00
采用多个osgUtil:ineSegmentIntersector在物体的不同位置进行探测,此时根据探测到的点确定一个平面,然后将 ...

是用要旋转的模型与另外一个模型求交, 还是用要旋转的模型的地面与另一个模型求交, 要是用模型的地面求交, 是不是要把要这个底面单独弄成一个模型啊?  使底面和交点的那个面平行, 要怎么做啊? 我刚接触osg, 谢谢了!

该用户从未签到

发表于 2012-3-27 12:04:21 | 显示全部楼层
在模型底面取三个特征点作为射线端点,方向为向下,用这三个射线求交

该用户从未签到

 楼主| 发表于 2012-3-27 12:17:46 | 显示全部楼层
fenma3422 发表于 2012-3-27 12:04
在模型底面取三个特征点作为射线端点,方向为向下,用这三个射线求交

三个交点, 那怎么移动模型啊? 移动到三个点的中点吗?还是把底面的三个点分别移动到交点.

该用户从未签到

发表于 2012-3-28 14:53:37 | 显示全部楼层
在模型底面取三个特征点作为射线端点,方向为向下,用这三个射线求交
得到三个点,来确定一个平面,这样动画进行的时候,平面也不断运动,

要使得模型A始终贴紧模型B,那么A和这个平面的运动状态是一样的

在更新回调的时候,不断求出平面的变换矩阵的相对量,把这个相对量加到物体A上即可

该用户从未签到

 楼主| 发表于 2012-3-29 09:02:37 | 显示全部楼层
liushui 发表于 2012-3-28 14:53
在模型底面取三个特征点作为射线端点,方向为向下,用这三个射线求交
得到三个点,来确定一个平面,这样动 ...

谢谢了,  是求平面的变换矩阵, 还是平面所在模型的变换矩阵啊?

该用户从未签到

发表于 2012-4-6 14:20:15 | 显示全部楼层
用这三个射线求交得到三个点,来求平面的变换矩阵,
而平面属于A又属于B,所以平面是A的固定的一部分,这样A的变换矩阵就有了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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