Blender:围绕球体走动

57
为了理解blender python游戏脚本,我目前尝试构建一个场景,在这个场景中,人们可以使用此链接中的FPSController结构在球周围走动。为了重力和FPSController方向,我尝试构建一个python控制器,它目前如下所示:
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度,然后看起来就不连续了。我猜这是由于旋转差异是不连续的 - Blender Math Types & Utilities文档没有说明任何内容,而我还没有考虑足够多的四元数表示法,以查看是否可能存在连续的映射 - 我想有一种更优雅的方法来实现局部Z方向连续地依赖于鼠标,而局部X和Y方向连续地依赖于某个给定的向量,但是怎么做呢?


16
在三维空间中旋转可能会非常困难。在我看来,最简单的方法就是花时间理解四元数,然后使用它们代替旋转矩阵。 - fluffels
如果使用欧拉角(而不是四元数),你可能会遇到的一个问题是万向节锁定(http://en.wikipedia.org/wiki/Gimbal_lock),这可能会导致很多问题。 - decden
当您安装了Blender时,尝试这个是否容易?(我不是Blender专家) - Gerard
6
那个指向FPSController结构的链接已经失效了。你有备用链接吗? - Asad Saeeduddin
2个回答

4

0

有一个对齐函数。如果游戏对象被称为own,那么它应该是这样的own.alignAxisToVect(vector, 2, 1),其中2是Z轴的索引(x=0,y=1,z=2),1是对齐速度(介于0和1之间)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接