頭と尻尾はくれてやる!

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


OpenGLでカメラっぽいことを考えた

よく考えたらOpenGLでカメラが動くような場合にどうするんだろう?ってふと思ってさ。
ネットで調べてもどこもたいして重要な項目としては扱ってないんだ。カメラを動かそうがオブジェクトを動かそうが同じだ、modelViewMatrixでいいでしょ、みたいなことらしいんだけどさ。

とりあえず試してみたのよ。
あるオブジェクトのmodelViewMatrixを作ったとするよ。今までならGPUにこいつを渡すだけなんだけど、ここでカメラを考慮した行列(cameraViewMatirxとでもしておくよ)をかけあわせる。
各オブジェクトのmodelViewMatrixは当然位置や角度などが違うだろうからオブジェクトごとにあるけど、このcameraViewMatirxは当然全オブジェクトに対して同一のモノね。
{
    GLKMatrix4 cameraViewMatrix = GLKMatrix4Identity;

    cameraViewMatrix = GLKMatrix4Translate(cameraViewMatrix, cameraX, cameraY, cameraZ);//平行移動

    cameraViewMatrix = GLKMatrix4RotateX(cameraViewMatrix, cameraRotX);//回転
    cameraViewMatrix = GLKMatrix4RotateY(cameraViewMatrix, cameraRotY);
    cameraViewMatrix = GLKMatrix4RotateZ(cameraViewMatrix, cameraRotZ);

    modelViewMatrix = GLKMatrix4Multiply(cameraViewMatrix,modelViewMatrix);
}
各パラメータが何を指すかとか厳密なことは置いといて、、、
こんな感じでmodelViewMatrixを"修正”すれば今までのコードはほとんど修正しなくてもいいよね。
最初はカメラ用の行列をGPUに渡せるようにしないといけないのかなと思っていたし。

ちなみに平行移動の部分と回転の部分を前後入れ替えると見え方が変わる。


↑平行移動→回転の場合


↑回転→平行移動の場合

どちらもカメラが動いているようなものなので回転による遠心力なんかは当然ないよ。

とりあえずこんな感じで見た目の調整(全体を大きくするとか下にずらすとか)を行えるということがわかったよ。

<< iPhone 5sの加速度センサで距離の計測はできるか?  TopPage  Bulletでメッシュからsoft bodyを作る >>

コメント


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

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/900-8cb16c56




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

FC2Ad