physx中的inertia tensors(惯性张量)

最近编写编辑器的时候遇到一个问题,在创建一个nxactor后,这个actor的弹性很奇怪,在平坦的地面弹起来会胡乱的旋转。

 

在和正常actor比较后,发现,是弹性张量出的问题,犹豫程序的bug,导致弹性张量出现无效值。

 

在查阅了physx文档,发现这个弹性张量只能通过程序计算

physx提供了一系列函数

 

NxCompute.....Mass

NxCompute.....InertiaTensor

 

NxDiagonalizeInertiaTensor

 

但是这个弹性张量到底是什么呢,在网上搜索后,看到一篇文章介绍的比较清晰

 

转自百思论坛http://www.baisi.net/viewthread.php?tid=2851

转动惯量和惯性张量’的定义


转动惯量是表征刚体转动惯性大小的物理量,它与刚体的质量、质量相对于转轴的分布有关。
大家都知道动能E=(1/2)mv¬2,而且动能的实际物理意义是:物体相对某个系统(选定一个参考系)运动的实际能量,(P势能实际意义则是物体相对某个系统运动的可能转化为运动的实际能量的大小)。

E=(1/2)mv¬2 (v¬2为v的2次方)
把v=wr代入上式 (w是角速度,r是半径,在这里对任何物体来说是把物体微分化分为无数个质点,质点与运动整体的重心的距离为r,而再把不同质点积分化得到实际等效的r)
得到E=(1/2)m(wr)¬2
由于某一个对象物体在运动当中的本身属性m和r都是不变的,所以把关于m、r的变量用一个变量K代替,
K=mr¬2
得到E=(1/2)Kw¬2
K就是转动惯量,分析实际情况中的作用相当于牛顿运动平动分析中的质量的作用,都是一般不轻易变的量。

这样分析一个转动问题就可以用能量的角度分析了,而不必拘泥于只从纯运动角度分析转动问题。

为什么变换一下公式就可以从能量角度分析转动问题呢?
1、E=(1/2)Kw¬2本身代表研究对象的运动能量
2、之所以用E=(1/2)mv¬2不好分析转动物体的问题,是因为其中不包含转动物体的任何转动信息。
3、E=(1/2)mv¬2除了不包含转动信息,而且还不包含体现局部运动的信息,因为里面的速度v只代表那个物体的质心运动情况。
4、E=(1/2)Kw¬2之所以利于分析,是因为包含了一个物体的所有转动信息,因为转动惯量K=mr¬2本身就是一种积分得到的数,更细一些讲就是
综合了转动物体的转动不变的信息的等效结果K=∑ mr¬2 (这里的K和上楼的J一样)
所以,就是因为发现了转动惯量,从能量的角度分析转动问题,就有了价值。


惯性质量的概念“质量是物体惯性大小的量度”出现在高中物理教材中,要明确一切物体都具有惯性,惯性的表现形式又因物体的运动形式的不同而不同.对于质点的运动和低速情况下的物体的平动来说,惯性可以用质量的大小来量度.但是,当物体作转动时,就不能单一地用质量来量度物体贯性的大小了,这时需要用所谓“转动惯量”来描述惯性的大小.而转动惯量除与物体质量的大小有关外,还与物体的转轴的选取和质量的分布有关.对于高速运动的物体,其惯性表现得就更为复杂,此时需要用“惯性张量”来描述.因此,质量并不能完善地描述所有情况下惯性的大小,只有在特定的情况下(物体作低速平动),才可以作为惯性的量度
惯性张量,说的通俗一点就是我们说的转动惯量,因为有不同方向的分量,把他们合在一起用一个张量就可以表示,这个张量就是惯性张量,也叫惯量张量
空间惯量张量应该是二阶张量,其坐标是6×6的矩阵,张量可以看成是有两个方向的量(针对二阶),或者就是两向量的并失,我个人的理解,N维张量空间就是一个N维笛卡尔空间(不知是否正确,欢迎大家指正),其实如果考虑到柔性,一个体的惯量张量就不是6×6的矩阵了,这个就要看实际应用中如何截取模态了。
这样看来,这个值除非专业学物理学的人,否则还是让physx自己计算好了
好在physx提供了一个简便的函数
NxActor::updateMassFromShapes
这个函数需要提供一个值,质量和密度则其一。一个非零另一个就置0.
好了我的问题算是解决了。

 

你可能感兴趣的:(游戏编程,actor,文档)