57 votes

Blender: marcher autour de la sphère

Afin de comprendre blender python jeu de scripts, actuellement, j'essaie de construire une scène dans laquelle on peut se promener autour d'une sphère, à l'aide de la FPSController structure à partir de ce lien. Pour la gravité et FPSController orientation, j'ai essayé de construire un python Contrôleur, actuellement, qui ressemble à ceci:

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()

qui fonctionne à peu près jusqu'à ce que n'importe quel angle va plus de 180 degrés, et regarde discontinue alors. Je suppose que cela vient de rotation_difference être discontinu blender de la documentation sur les Mathématiques Types Et les services publics ne dit rien, et je n'ai pas assez pensé quaternionic représentations encore pour voir si une carte continue serait possible, et je pense qu'il y a une façon plus élégante de réaliser que le local Z orientation est continuellement à la souris-dépendante, tandis que X et Y orientations dépendent en permanence sur certains vecteur donné, mais comment?

4voto

Marcin Points 25366

Le consensus semble être que vous devriez accomplir de telles rotations à l'aide des quaternions.

Voir ce pour l'api: http://www.blender.org/documentation/249PythonDoc/Mathutils.Quaternion-class.html

Voir ce pour une introduction aux mathématiques: http://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Quaternions

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X