最終更新: mikk_ni3_92 2008年07月16日(水) 18:33:11履歴
現在地 >> メニュー >> 基本編04 >> 複数の物体操作
次 >> まとめコード::基本編04 >> 基本編05
複数の物体を操作する時は注意が必要である。
例えば、
のように記述した場合、
描画物Aは
という事であり、一方描画物Bは
と等しい。
つまり、
複数の物体にそれぞれ独立してアフィン変換したい場合は、
「一時的に現在の行列の状態を退避させる」
と必要がある。
― やり方 ―
[例]
これによって、
描画物Aは並行移動のみ、
描画物Bは回転のみ
の操作となる。
次 >> まとめコード::基本編04 >> 基本編05
次 >> まとめコード::基本編04 >> 基本編05
複数の物体を操作する時は注意が必要である。
例えば、
void display() { ... ... glTranslated(1,0,0); [描画物A] glRoteted(45,0,1,0); [描画物B] ... ... }
のように記述した場合、
描画物Aは
glTranslated(1,0,0); [描画物A]
という事であり、一方描画物Bは
glTranslated(1,0,0); glRoteted(45,0,1,0); [描画物B]
と等しい。
つまり、
何も設定しなければ、アフィン変換は描画した物体すべてに影響するという事である。
複数の物体にそれぞれ独立してアフィン変換したい場合は、
「一時的に現在の行列の状態を退避させる」
と必要がある。
― やり方 ―
- glPushMatrix()で行列の退避
- アフィン変換
- 物体描画
- glPopMatrix()で行列を元にもどす
[例]
void display() { ... ... glPushMatrix(); //行列退避 glTranslated(1,0,0); [描画物A] glPopMatrix(); //行列を戻す glPushMatrix(); //行列退避 glRoteted(45,0,1,0); [描画物B] glPopMatrix();//行列を戻す ... ... }
これによって、
描画物Aは並行移動のみ、
描画物Bは回転のみ
の操作となる。
次 >> まとめコード::基本編04 >> 基本編05