2

我有一个带有透明四边形胡须的模型。我不知道哪些三角形属于胡须,因为它们的颜色来自传递给片段着色器的纹理。我曾尝试在模型导出期间将三角形重新排序到前面,但这无济于事。所以我实现了 MSAA 和 Alpha to Coverage,但这也没有帮助。我最后一次尝试是绘制模型,关闭深度蒙版并跳过任何透明数据,因此颜色缓冲区将具有不清晰的颜色值来混合。然后我会第二次绘制模型,并进行深度测试并绘制 alpha 片段。

到目前为止,我所尝试的一切都没有奏效。我可以尝试哪些其他技术来让模型的胡须正确绘制?我正在寻找一种不使用一堆扩展来处理这个问题的方法。我更喜欢可以用普通的旧 OpenGL 4 处理的技术。

这是我正在处理的图像。 在此处输入图像描述

这是我应用所选答案后得到的。 在此处输入图像描述

4

2 回答 2

3

您正在尝试做的还有一个很大程度上尚未解决的问题:订单独立透明度。MSAA 完全不同,alpha 覆盖率也是如此。

到目前为止,最好的解决方案是将模型分成不透明和毛茸茸的部分。首先绘制场景的不透明部分,然后绘制所有(半)半透明的,在第二遍中从远到近排序。

您的图像看起来像是首先呈现胡须的方式这与您实际想要的完全相反。

于 2013-09-09T22:31:06.050 回答
1

简单的方法:

  1. 启用深度写入(深度蒙版),禁用 alpha 混合,绘制没有胡须的模型。
  2. 禁用深度写入,启用 alpha 混合,绘制胡须。确保启用面部剔除。

艰辛的道路:

因为使用 z-buffer 的渲染器中与顺序无关的透明度是一个未解决的问题(如 datenwolf 所说),您可以尝试depth- peeling 。我相信这篇论文在 OpenGL SDK 中可用。很可能它会比“简单方式”慢,并且最大重叠透明多边形的数量会有限制。另请查看有关与订单无关的透明度的维基百科文章。

于 2013-09-09T22:59:01.737 回答