python - ब्लेंडर: गोले के चारों ओर चलो




blender coordinate-transformation (2)

ब्लेंडर पायथन गेम स्क्रिप्टिंग को समझने के लिए, मैं वर्तमान में एक दृश्य बनाने की कोशिश करता हूं, जिसमें इस लिंक से एफपीएसकंट्रोलर संरचना का उपयोग करके एक गोले के चारों ओर घूम सकता है। गुरुत्वाकर्षण और FPSController अभिविन्यास के लिए मैंने एक अजगर नियंत्रक के निर्माण की कोशिश की, जो वर्तमान में इस तरह दिखता है:

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

जो लगभग किसी भी कोण पर 180 डिग्री से अधिक होने तक काम करता है, और तब बंद दिखता है। मुझे लगता है कि यह रोटेशन_डिफायर के असंतुलित होने से आता है - मैथ टाइप्स और यूटिलिटीज पर ब्लेंडर डॉक्यूमेंटेशन कुछ भी नहीं कहता है, और मैंने अभी तक चतुर्धातुक निरूपण के बारे में पर्याप्त नहीं सोचा है कि क्या एक निरंतर नक्शा संभव होगा - और मुझे लगता है कि एक अधिक सुरुचिपूर्ण तरीका है यह सुनिश्चित करने के लिए कि स्थानीय Z अभिविन्यास लगातार माउस-निर्भर है, जबकि स्थानीय X और Y अभिविन्यास कुछ दिए गए वेक्टर पर निरंतर निर्भर करते हैं, लेकिन कैसे?


एक गठबंधन-कार्य है। यदि गेम-ऑब्जेक्ट को स्वयं कहा जाता है, तो उसे कुछ होना चाहिए जैसे कि खुद own.alignAxisToVect(vector, 2, 1) 2 के साथ Z- अक्ष (x = 0, y = 1, z = 2) और 1 के लिए सूचकांक हो गठबंधन की गति (0 और 1 के बीच)


सर्वसम्मति से प्रतीत होता है कि आपको चतुर्भुजों का उपयोग करके ऐसे घुमावों को पूरा करना चाहिए।

इसे एपीआई के लिए देखें: http://www.blender.org/documentation/249PythonDoc/Mathutils.Quaternion-class.html

गणित के लिए एक परिचय के लिए इसे देखें: http://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Quaternions