0

Nvidia FX Composer を使用して、半透明の CgFX シェーダーを作成しています。私のレンダー ビューでは、シーンの後ろにあるオブジェクトがシェーディングされたオブジェクトの上に描画されていることを期待してください。

これが私のテクニックです:

テクニック メイン {
    p0を渡す  
    {
        DepthTestEnable = true;
        DepthMask = false;
        CullFaceEnable = false;
        BlendEnable = true;
        BlendFunc = int2(SrcAlpha, OneMinusSrcAlpha);
        DepthFunc = LEqual;
        VertexProgram = コンパイル vp40 std_VS();
        FragmentProgram = コンパイル gp4fp std_PS();
    }
}

DepthMask をオンにすると、背面のオブジェクトが完全にマスクされ、透明性の目的が損なわれます。オブジェクトが前後に描かれていないようです。それを確認する方法はありますか?また、FX Composer のレンダラーが項目を画面に描画する順序を制御できますか?

4

1 に答える 1

0

これはシェーダー内では実行できません。それを使用するアプリケーションを変更する必要があります。一般的なルールは、すべてのソリッド オブジェクトを最初に描画し、次にすべての透明なオブジェクトをその上に描画することです。

透明なオブジェクトを描画したら、その背後にあるオブジェクトをレンダリングして、それらがブレンドされることを期待することはできません。OpenGL はそれをレンダリングすることも、レンダリングしないこともできます (Z バッファ カリングのため)。

オブジェクトを前後に描画するのは、通常、リアルタイムで行うにはコストがかかりすぎます。シーン全体を 1 秒間に 60 回並べ替える必要があるからです。

于 2011-03-10T19:17:41.140 に答える