Per comprendere lo script di gioco di Python Blender, attualmente provo a creare una scena in cui si possa camminare intorno a una sfera, usando la struttura FPSController da this link. Per gravità e orientamento FPSController ho cercato di costruire un controllore pitone, che attualmente appare così: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()
che funziona all'incirca fino a qualsiasi angolazione supera 180 gradi, e appare discontinua poi. Presumo che questo derivi da rotation_difference essendo discontinuo - blender documentation on Math Types & Utilities non dice nulla, e non ho ancora pensato abbastanza alle rappresentazioni quaternioniche per vedere se una mappa continua sarebbe possibile - e immagino ci sia un modo più elegante per ottenere che la Z locale l'orientamento è continuamente dipendente dal mouse, mentre gli orientamenti locali X e Y dipendono continuamente da un dato vettore, ma come?
Le rotazioni nello spazio 3D possono essere abbastanza difficili. A mio parere, è più facile dedicare il tempo alla comprensione dei quaternioni e utilizzarli. – fluffels
Se si utilizzano gli angoli di eulero (invece dei quaternioni) uno dei problemi a cui si può incorrere è il blocco del gimbal (http://en.wikipedia.org/wiki/Gimbal_lock), che potrebbe causare alcuni problemi – decden
È facile provare questo quando hai installato Blender? (Non esperto di Blender) – Gerard