[解決済み] ポイントルック アット ポイント
質問
3D空間に1点、3D空間にカメラの位置と回転があります。
つまり、基本的には
Vector3
をオブジェクトに追加します。
カメラ
Vector3
と
Quaternion
.
その点をどう見るか、が必要なんです。
そのポイントに移動する方法をユーザーに伝えたい。 カメラを左右どちらに向ければいいのか、それとも後ろに向ければいいのか。
どのように解決するのですか?
一つの方法として、現在カメラが向いている方向をヨー角(コンパスの方位のようなもの)として計算し、その点を見るために必要な方向を計算します。
一方を引き算して、その結果が-180度から180度(または-πからπラジアン)の範囲になるように調整し、その符号に基づいてユーザーに左折または右折を指示します。絶対値が120度(または設定可能な値)以上であれば、後ろであることを告げます。
カメラの現在の方位を知るには、ベクトル (0, 0, 1) をクォータニオンで変換して前方ベクトルを取得し、次のように方位を計算します。
atan2(forward.z, forward.x)
.
その点を見るために必要な方位を計算するには、その点から現在のカメラ位置を引いて、希望する前方ベクトルを求め、atanに渡します。
Vector3 desired_forward = point - camera_pos;
float desired_heading = atan2(desired_forward.z, desired_forward.x);
次に、必要な回転を求めます。
float rotation_needed = desired_heading - heading;
if(rotation_needed > Math.PI)
rotation_needed -= 2 * Math.PI;
if(rotation_needed < -Math.PI)
rotation_needed += 2 * Math.PI;
ここで、必要な回転の符号に基づいて、左回転または右回転を指示します。
ルックアップ/ダウンで行う場合は、まずXZ平面上の前方ベクトルの長さを計算し、再度atan2を使うことでピッチ角を計算することができます。
float xzLength = sqrt(forward.x * forward.x + forward.z * forward.z);
float pitch_angle = atan2(forward.y, xzLength);
希望する前方ベクトルについても同様に、希望する前方ベクトルから現在を引きます。上向きか下向きかを知らせるために、符号をチェックします。
ややこしいことになりそうなことがいくつかあります。例えば、カメラクォータニオンがワールド空間からカメラ空間への変換を指定するか、その逆を指定するかによって、計算されたカメラヘディングを否定する必要があるかもしれません。
関連
-
[解決済み】パックマン:主にどのようなヒューリスティックが使われているのですか?
-
[解決済み】クイックソートとヒープソートの比較
-
[解決済み] ビッグシータ記法の証明
-
[解決済み] グラフが半連結であるか否かを判定する
-
[解決済み] 与えられた数列の中に現れない最小の正の整数を求めよ。
-
[解決済み] あるアルゴリズムの計算量がO(log log n)になる原因は何でしょうか?
-
[解決済み] ゲーム「2048」の最適なアルゴリズムとは?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] 二分探索木におけるk番目の最小要素を最適な方法で探す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜO(n)はO( nlog(n) )よりも優れているのでしょうか?)
-
[解決済み] アルゴリズム設計マニュアル』の解答はどこにあるのですか?[終了しました]
-
[解決済み] クイックソートとヒープソートの比較
-
[解決済み] 最小スパニングツリーは負の重みを恐れているのか?
-
[解決済み] 素朴な」アルゴリズムとは何か、「閉じた」解とは何か?
-
[解決済み] Octave : ロジスティック回帰 : fmincg と fminunc の違い
-
[解決済み] 簡単:T(n)=T(n-1)+nを反復法で解く。
-
[解決済み] log(n!)=Θ(n-log(n))でしょうか?
-
[解決済み] 隣接リスト表現の時間複雑性?
-
[解決済み] 最小ボトルネックスパニングツリーと最小スパニングツリーはどう違うのですか?