最終更新: mikk_ni3_92 2009年06月22日(月) 18:44:18履歴
現在地 >> メニュー >> 基本編24
INDEX:基本編23 << 基本編24 >> 基本編25
OpenGLは、クライアント/サーバーモデルであり、ステートマシン(状態遷移機械)である。
例えば、「glEnable(GL_DEPTH_TEST)」はサーバ側のZバッファを「有効化の状態」にする命令である。
「glPushMatrix」や「glPopMatrix」が一時的に行列を退避するように、
サーバー側、クライアント側の状態を退避する事ができる。
例えば以下の例では「描画1」、「描画2」両方ともzバッファがOFFで描画される
【例】
つまり、最後の命令がずっと維持することになる。
そこで、状態の「push」、「pop」を行う事で、「描画1」だけが、ZバッファをOFFにする事ができる。
【例】
INDEX:基本編23 << 基本編24 >> 基本編25
OpenGLは、クライアント/サーバーモデルであり、ステートマシン(状態遷移機械)である。
例えば、「glEnable(GL_DEPTH_TEST)」はサーバ側のZバッファを「有効化の状態」にする命令である。
「glPushMatrix」や「glPopMatrix」が一時的に行列を退避するように、
サーバー側、クライアント側の状態を退避する事ができる。
- サーバー側の場合 → 「glPushAttrib」ー「glPushAttrib」
- クライアント側の場合 → 「glPushClientAttrib」ー「glPopClientAttrib」
例えば以下の例では「描画1」、「描画2」両方ともzバッファがOFFで描画される
【例】
glEnable(GL_DEPTH_TEST); //Zバッファ有効化 ... ... glDisable(GL_DEPTH_TEST);//Zバッファ無効化 glPushMatrix(); ... ... DRAW_TRI(); //描画 1 ZバッファOFFで描画される glPopMatrix(); ... ... DRAW_TRI();//描画 2 ここの描画もZバッファがOFF
つまり、最後の命令がずっと維持することになる。
そこで、状態の「push」、「pop」を行う事で、「描画1」だけが、ZバッファをOFFにする事ができる。
【例】
glEnable(GL_DEPTH_TEST); glPushAttrib(GL_DEPTH_BUFFER_BIT); //Zバッファのビットをpush glDisable(GL_DEPTH_TEST); glPushMatrix(); ... ... DRAW_TRI();//ここはZバッファOFF glPopMatrix(); glPopAttrib();//popする DRAW_TRI();//これはZバッファONで描画される
- 基本編24::まとめコード(サーバー側のpush、pop方法)
- 基本編24::まとめコード2?(クライアント側のpush,pop方法)