2017-06-22 12 views
0

で中心点に周りに回転させる私のコードです:Libgdxカメラここでオイラー角

private Quaternion getRotatedQuaternion(float pitch, float yaw, float roll) { 
    tempQuat.setEulerAngles(pitch, yaw, roll); 
    rotationQuat.mulLeft(tempQuat); 

    return rotationQuat; 
} 

  camera.view.setToLookAt(tempPos, tempLookat, Axis.UP); 

      Quaternion rotQuat = getRotatedQuaternion(gestureListener.getXAngle(), gestureListener.getYAngle(), 0); 
      camera.view.rotate(rotQuat); 
      camera.combined.set(camera.projection); 

      Matrix4.mul(camera.combined.val, camera.view.val); 

これは0,0,0で、中央にカメラの回転です。このようにジンバルロックの問題が解決されました。しかし、どのように新しい中心点を追加することができますか?

基本的に私は私の物を中心にカメラを回転させる必要はなく、0,0,0

おかげ

答えて

0

これは、ジンバルロックを行います、それはない私は2つのMatrox回転とアークボールの回転

0

私はあなたがそれを行うことができる唯一の方法は、まず、対象物の位置にカメラを移動させることだと思います、回転させ、カメラを元の位置に戻します。

だから、のようなもの:あなたは、デカルト座標(x、y)に極座標(R、θ)から変換する必要があり

Camera.setposition(object.pos) 
Camera.rotate() 
Camera.setposition(original-camera-pos) 
+0

として使用するベクトルになってしまいました私のために良い! – lacas

+0

「ジンバルロック」とはどういう意味ですか? –

+0

https://en.m.wikipedia.org/wiki/Gimbal_lock – lacas

0

式は以下の通りです:

のx =×rをCOS(θ)

Yが= SIN(θ)×R

角度は、オブジェクトの中心点(360度まで0°)を基準とし、半径が距離fはあなたのオブジェクトをカメラに置きます。ここで

は、あなたのためにする簡単な方法です:

public static Vector3 returnPosArroundObj(Vector3 posObject, Float angleDegrees, Float radius, Float height) { 
    Float angleRadians = angleDegrees * MathUtils.degreesToRadians; 
    Vector3 position = new Vector3(); 
    position.set(radius * MathUtils.sin(angleRadians), height, radius * MathUtils.cos(angleRadians)); 
    position.add(posObject); //add the position so it would be arround object 
    return position; 
} 
+0

ジンバルロックなしでこの回転をする必要があります。また、私は2つの角度を持っています。 AngleXおよびAngleY。ちなみに私の古いコードはこの – lacas

+0

と同じように見えるので、x = r sinθcosφ、 y = r sinθsinφ、 z = r cosθ – Hllink

関連する問題