2017-02-07 37 views
0

3DシーンでThree.jsカメラのrotation.y値に関連する2Dオブジェクト(GTAスタイルミニマップオーバーレイで)を回転しようとしています。Three.js camera.rotation.yから360度への変換

camera.rotation.yの値から返されるラジアンは、0> -1.4ラジアンから最初の45度まで、-1.4> 0ラジアンから90度、0> 1.4まで270度までのラジアン、および360度までの1.4ラジアンを含む。

誰もがこれらの値を360コインに変換または変換する方法を知っていますか?

私はPerspectiveCameraとOrbitControlsを使用しています。

ありがとうございます!

+0

'camera.rotation.order = 'YXZ' を設定してみてください;'と行動はあなたに、より直感的であるかどうかを確認します。あなたのユースケースに応じて、PIからPIまで実行できます。 – WestLangley

+0

ありがとう@WestLangley、それは必要なすべてだったことが判明!多くのありがとう(y) –

+0

私はそれ以上の説明と答えを掲示した。 – WestLangley

答えて

1

これは、四元数の回転からの変換に関連していると思います。次の例が正しいかどうかは確かではありませんが、解決策を見つけるのに役立つかもしれません。

const euler = new THREE.Euler(); 
const rotation = euler.setFromQuaternion(camera.quaternion); 
const radians = rotation.z > 0 
    ? rotation.z 
    : (2 * Math.PI) + rotation.z; 
const degrees = THREE.Math.radToDeg(radians); 

これは、0から360までの値を有するdegreesになるが、カメラが回転する角度の値は、一貫性のない速度で変化するように見えます。ここで

は、この動作を示しcodepenです:

http://codepen.io/kevanstannard/pen/NdOvoO/

私は、次の質問からいくつかの詳細を使用:に基づいて

three.js perspectivecamera current angle in degrees

編集#1

@WestLangleyからの答えは私の答えですオベが正しくないので、ちょうど改善を文書化するために、ここでは西のソリューションに基づいていくつかのコードです:

// Set Y to be the heading of the camera 
camera.rotation.order = 'YXZ'; 

そして

const heading = camera.rotation.y; 
const radians = heading > 0 ? heading : (2 * Math.PI) + heading; 
const degrees = THREE.Math.radToDeg(radians); 

、より良いcodepen

http://codepen.io/kevanstannard/pen/YNJgXd

+0

返事ありがとうございますが、私が何をしているのかよく分かりません。問題は前述のcamera.rotation.yから返されたラジアン値です。したがって、私がパンすると完全な0> 360度の範囲に変換されませんカメラ。 カメラが完全なループ(0> -140> 0> 140> 0ラジアン)で0> -90> 0> 90> 0度に変換されます。 。 誰でも手伝いできますか? –

+0

@DavidTidman申し訳ありませんが、私は質問を誤解しました。私は答えを改訂しました。うまくいけば、それはあなたを解決につなげるのに役立ちます。 –

+0

ありがとうございます!それは完全に機能します。さて、クォータニオンとユーラーを見て、その仕組みを見てみましょう。多くのあなたの助けに感謝! –

1

camera.rotationあなたはhere in the three.js docs for THREE.Object3D(の基本クラスです)を読むことができるので、いわゆるEuler angleですクラス)。 オイラーの角度から特定の軸への角度を直接取得することはできません。角度はオイラーの順序によって決まるからです。

1

はあなたに多くの意味を行います

camera.rotation.order = "YXZ" 

(デフォルトは「XYZ」)オイラー角を設定した場合:カメラはラジアン単位で

rotation.yがされます

rotation.xは、カメラのピッチをラジアンで表します。

カメラロールはラジアンで表示されます

この順番で回転が適用されます。

詳細については、this stackoverflow answerを参照してください。

three.js r.84

+0

これは完全に機能しました。多くのありがとう@WestLangley! –

関連する問題