現在地 >> メニュー >> 基本編24
INDEX:基本編23 << 基本編24 >> 基本編25


基本編24 (OpenGLのクライアント/サーバーの状態のプッシュとポップ)


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で描画される


サンプルコード


目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

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