【问题标题】:Incorrect Geometry When Enabling Alpha Blending启用 Alpha 混合时几何不正确
【发布时间】:2011-10-14 13:50:28
【问题描述】:

我有一个测试应用程序,它通过 Alpha 混合实现了启用透明度。该应用程序是使用 SlimDX 在 C# 中构建的。然而,在我的一个应用了 alpha 混合的对象上,我得到了一个奇怪的“缺失三角形”效果(见下文)。

物体几乎是一个圆柱体。

我想知道在 3D 计算机图形和/或 alpha 混合使用方面更有经验的人是否可以为我指出正确的方向,以便我理解这个结果 - 并希望将其删除。

编辑

我尝试使用与顺序无关的混合着色器,得到了相同的结果。由于深度测试失败,看起来好像像素/片段被丢弃了。这对我来说没有任何意义。

【问题讨论】:

    标签: c# 3d alphablending slimdx alpha-transparency


    【解决方案1】:

    您需要选择一个与顺序无关的混合函数,或者尝试沿视图轴对三角形进行排序(这是不可能的)。请在此处查看why

    编辑:

    问题在于 Z 缓冲区阻止 OpenGL 绘制位于已绘制对象后面的像素。总体来说还是挺方便的,但是前面的东西是半透明的,就需要看到后面的东西了。

    要获得正确的几何形状:

    • 将深度缓冲区设置为只读模式。
    • 选择与顺序无关的混合函数。

    【讨论】:

    • 你说不可能?你没用过 PowerVR 显卡吗?
    • 普通硬件上不可能。 PowerVR 显卡为每个片段存储一个三角形列表。
    • 混合在我正在渲染的其他模型上运行良好,就是这个。我一直在 PIX 中对其进行调试,它指出像素已被丢弃,因为它们未通过深度测试。
    • 我在 PIX 中进行了更多调试(在进行更改之前),并且我已经停止收到深度测试失败消息(不知道为什么)。我还刚刚发现将 SrcBlend 设置为 SrcAlpha(正如我所拥有的那样)并将 DestBlend 设置为 DestAlpha(它是 InvSrcAlpha),并将 ZBuffer 设置为只读可以消除我丢失片段的问题。不过我不明白这一点,我不认为它是一个完美的解决方案,因为我现在在一些地方有相当明亮的混合。
    • 我终于(或多或少)设法找到了解决我遇到的问题的方法。在发布这个问题时,我并没有完全理解这个问题。但是,多亏了这篇文章以及此后的一系列文章和论坛,我了解到您强调三角形的顺序错误是正确的。因此,实现与顺序无关的透明度算法是唯一可能的解决方案。感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多