【发布时间】:2012-08-07 22:22:49
【问题描述】:
为了理解blender python 游戏脚本,我目前尝试使用this link 的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 度,然后看起来不连续。我认为这是因为rotation_difference 不连续——blender documentation on Math Types & Utilities 没有说什么,而且我对四元数表示还没有充分考虑到是否可以使用连续映射——我想有一种更优雅的方式来实现这一点局部 Z 方向持续依赖于鼠标,而局部 X 和 Y 方向持续依赖于某个给定向量,但如何?
【问题讨论】:
-
3D 空间中的旋转可能非常困难。在我看来,最简单的方法就是花时间理解四元数,然后改用它们。
-
如果使用欧拉角(而不是四元数),您可能会遇到的问题之一是万向节锁定 (en.wikipedia.org/wiki/Gimbal_lock),这可能会导致相当多的问题
-
安装 Blender 后是否可以轻松尝试? (不是 Blender 专家)
-
到 FPSController 结构的链接不再起作用。你有镜子吗?
标签: python blender coordinate-transformation