2

基本的に、次のコード スニペット (Y 軸が上) を libgdx に複製したいと考えています。

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行目の回転部分に関係があると思います

4

1 に答える 1

0

そうあるべきだと思います

archer = new Vector3(1,0,1);        
target = new Vector3(4,0,5); 
于 2013-12-18T00:39:35.367 に答える