最終更新: mikk_ni3_92 2008年07月16日(水) 18:30:46履歴
現在地 >> メニュー >> 基本編04 >> 行列モード
次 >> 物体操作(アフィン変換)
OpenGLやDirectXのように3次元を扱う場合、行列を考える必要がある。
例えば、
3次元空間の物体を2次元上のスクリーンに射影する時は、
「透視投影行列」を乗算する事で、スクリーンでの表示位置を計算する。
視体積の設定、物体の移動などあらゆる面で行列がかかわってくる。
そこで、どの行列に対しての演算なのかを識別するために、
行列モードが存在し、OpenGLでは以下の4つがある。
次の関数で行列のモードを指定する。
この関数で指定した「行列」が今後の操作対象となる。
[例]
行列モードを切り替える時は、
切り替えた後に行列をクリアする必要がある。
その行列の初期化は、
(※これによってメモリ上の4×4行列が単位行列に置き換わる)
次 >> 物体操作(アフィン変換)
次 >> 物体操作(アフィン変換)
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行列が単位行列に置き換わる)
次 >> 物体操作(アフィン変換)