2009-06-14 20 views
1

私は、OpenGLで(Java、LWJGL、およびjMEを使用して)さまざまな軸でカメラの回転を取得しようとしています。カメラオブジェクトを使用すると、Vector3fとして方向を取得できますが、これはコンポーネント化された回転を得るためには機能しません。各軸は別の軸に結びついているように見えます。私はtoAngleAxisがオフセット付きの角度成分で素早くハックされているが、ほとんどの状況では適切に動作しないことを発見しました。私は残念なことに数学ではあまり良くありません。そうでなければ、私はこの問題を解決することができました:)もう一度、0ラジアンから2 PIラジアンまでX、Y、Z軸がコンポーネント化され、ラジアンだけ必要です。OpenGLのX軸、Y軸、Z軸のカメラ回転をラジアンで取得しますか?

誰でも手助けできますか?回転天使を取得予め

乾杯と感謝、 クリス

答えて

1

だけ球座標にデカルト座標で与えられたビュー・ベクトルを変換する必要があります。数式はwikipediaです。

viewvector = <x, y, z> 

r = sqrt(x² + y² + z²) 
phi = arctan2(y, x) 
theta = arccos(z/r) 

ビューベクトルから2つの回転天体しか取得できないことに注意してください。第3の回転角度を得るには、投影面xまたはy軸を知る必要がある。

+0

ビューの基準点とビュー平面が通常必要ですか? –

+0

私はhttp://www.fsz.bme.hu/~coll/papers/applets/doc/images/world3D.cameras.Camera3D.Image01.gifで便利な画像を見つけました。投影面XまたはY軸はこれに関連していますか? yアップまたはzアップ座標系でVector3fを使用するのと同じくらい簡単ですか? 乾杯してください –

+0

これは、変換する必要があるビュー平面です。また、ビュー方向を中心にカメラを回転させるロール角を決定するには、ビュー平面のx軸とy軸(多くの場合、上方向ベクトルと右方向ベクトル)が必要です。 http://techpubs.sgi.com/library/dynaweb_docs/0620/SGI_Developer/books/Perf_PG/sgi_html/figures/04.4.plane.rotation.gif –

3

オイラー角、ヨーイング/ピッチ/ロール、クォータニオンの向きについて読むことをお勧めします。これらのトピックは、関連するすべてを理解するのに役立ちます。正しく理解すれば、指定した方向からオイラー角を作成しようとしています。

オイラー角の操作についてはcode for some algorithmsを参照してください。特に、私はあなたが望むのは、setDirectionメソッドだと信じています。

これにより、方向ベクトルからヨーとピッチが得られます。ただし、「ロール」は方向ベクトル(または単一の四元数回転として指定された方向)についての回転を必要とするため、2回転だけ必要です。

+0

残念なことに、私はsetRotationメソッドを使用できません - 他のシステムがありますカメラに作用し、保持されたカメラの回転を変換する必要があります。また、これらのシステムは、カメラの前進ベクトルを乗算して前進させるなどの作業を単純に行います。 –

+1

実際の計算が必要なので、私はsetRotation()を指摘していました。 )、ピッチとヨーを得る方法(それを作るための2つの回転)。実際に回転を「設定」する必要はありません。これは、回転を検出する方法を提供します。 –

関連する問題