頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


ベクトル二つでカメラ姿勢を決めるのは不十分

スクショ1

↑こういう感じのVRアプリを今作ってるんだけど、当然FPSみたいに自分の目から見たような画像が表示されてる。このゲーム、障害物との衝突でGame Overになるんだけど、その時の様子を理解するために、自分から少し離れたところから自分を見た画像が欲しいと思ったのよ。
ロボット(自分)から離れたところにカメラがあって、ロボットの方をカメラが向くわけだけど、この時のカメラの姿勢はどうやって求める?ってお話。

カメラの姿勢はクォータニオンでもマトリックスでもいいんだけどクォータニオンでいうなら GLKQuaternionIdentity での姿勢でカメラが (0,0,-1)方向を向いてるとして、ロボットが(xr,yr,zr)って方向にあるとして、この二つのベクトルからクォータニオンを求めたらいいんじゃね?そういや、前にやったよな。ってことで自分専用フレームワークのコードを使って画面右側に別視点からの画像を表示させてみたら、、、

スクショ2

↑そうだよな、そうなるよな。傾くかもしれないよな(右の画像ね)。参考までにコードのベースはこちら↓
math - Finding quaternion representing the rotation from one vector to another - Stack Overflow

カメラの向きをちゃんと指定しないとダメだよな、そういやそういうのGLKitにあったんじゃね?
と思って調べたらあったよ!
GLKMatrix4MakeLookAt
ですわ。かすかに覚えていた自分を褒めてあげたい。

これでカメラの上方向を指定して、、、

{
        GLKMatrix4 matrix = GLKMatrix4MakeLookAt(
                                            camera.x, camera.y, camera.z, //eye
                                            robot.x, robot.y, robot.z, // lookAt
                                            0.0, 1.0, 0.0);
}
てな感じでマトリックスを得るとOK。

スクショ3

↑空と陸の境目が平らになったよね。

動画だとこんな感じ↓。



ひとまずめでたし、めでたし。

<< Metalで描画したものを後で動画として表示する  TopPage  三角形の内外判定 >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1029-1cf5e171




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad