現在地 >> メニュー >> 基本編04 >> 行列モード

次 >> 物体操作(アフィン変換)


3次元と行列


OpenGLやDirectXのように3次元を扱う場合、行列を考える必要がある。

例えば、
3次元空間の物体を2次元上のスクリーンに射影する時は、
「透視投影行列」を乗算する事で、スクリーンでの表示位置を計算する。

行列モード


視体積の設定、物体の移動などあらゆる面で行列がかかわってくる。

そこで、どの行列に対しての演算なのかを識別するために、
行列モードが存在し、OpenGLでは以下の4つがある。
  • GL_MODELVIEW (モデルビュー行列) → 物体の操作時に使う (デフォルト)
  • GL_PROJECTION (投影行列) → スクリーン、視体積などカメラの設定時に使う
  • GL_TEXTURE (テクスチャ行列) → テクスチャの操作時(移動、回転、など)に使う
  • GL_COLOR(色行列) → 色操作に使う(はず) ※OpenGL 1.2以上(ARB_imaging拡張が必要)


設定


次の関数で行列のモードを指定する。
glMatrixMode(GLenum mode);

この関数で指定した「行列」が今後の操作対象となる。

[例]
void reshape(int w, int h)
{
    glViewport(0, 0, w, h);
    
    glMatrixMode(GL_PROJECTION);  //視野の設定なのでモード切替
    glLoadIdentity();  //行列の初期化

    gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0); //視野の設定
    glMatrixMode(GL_MODELVIEW); //次は、物体描画(操作)なのでモード切り替え

}

注意点


行列モードを切り替える時は、
 切り替えた後に行列をクリアする必要がある。

その行列の初期化は、
glLoadIdentity();
で行う。
(※これによってメモリ上の4×4行列が単位行列に置き換わる)


次 >> 物体操作(アフィン変換)

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます