python blender coordinate-transformation

python - Licuadora: caminar alrededor de la esfera



blender coordinate-transformation (2)

Para entender las secuencias de comandos de los juegos de python de Blender, actualmente intento crear una escena en la que se pueda caminar alrededor de una esfera, utilizando la estructura FPSController desde este enlace . Para la orientación de gravedad y FPSController, intenté construir un controlador python, que actualmente tiene este aspecto:

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 funciona aproximadamente hasta que cualquier ángulo supera los 180 grados, y luego parece discontinuo. Supongo que esto se debe a que la diferencia de rotación es discontinua: la documentación de Blender sobre Math Types & Utilities no dice nada, y aún no he pensado lo suficiente en las representaciones cuaterniónicas para ver si un mapa continuo sería posible, y creo que hay una forma más elegante para lograr que la orientación Z local sea continuamente dependiente del mouse, mientras que las orientaciones X e Y locales dependen continuamente de algún vector dado, pero ¿cómo?



Hay una función de alineación. Si el juego-objeto se llama propio, debería ser algo como own.alignAxisToVect(vector, 2, 1) siendo 2 el índice para el eje Z (x = 0, y = 1, z = 2) y 1 como el Velocidad de alineación (entre 0 y 1).