ちょっとOpenGLをごにょごにょといじっておりまして、カメラの移動と回転を行う為の式を作ったのでメモ。だらだら書くけど実際には関数にするとかしたほうがよいでしょう。
動かすのはカメラ。Openglなので glulookat()を使う。
引数の前から順番に
glaex
glaey
glaez
glacx
glacy
glacz
glaux
glauy
glauz
とする。上向きの指定である後ろ3つ及び各y座標の変更は行わない。
A は回転量、_A は回転量の累計。
// 前に移動する。移動 後ろと左右は_Aの値を適当に変えてやる。
glaex = sin((_A-180)*M_PI/180) + glaex;
glaez = cos((_A-180)*M_PI/180) + glaez;
glacx = sin((_A-180)*M_PI/180) + glacx;
glacz = cos((_A-180)*M_PI/180) + glacz;
// 左に回転する。右回転は-AをAとする。
glacx = (glacx - glaex) * cos(-A*M_PI/180) - (glacz - glaez) * sin(-A*M_PI/180) + glaex;<
glacz = (glacx - glaex) * sin(-A*M_PI/180) + (glacz - glaez) * cos(-A*M_PI/180) + glaez;<
_A = _A + A;<
ただ、回転時に結構誤差が出る様だ。計算式はあってるはずだが・・・ とりあえずメモということで。
Sponsored Link
コメント