0

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

这是我的技术:

技术主要{
    通过 p0  
    {
        深度测试启用 = 真;
        深度掩码 = 假;
        CullFaceEnable = 假;
        混合启用 = 真;
        BlendFunc = int2(SrcAlpha, OneMinusSrcAlpha);
        DepthFunc = LEqual;
        VertexProgram = 编译 vp40 std_VS();
        FragmentProgram = 编译 gp4fp std_PS();
    }
}

如果我打开 DepthMask,那么后面的对象会被完全掩盖,这违背了透明的目的。似乎对象没有被从后到前绘制。有没有办法确认这一点,我可以控制 FX Composer 的渲染器将项目绘制到屏幕上的顺序吗?

4

1 回答 1

0

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

一旦你绘制了一个透明对象,你就不能在它后面渲染对象并期望它们被混合。OpenGL 可以渲染它,也可以不渲染它(由于 z 缓冲区剔除)。

将对象从后向前绘制通常太昂贵而无法实时进行,因为它需要每秒对整个场景重新排序60 次!

于 2011-03-10T19:17:41.140 回答