6
glViewport(x(), y(), width(), height());

glDisable(GL_DEPTH_TEST);

glClearColor(0, 0.3, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);

//... drawing commands

描画は、ウィンドウの小さな領域で正しく行われています。glViewport(x(), y(), width(), height())

ただし、glClearColor() によって設定された背景色は、glViewport() の呼び出し後に設定されているにもかかわらず、ウィンドウ全体に影響を与えています。なんで?

4

2 に答える 2

12

側面glClear:

ピクセル所有権テスト、シザー テスト、ディザリング、およびバッファ ライトマスクは、 の動作に影響しますglClear

ただし、次のようにglViewport述べています。

glViewport正規化されたデバイス座標からウィンドウ座標への x と y のアフィン変換を指定します。

参考文献を正しく読めば、これは仕様によるものです。glViewportビューポートをオフセットするだけで、プリミティブをラスタライズするドローコールに影響を与えますが、glClearフレームバッファ領域全体で機能します。

完全な仕様 (4.3) はそれに同意しているようです:

§17.4.3 GL は、特定のバッファ内のすべてのピクセルの一部を同じ値に設定する手段を提供します。

于 2013-09-16T14:37:36.730 に答える
3

小さな領域のみをクリーンアップしたい場合は、GL_SCISSOR_TEST を有効にする必要があります。次のコードを試してください。これが役に立てば幸いです。

glEnable(GL_SCISSOR_TEST);
glScissor(100, 100, 100, 100);
glClearColor(1, 1, 0, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable(GL_SCISSOR_TEST);
于 2021-11-03T04:01:54.403 に答える