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

↑こういう感じのVRアプリを今作ってるんだけど、当然FPSみたいに自分の目から見たような画像が表示されてる。このゲーム、障害物との衝突でGame Overになるんだけど、その時の様子を理解するために、自分から少し離れたところから自分を見た画像が欲しいと思ったのよ。
ロボット(自分)から離れたところにカメラがあって、ロボットの方をカメラが向くわけだけど、この時のカメラの姿勢はどうやって求める?ってお話。
カメラの姿勢はクォータニオンでもマトリックスでもいいんだけどクォータニオンでいうなら GLKQuaternionIdentity での姿勢でカメラが (0,0,-1)方向を向いてるとして、ロボットが(xr,yr,zr)って方向にあるとして、この二つのベクトルからクォータニオンを求めたらいいんじゃね?そういや、前にやったよな。ってことで自分専用フレームワークのコードを使って画面右側に別視点からの画像を表示させてみたら、、、

↑そうだよな、そうなるよな。傾くかもしれないよな(右の画像ね)。参考までにコードのベースはこちら↓
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。

↑空と陸の境目が平らになったよね。
動画だとこんな感じ↓。
チェック用に画面右側に別の視点からの画像を表示するのはできた。これをGame Over時に動画として表示させたいんだがメモリやら処理速度が大丈夫か、、、? #gamedev pic.twitter.com/0813YSpC1s
— Tatsuya (@yt) 2016年8月25日
ひとまずめでたし、めでたし。
スポンサーサイト
<< Metalで描画したものを後で動画として表示する TopPage 三角形の内外判定 >>
トラックバック
トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1029-1cf5e171
https://ringsbell.blog.fc2.com/tb.php/1029-1cf5e171