C# 启用Alpha混合时几何体不正确

C# 启用Alpha混合时几何体不正确,c#,3d,alphablending,slimdx,alpha-transparency,C#,3d,Alphablending,Slimdx,Alpha Transparency,我有一个通过alpha混合实现透明的测试应用程序。该应用程序是使用SlimDX在C中构建的。然而,在我的一个应用了alpha混合的对象上,我得到了一个奇怪的“缺失三角形”效果,见下文 这个物体几乎是一个圆柱体 我想知道是否有人在3D计算机图形学和/或alpha混合的使用方面更有经验,能够为我指出正确的方向,这样我就可以理解这个结果,并希望能将其删除 编辑 我尝试使用顺序无关的混合着色器,得到了相同的结果。由于深度测试失败,像素/碎片似乎被丢弃。这对我来说没有任何意义。您需要选择顺序独立的混合函数

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

这个物体几乎是一个圆柱体

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

编辑


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

您需要选择顺序独立的混合函数,或者尝试沿视图轴对三角形进行排序,这是不可能的。看这里

编辑:

问题是Z缓冲区阻止OpenGL绘制位于已绘制内容后面的像素。一般来说,这很方便,但是当前面的东西是半透明的时,你需要看到后面的东西

要获得正确的外观几何图形,请执行以下操作:

将深度缓冲区设置为只读模式。 选择与订单无关的混合函数。
你说不可能?您从未使用过PowerVR图形卡吗?在普通硬件上不可能。图形卡存储每个片段的三角形列表。混合在我正在渲染的其他模型上效果很好,就是这个。我一直在PIX中调试它,它表明像素已被丢弃,因为它们未通过深度测试。在进行更改之前,我一直在PIX中调试更多像素,并且我已停止接收深度测试失败消息,不确定原因。我还发现,将SrcBlend设置为SrcAlpha,将DestBlend设置为DestAlpha,这是InvSrcAlpha,将ZBuffer设置为只读,可以消除缺少的片段问题。虽然我不明白这一点,但我不认为这是一个完美的解决方案,因为我现在有相当明亮的混合在一些地方。我最终或多或少地设法找到了解决问题的办法。在发布这个问题时,我并没有完全理解这个问题。然而,多亏了这篇文章以及此后的一系列文章和论坛,我才知道你强调三角形顺序错误是正确的。因此,实现与顺序无关的透明算法是唯一可能的解决方案。谢谢你的回答。