Um blender python spiel scripting zu verstehen, versuche ich derzeit, eine Szene zu bauen, in der man um eine Kugel gehen kann, mit der FPSController-Struktur von this link. Für die Schwerkraft und FPSController Orientierung habe ich versucht, ein Python-Controller zu konstruieren, die derzeit wie folgt aussieht:Blender: Walk around
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()
die in etwa funktioniert, bis jeder Winkel über 180 Grad geht, und sieht dann diskontinuierlich. Ich nehme an, das kommt davon, dass rotation_difference diskontinuierlich ist - blender documentation on Math Types & Utilities sagt nichts, und ich habe nicht genug über quaternionische Darstellungen nachgedacht, um zu sehen, ob eine kontinuierliche Karte möglich wäre - und ich denke, es gibt einen eleganteren Weg, um das lokale Z zu erreichen Die Orientierung ist ständig mausabhängig, während die lokalen X- und Y-Orientierungen kontinuierlich von einem gegebenen Vektor abhängen, aber wie?
Drehungen im 3D-Raum können ziemlich schwierig sein. Meiner Meinung nach ist es am einfachsten, die Zeit für das Verständnis von Quaternionen zu nutzen und diese stattdessen zu verwenden. – fluffels
Bei der Verwendung von Euler-Winkeln (anstelle von Quaternionen) kann eines der Probleme sein, an denen Sie möglicherweise beteiligt sind: Gimbal Lock (http://en.wikipedia.org/wiki/Gimbal_lock), was zu einigen Problemen führen kann – decden
Ist es einfach, dies zu versuchen wenn du Blender installiert hast? (Kein Blender-Experte) – Gerard