2012-08-10 18 views
57

ब्लेंडर पायथन गेम स्क्रिप्टिंग को समझने के लिए, मैं वर्तमान में this link से 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 डिग्री से अधिक हो जाता है काम करता है, और फिर असंतत दिखता है: गुरुत्वाकर्षण और FPSController उन्मुखीकरण के लिए मैं एक अजगर नियंत्रक, जो वर्तमान में इस तरह दिखता है का निर्माण करने की कोशिश की। मुझे लगता है कि यह rotation_difference से असंतुलित होने से आता है - blender documentation on Math Types & Utilities कुछ भी नहीं कहता है, और मैंने अभी तक यह देखने के लिए quaternionic प्रस्तुतियों के बारे में पर्याप्त नहीं सोचा है कि एक निरंतर नक्शा संभव होगा - और मुझे लगता है कि स्थानीय ज़ेड प्राप्त करने के लिए एक और शानदार तरीका है अभिविन्यास लगातार माउस-निर्भर है, जबकि स्थानीय एक्स और वाई उन्मुखता कुछ दिए गए वेक्टर पर लगातार निर्भर करती है, लेकिन कैसे?

+15

3 डी स्पेस में रोटेशन काफी कठिन हो सकता है। मेरी राय में, समय को quaternions समझने में आसान है, और इसके बजाय उन का उपयोग करें। – fluffels

+0

यदि यूलर कोण (quaternions के बजाय) का उपयोग करने वाले मुद्दों में से एक है जिम्बल लॉक (http://en.wikipedia.org/wiki/Gimbal_lock), जो कुछ समस्याएं पैदा कर सकता है – decden

+0

क्या यह कोशिश करना आसान है जब आप ब्लेंडर स्थापित करते हैं? (ब्लेंडर विशेषज्ञ नहीं) – Gerard

उत्तर

4

आम सहमति यह प्रतीत होती है कि आपको quaternions का उपयोग करके ऐसे घूर्णन को पूरा करना चाहिए।

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

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

0

एक पंक्ति-समारोह नहीं है। यदि गेम-ऑब्जेक्ट को स्वयं कहा जाता है तो यह own.alignAxisToVect(vector, 2, 1) जैसा होना चाहिए 2 के साथ जेड-अक्ष (x = 0, y = 1, z = 2) के लिए इंडेक्स होना चाहिए और 1 आवंटन की गति (0 और 1 के बीच) होना चाहिए।

संबंधित मुद्दे