2016-04-10 33 views
0

我有问题。订单独立透明度

我已经分配静态顶点围绕一个领域 - 画他们为点

我画在每个透明纹理。例如。快报。

点的大小比较大,所以我会看到纹理。

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

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

例如,

enter image description here

白“文本”是一个4个顶点词,在第一次绘制。

红色的'文本'也是第4个顶点的单词。

由于深度测试红色没有完全绘制。

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

我已经做了一些研究,并且我遇到了OIT - Order独立透明。发现了很多文章和更少的例子。

但这不是问题。

我想了解它背后的逻辑。但我只是没有管理:( 我熟悉的混合,纹理,FBO,深度,.

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

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

+1

“*任何人都可以用”简单“的方式解释它吗?*”用简单的方式解释一下什么?你的问题是你正在使用混合和深度测试。 –

+0

解释OIT ..它是如何解决它的 –

+1

OIT意味着它说的是:顺序独立的透明度。透明度独立于渲染顺序。 OIT不是一件事;它不是你翻转的东西。这是*效果*。有许多技术可以实现OIT,就像有许多技术可以实现开花,世俗反射,色调映射等一样。所有OIT技术都不会被描述为“简单”。 –

回答

0

我知道这是旧的,但无论如何... 你应该看到if OIT is really necessary你想做什么。只是想在不透明的背景上绘制部分透明的条形文字,您可以避免将每个框架背对背排列广告牌,并使用“标准”alpha-blendi ng(glBlendEquation(GL_FUNC_ADD)和glBlendFunc(GL_ONE_MINUS_SRC_ALPHA,GL_SRC_ALPHA))。渲染透明对象时也关闭深度写入(glDepthMask(GL_FALSE)),但保持深度测试已启用(glEnable(GL_DEPTH_TEST))。