订购独立透明度

时间:2016-04-10 13:20:31

标签: 3d webgl

我遇到了问题。

我在球体周围有许多静态顶点 - 将它们绘制为点

我正在绘制一个每个都有透明度的纹理。例如。字母。

点大小相对较大,所以我会看到纹理。

用户可以更改摄像机角度,滚动,倾斜和在全球范围内移动。

问题在于,当在其他点之后绘制点时,由于深度测试,它可能不会被渲染。但由于我的透明度纹理,它阻止了正确绘制点。

对于前。

enter image description here

白色'文字'是首先绘制的4个顶点字。

红色'文字'也是第二个绘制的4个顶点字。

由于深度测试,红色未完全绘制。

对于由于太大量顶点而渲染的每个帧,排序效率不高。

我做了一些关于它的研究,我遇到了OIT - 订单独立透明度。找到了很多文章和少数例子。

但这不是问题。

我正在努力理解它背后的逻辑。但我只是不管理:( 我熟悉混合,纹理,fbo,深度,。

我意识到有一些不同的算法使它工作,一些单通和一些多通

任何人都可以用“简单”的方式解释它吗?它会帮助我吗?

1 个答案:

答案 0 :(得分:0)

我知道这是旧的,但无论如何...... 您应该看到if OIT is really necessary想要做什么。如果您只想在不透明的背景上绘制部分透明的广告牌文本,您可以使用“标准”alpha混合(glBlendEquation(GL_FUNC_ADD)和glBlendFunc(GL_ONE_MINUS_SRC_ALPHA,GL_SRC_ALPHA)对每个帧的广告牌进行前后排序并进行渲染。 ))。渲染透明对象时也要关闭深度写入(glDepthMask(GL_FALSE)),但要保持深度测试的启用(glEnable(GL_DEPTH_TEST))。