2012-08-10 6 views
57

블렌더 파이썬 게임 스크립팅을 이해하기 위해 현재 구체 주위를 걸을 수있는 장면을 만들려고합니다. this link의 FPSController 구조를 사용합니다. 어떤 각도가 180도 이상 될 때까지 약 작동하고 불연속 보이는블렌더 : 구체 주위를 둘러보기

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

: 중력과 FPSController 방향을 위해 나는 현재 다음과 같습니다 파이썬 컨트롤러를 구성하기 위해 노력했다. 이것은 continuous_difference가 불 연속적이라고 가정합니다. blender documentation on Math Types & Utilities은 아무 말도하지 않고, 아직 연속 맵이 가능할지를보기 위해 쿼터니언 표현에 대해 충분히 생각하지 않았습니다. 그리고 로컬 Z를 달성하는보다 우아한 방법이 있다고 생각합니다. 방향은 계속적으로 마우스에 의존하지만 로컬 X 및 Y 방향은 주어진 벡터에 따라 계속 달라 지지만 어떻게됩니까?

+15

3D 공간에서의 회전은 매우 어려울 수 있습니다. 제 생각에는 쿼터니언을 이해하는 데 시간을 투자하는 것이 가장 쉽습니다. – fluffels

+0

쿼터니언 대신에 오일러 각을 사용하면 짐벌 잠금 (http://en.wikipedia.org/wiki/Gimbal_lock) 문제가 발생할 수 있습니다. 이로 인해 문제가 발생할 수 있습니다. – decden

+0

쉽게 시도 할 수 있습니까? 블렌더를 설치하면 언제 나오나요? (Blender 전문가가 아닙니다) – Gerard

답변

0

는 allign 기능이있다. 게임 객체가 자신이 호출 된 것이라면, Z 축 (x = 0, y = 1, z = 2)에 대한 인덱스가 2이고 할당 속도가 1 (0과 1 사이) 인 own.alignAxisToVect(vector, 2, 1)과 같아야합니다.