【问题标题】:Can I control the draw order in FX Composer?我可以在 FX Composer 中控制绘制顺序吗?
【发布时间】:2011-03-11 03:51:21
【问题描述】:

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

这是我的技巧:

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

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

【问题讨论】:

  • 没有深度掩码没有深度缓冲技术不起作用。事实上,似乎对象在渲染之前没有进行深度排序。我不知道这是否可以教给 FxComposer。但是您可以在您的程序中执行此操作。

标签: render shader nvidia cg


【解决方案1】:

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

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

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

【讨论】:

  • 在这种情况下,使用着色器的应用程序是 FX Composer。我的问题是是否可以告诉 FX Composer 按从后到前的顺序渲染场景对象(至少是透明对象)。
猜你喜欢
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多