2012-08-10 21 views
57

Blender python oyun betiğini anlamak için, şu anda bir kürenin etrafından dolaşabileceği bir sahne oluşturmaya çalışıyorum, FPSController yapısını kullanarak this link. Herhangi açısı 180 derece üzerine çıkması kadar kabaca çalışır ve sonra süreksiz görünüyorBlender: Sphere etrafında gezinme

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

: yerçekimi ve FPSController oryantasyon için şu anda şöyle bir piton Kontrolör, inşa etmeye çalıştı. Bu, rotasyon_diferansı süreksiz olmaktan geliyor - blender documentation on Math Types & Utilities hiçbir şey söylemiyor, ve sürekli bir haritanın mümkün olup olmadığını görmek için kuaterniyonik gösterimler hakkında yeterince düşünmedim - ve sanırım yerel Z'ye ulaşmak için daha zarif bir yol var. oryantasyon sürekli olarak fareye bağlıdır, yerel X ve Y yönelimleri ise belirli bir vektör üzerinde sürekli olarak bağlıdır, fakat nasıl?

+15

3B alanındaki döndürmeler oldukça zor olabilir. Benim düşünceme göre, zamanın sadece kuaterniyonları anlamaya koyması ve yerine bunları kullanması en kolay yoldur. – fluffels

+0

Euler açıları (quaternions yerine) kullanıyorsanız, karşılaşabileceğiniz sorunlardan biri, bazı sorunlara neden olabilecek gimbal lock'tir (http://en.wikipedia.org/wiki/Gimbal_lock) – decden

+0

Bunu denemek kolay mı? Blender kurulu olduğunda dışarıda? (Bir Blender uzmanı değil) – Gerard

cevap

0

bir allign-işlevi yoktur. Eğer oyun nesnesi kendisine aitse, own.alignAxisToVect(vector, 2, 1) gibi bir şey olmalı ve Z ekseni (x = 0, y = 1, z = 2) için indeks ve 1 (1 ile 1 arasında) hizalama hızı