我可以控制FX Composer中的绘制顺序吗?

时间:2011-03-10 19:03:14

标签: render shader nvidia cg

我正在使用Nvidia FX Composer编写一个半透明的CgFX着色器。一切都很好,期望在我的渲染视图中,场景背面的物体被绘制在我的阴影对象之上。

这是我的技术:

technique Main  {
    pass p0  
    {
        DepthTestEnable = true;
        DepthMask = false;
        CullFaceEnable = false;
        BlendEnable = true;
        BlendFunc = int2(SrcAlpha, OneMinusSrcAlpha);
        DepthFunc = LEqual;
        VertexProgram = compile vp40 std_VS();
        FragmentProgram = compile gp4fp std_PS();
    }
}

如果我打开DepthMask,那么后面的对象会被完全掩盖,这会破坏透明度的目的。看起来这些物体并没有被拉回到前面。有没有办法确认,我可以控制FX Composer的渲染器将项目绘制到屏幕的顺序吗?

1 个答案:

答案 0 :(得分:0)

这不能在着色器中完成,您需要使用它来更改应用程序。一般规则是首先绘制所有实体对象,然后绘制所有透明对象。

绘制透明对象后,无法在其后面渲染对象并期望它们被混合。 OpenGL可以渲染它,也可以不渲染它(由于z缓冲区剔除)。

绘制对象回到前面通常实在太昂贵,因为它需要每秒60次重新排序整个场景