ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

指定した点を見る角度を求める

ゲームプログラマになる前に覚えておきたい技術に載っていた方法。ただし、そのままではなくちょっと変えている。
基準はZ軸プラス方向。そこからどのくらい回転すれば良いかを求めている。

vector target; // 目的の位置
float ax; // x軸回転角度(首を上げる角度)
float ay; // y軸回転角度(体を回す角度)

// まず見上げる角度を求める
float xzDistance = sqrt( target.x*target.x + target.z*target.z );
ax = atan2( target.y, xzDistance );

// 次にその方向へ向く角度を求める
ay = atan2( target.x, target.z );

順番としては目的の高さまで見上げてから、目的の方向へ向く。まずx軸回転をしてから、次にy軸回転を行う。先にy軸回転をしてしまうと見上げるための回転軸がx軸ではなくなってしまうので計算が面倒になる。
この方法では上下方向が常にy軸と等しい場合のみ。首を傾けているような場合には使えない。


21日追記
ふと思ったのだが、見る角度というよりも、指定した点に移動する角度といったほうがいいかもしれない。