2

障害物セットが厳密にカメラとテスト対象オブジェクトの間にあることが先験的にわかっている場合、デプス テストを完全に無効にしてもオクルージョン クエリは機能しますか? これは、パフォーマンスを向上させるための試みです。論理的には、オクルーダーがオクルーディーの背後にない場合、複雑な z テストは必要ありません。

次のコマンドを使用して、色/深度/ステンシル バッファーを初期化しています。

SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 0);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 0);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 0);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1);
...
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);

glDisable(GL_CULL_FACE);

glDisable(GL_DEPTH_TEST);
glDepthMask(GL_FALSE);

glEnable(GL_STENCIL_TEST);
glStencilMask(0x00000001);
...
glClear(GL_STENCIL_BUFFER_BIT);
4

2 に答える 2

1

www.opengl.org/registry/specs/ARB/occlusion_query.txtから

この拡張機能は、[HP_occlusion_test] の問題の両方を解決します。深度テストとステンシル テストに合格したサンプルの数を結果として返します。

...

パイプラインのどの段階でサンプルを数えているのでしょうか?

解決済み:深度テストとステンシル テストの両方の直後、つまり両方に合格したサンプルをカウントしています。深さテストはステンシル テストの後に来ることに注意してください。つまり、深さテストに合格した数で十分であると言えます。ただし、深度テストの結果は使用されるステンシル操作に影響を与えるため、深度テストとステンシル テストを組み合わせて考えることが概念的に役立つことがよくあります。

www.opengl.org/registry/specs/ARB/occlusion_query2.txtから

この拡張機能は、単純にブール オクルージョン クエリをARB_occlusion_query

深度テストをオフにすると、すべてのフラグメントがパスすると思います。上記から、オクルージョン クエリの結果に影響を与えるステンシル テストだけに頼ることができるように思えます。

ステンシル テスト、アルファ テスト、またはフラグメント シェーダーの破棄は、クエリとは無関係です

拡張子には言及されていませんdiscardGL 4.5コア/互換仕様のオクルージョン クエリ セクションでは、深度テストに合格したフラグメントのカウントについてのみ言及しています。フラグメントが深さテストに到達しない場合、合格とは見なされないと思います。

少し余談ですが、初期のフラグメントテストについても言及する価値があると思います。

于 2014-10-17T03:19:39.523 に答える