Para entender las secuencias de comandos del juego blender python, actualmente intento crear una escena en la que se pueda caminar alrededor de una esfera, usando la estructura FPSController desde this link. Para la gravedad y orientación FPSController I intentado construir un controlador de pitón, que actualmente se ve así:Blender: walk around sphere
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()
que trabaja más o menos hasta cualquier ángulo Balón por encima de 180 grados, y se ve discontinua entonces. Supongo que esto viene de rotation_difference ser discontinuo - blender documentation on Math Types & Utilities no dice nada, y no he pensado lo suficiente acerca de representaciones cuaterniónicas aún para ver si un mapa continuo sería posible, y supongo que hay una manera más elegante de lograr que la Z local la orientación depende continuamente del ratón, mientras que las orientaciones X e Y locales dependen continuamente de un vector dado, pero ¿cómo?
Las rotaciones en el espacio 3D pueden ser bastante difíciles. En mi opinión, es más fácil dedicar tiempo a entender los cuaterniones y usarlos en su lugar. – fluffels
Si usa ángulos de Euler (en lugar de cuaterniones) uno de los problemas en los que puede incurrir es el bloqueo de cardán (http://en.wikipedia.org/wiki/Gimbal_lock), que puede causar algunos problemas – decden
¿Es fácil probar esto? cuando tienes Blender instalado? (No es un experto en Blender) – Gerard