如何使用WebGL / OpenGLES进行透明化 - 透明外部对象*封闭*内部对象

时间:2010-09-11 03:33:41

标签: opengl-es transparency webgl

我正在尝试使用WebGL制定透明度策略,以支持封装另一个透明对象的情况。

正如http://learningwebgl.com/blog/?p=859所述,概念上我们可以

  1. 渲染背景
  2. 启用混合并禁用深度测试
  3. 渲染前景
  4. 我在这里有点天真,我很欣赏经验丰富的图形专业人士让我说得对。传统上(使用固定功能管道),我想我会将这些对象分解为面部列表,对它们进行深度排序,然后按照从远到接的顺序渲染它们,同时在每个面上启用/禁用混合/深度。

    但是在这种情况下如何使用WebGL进行透明化,我们将整个几何体作为单片VBO加载到GPU上?

    任何人都有任何技术提示或链接?

    欢呼声, 林赛

2 个答案:

答案 0 :(得分:0)

我不是专家,但我可以告诉你,你可以先渲染所有不透明模型(并启动,使用不支持alpha的着色器),然后渲染透明模型(启用透明度的着色器) 。此解决方案需要您“查看z-order”模型,因为您需要先渲染更远的模型。

这个解决方案有一个巨大的缺陷:双面透明模型效果不佳。

答案 1 :(得分:0)

据我所知,你必须将你的封闭模型拆分成单独的VBO部分并对这些部分进行深度排序。这些部分不必是单独的面 - 只要小到足以使每个部分不同时位于封闭对象的前面和后面。

正如Chiguireitor所指出的那样,可以先绘制任何不透明的东西,但必须对透明度进行排序(或严格使用加法或减法混合)。