1

次のコードは、ステンシル テストを設定して、refがステンシル バッファーに格納されている値より大きいかどうかを確認し、大きい場合はステンシル バッファーに書き込みますref

unsigned int ref = 42;
glStencilFunc(GL_GREATER, ref, 0xFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);

問題は、ステンシル バッファを に対してテストしたいのですが、成功した場合は書きrefたくないので、まったく異なる値を書きたいということです。私が見つけた唯一のオプションは、の代わりになるものですが、ステンシルバッファに事前にクリアできないものがすでにたくさん書き込まれている場合、これはあまり役に立ちません。 refGL_INCRGL_REPLACE

42 がステンシル バッファに格納されている値よりも大きいかどうかをテストし、大きい場合は 100 などを書き込む方法はありますか?

4

1 に答える 1

4

この機能が標準の OpenGL で利用できるとは思えません。私が見つけた最も近いものは、ベンダー固有の拡張機能であるAMD_stencil_operation_extendedです。

これはまさにあなたが探しているものをサポートしています:

さらに、この拡張機能は、ステンシル操作のソースとして使用される値を参照値から分離し、ステンシル テストとステンシル バッファーの更新で異なる値を使用できるようにします。

val仕様を読むだけで、設定するステンシル値を使用して、呼び出しは次のようになります。

glStencilFunc(GL_GREATER, ref, 0xFF);
glStencilOpValueAMD(GL_FRONT_AND_BACK, val);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE_VALUE_AMD);
于 2015-09-22T13:29:46.563 に答える