2012-12-01 4 views
2
내가 basicly 다음 코드를 복제 할

이 (Y 축이 다)는 libgdx합니다 :Libgdx : z 축을 중심으로 회전 (매트릭스 변환)

let archer = Vector3d(1.0,0.0,1.0) 
let target = Vector3d(4.0,0.0,5.0) 
let travel = target - archer 
let transform = Matrix4d.CreateTranslation(-archer) * 
       Matrix4d.CreateRotationY(Math.Atan2(travel.Z,travel.X)) 
Vector3d.Transform(archer, transform) // transforms archer to (0,0,0) 
Vector3d.Transform(target, transform) // transforms target to (5,0,0) 

소스 : https://gamedev.stackexchange.com/questions/33901/how-to-make-an-arrow-land-at-a-specific-position-in-3d-world-space

그리고 여기 나의 접근 방식은 (Z 축 최대입니다) :

archer = new Vector3(1,1,0);   
target = new Vector3(4,5,0);   
Vector3 travel = new Vector3(target).sub(new Vector3(archer)); 
float degree = (float) Math.toDegrees(Math.atan2(travel.y, travel.x)); 
Matrix4 transform = new Matrix4().setToTranslation(new Vector3(archer).mul(-1)); 
transform.mul(new Matrix4().rotate(0, 0, 1, degree));//in my case Z-Axis is up !  
archer.mul(transform); //-1.2,0.39999998,0 should be: 0,0,0 
target.mul(transform); //-2.6000001,5.2,0.0 should be: 5,0,0 

내가 잘못된 결과를 얻고있다 그리고 난 내 실수를 찾을 수 있지만 내가 그것을 줄의 회전 부분을 함께 할 수있는 뭔가가 생각 6

답변

0

나는 그것이 있어야 가정

archer = new Vector3(1,0,1);   
target = new Vector3(4,0,5); 
관련 문제