« 球の描画2 | メイン | 海外でどれくらい売れたか(現状役立たない数値) »

2011年06月17日

3D プログラミング:: カメラの回転1

    

中心位置のオブジェクトの周りをくるくる回る簡単なカメラ
簡単。

// 以下をメンバ変数に
float mRotate= 0.0f;
static final float ROT_VAL = (float) (Math.PI/20.0); // 1フレームの回転量
static final float ROT_RADIUS = 100.0f; // カメラの距離

// 三角関数で毎回計算する
float x = (float) (Math.cos(mRotate) * ROT_RADIUS);
float z = (float) (Math.sin(mRotate) * ROT_RADIUS);
mRotate += ROT_VAL;
glu.gluLookAt(x, 0.0, z, 0.0,0.0,0.0, 0.0,1.0,0.0);


// 加法定理を使うのなら以下のようになる
// 以下をメンバ変数に
float mAccSin= 0.0f;
float mAccCos= 0.0f;
float mSumSin= 0.0f;
float mSumCos= 0.0f;
static final float ROT_VAL = (float) (Math.PI/20.0); // 1フレームの回転量
static final float ROT_RADIUS = 100.0f; // カメラの距離

// 以下の処理をフレームごとに実行する。
float tmp = mAccCos * mSumCos - mAccSin * mSumSin;
mSumSin = mAccSin * mSumCos + mAccCos * mSumSin;
mSumCos = tmp;
float x = (float) (mSumCos * ROT_RADIUS);
float z = (float) (mSumSin * ROT_RADIUS);
glu.gluLookAt(x, 0.0, z, 0.0,0.0,0.0, 0.0,1.0,0.0);

ゲームなどで上下にカメラを振る場合はこれではダメで、上下に振るカメラ位置の横軸を中心に回転させる必要があるので、クォータニオンで回転させるのが手軽。



投稿者 Takenori : 2011年06月17日 21:24




comments powered by Disqus
Total : Today : Yesterday : なかのひと