搅拌机:绕着球体行走
问题描述:
为了理解搅拌机的python游戏脚本,我目前尝试使用从this link的FPSController结构来构建一个场景,其中人们可以在球体周围走动。重力和FPSController取向我试图构建蟒控制器,目前看起来像这样:搅拌机:绕着球体行走
def main():
print("Started")
controller = bge.logic.getCurrentController()
me = controller.owner
distance, loc, glob = me.getVectTo((0,0,0))
grav = controller.actuators['Gravity']
strength = me['Gravity']
force = strength*(distance*distance)*glob
grav.force = force
try:
rot = Vector((0,0,-1)).rotation_difference(glob).to_matrix()
except Exception as E:
print(E)
rot = (0,0,0)
rotZ = me.orientation
me.orientation = rot*rotZ
controller.activate(grav)
main()
这大致工作到任何角度变为超过180度,并且看起来不连续的即可。我认为这是来自rotation_difference是不连续的 - blender documentation on Math Types & Utilities没有说什么,我还没有足够的关于四元数表示还没有看到,如果连续的地图是可能的 - 我想有一个更优雅的方式来实现本地Z方向持续依赖于鼠标,而局部X和Y方向依赖于某个给定的矢量,但是如何?
答
共识似乎是你应该用四元数完成这样的旋转。
为API请参见此:http://www.blender.org/documentation/249PythonDoc/Mathutils.Quaternion-class.html
的介绍,请参阅本到数学:http://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Quaternions
答
有一个allign功能。如果游戏对象被称为自己,它应该类似own.alignAxisToVect(vector, 2, 1)
,其中2是Z轴的索引(x = 0,y = 1,z = 2),1是对齐速度(在0和1之间)
3D空间中的旋转可能非常困难。在我看来,把时间放在理解四元数是最简单的,然后使用它们。 – fluffels 2012-10-19 13:03:55
如果使用欧拉角(而不是四元数),您可能会遇到的问题之一是万向节锁(http://en.wikipedia.org/wiki/Gimbal_lock),这可能会导致相当多的问题 – decden 2013-04-06 19:53:11
是否容易尝试此操作当你安装了Blender时出来? (不是Blender专家) – Gerard 2013-06-10 19:50:18