问题描述
我正在尝试将 OpenGL 作为一种爱好来学习,为此,我正在尝试为游戏 minecraft(一个体素游戏)制作一个 mod,它添加了独特渲染的块。
在游戏中,不透明块和半透明块都用四边形渲染。为了正确渲染透明,游戏首先渲染不透明块,然后渲染按距离排序的半透明块。因此,它们被游戏单独分类,并被渲染引擎单独渲染为不同的“RenderLayers”
为了我的模组,我创建了一个单独的渲染层,当不透明块(如石头)被设置为渲染时,将使这些块半透明。此外,已经半透明的块将以乘法的方式变得更加半透明。这是通过使用应用于整个图层的片段着色器来完成的。
通常会像这样渲染的块:
当分类到新的渲染层时像这样渲染。
如图所示,应用着色器后,现在半透明块后面的所有块都变得可见。然而,这不是我想要的行为。相反,我希望最初不透明的块遮挡同一渲染层中的其他块,就好像它们一开始就不是半透明的一样,尽管可以看到来自其他“正常”渲染层的块。而且,原本半透明的块应该仍然可以看到后面的相同渲染层的块。
从本质上讲,我想重现将两张不同图层独立拍摄的照片(其中一张不透明度较低)合并后会得到的效果。
比如上面的情况,会是这张图(普通图层):
做到这一点:
如您所见,虽然彩色玻璃后面的石头保留了色调,但最中间的石头后面的第二个石块并未显示在最终图片中。这是通过在 photoshop 中合并照片手动完成的,但这种“效果”正是我想要的。
这怎么可能用 OpenGL 实现?
澄清:
在上面的图片示例中,
- 石块被归入“特殊层”
- 蓝色的彩色玻璃块也被归类为“特殊层”
- 周围的草块和黄色混凝土块是“正常”层的一部分
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)