我正在使用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的渲染器将项目绘制到屏幕的顺序吗?
答案 0 :(得分:0)
这不能在着色器中完成,您需要使用它来更改应用程序。一般规则是首先绘制所有实体对象,然后绘制所有透明对象。
绘制透明对象后,无法在其后面渲染对象并期望它们被混合。 OpenGL可以渲染它,也可以不渲染它(由于z缓冲区剔除)。
绘制对象回到前面通常实在太昂贵,因为它需要每秒60次重新排序整个场景!