1

うまくいけば簡単な答えですが、私はそれを得ることができません。

私が作成した 3D レンダリング エンジンがあります。

カメラの位置、lookat の位置、およびアップ ベクトルがあります。

カメラを上下左右に「傾ける」ことができるようにしたい。ハンドルをつかんで上下左右に傾けることができる、固定された三脚のカメラのように。

数学は私を困惑させます。前後のドリーと上下左右のパンニングはできましたが、ベクトル演算を計算して傾けることができません。

左右の傾きについては、カメラ位置を中心にルックアット位置を回転させたいのですが、アップ ベクトルを考慮する必要があります。

私が必要とする数学/アルゴリズムは...

Camera=(cx,cy,cz) Lookat=(lx,ly,lz) Up=(ux,uy,uz)

RotatePointAroundVector(lx,ly,lz,ux,uy,uz,amount)

関連する数学を手伝ってくれる人はいますか?

どうもありがとう。

4

3 に答える 3

2

カメラの前にポイントを作成し、それをカメラの周りで回転させ(trigを使用)、lookat()を使用してカメラを回転させることができます。

ロール(Zの周りの回転)の使用を開始する必要がある場合、これは機能しません。したがって、クォータニオンベースのカメラクラスを作成することをお勧めします。このリンクは私を助けました:gpwiki.org/Quaternion ...

于 2010-01-15T12:28:56.950 に答える
0

基本的に、カメラのローカル座標系を視覚化します。

ローカル Zはルックアット ベクトル (カメラの中心からルックアット ポイントまで) であり、「画面内」にあります。ローカル Yは画面の上方向になります。カメラのルックアット ベクトルに対してカメラのアップ ベクトルを垂直に維持すると、アップ ベクトルもローカル Yになります。ローカル Xは、他の 2 つの軸に対して垂直になります (これは、正規化後の外積です)。

左右の回転は、ルックアット ベクトルをローカル Y 軸 (ヨー) を中心に回転させることです。上下の回転は、ローカル X 軸 (ピッチ) を中心にアップ ベクトルとルックアット ベクトルを回転させることです。「頭を傾ける」左右は、ローカルZ軸(バンク)を中心にベクトルを上に回転させる問題です。

ルックアット ベクトルまたはアップ ベクトルを変更するたびに、ローカル軸を再計算する必要があります。

于 2010-06-14T01:09:42.840 に答える
0

数学的には最適ではないかもしれませんが、カメラのルックアット ベクトルを 3 つのベクトル (水平面を定義する 2 つとアップ ベクトル) に分解できます。

水平面を取得するには、アップ ベクトルとカメラ ツー ルックアット ベクトルの外積として 1 つのベクトルを取得できます。次に、up と見つかったばかりのベクトルの内積を取ることで、他の直交ベクトルを取得できます。3 つのベクトルを正規化することを忘れないでください。

次に、カメラの内積を 3 つのベクトルでルックアット ベクトルに取り、水平面を中心に回転させます (ベクトルを座標軸のように扱います)。

全部言葉にしてすみません。これが役立つことを願っています。

于 2010-01-15T03:46:55.880 に答える