1

我正在尝试将 OpenGL 作为一种爱好来学习,为此,我正在尝试为游戏Minecraft(体素游戏)制作一个 mod,它添加了唯一渲染的块。

在游戏中,有使用四边形渲染的不透明和半透明块。至于正确渲染透明度,游戏先渲染不透明的块,然后再渲染按距离排序的半透明块。因此,它们被游戏单独分类,并由渲染引擎单独渲染为不同的“RenderLayers”

为了我的模组的目的,我创建了一个单独的渲染层,当不透明的块(如石头)被设置为渲染时,将使这些块半透明。此外,已经半透明的块将以相乘的方式变得更加半透明。这是通过使用应用于整个图层的片段着色器来完成的。

所以通常会像这样呈现的块:

原始渲染

分类到新的渲染层时像这样渲染。

修改后的渲染

如图所示,应用着色器后,现在半透明块后面的所有块都变得可见。然而,这不是我想要的行为。相反,我希望最初不透明的块遮挡同一渲染层中的其他块,就好像它们最初不是半透明的一样,尽管可以看到来自其他“正常”渲染层的块。此外,原本半透明的块仍然应该允许看到后面的相同渲染分层块。

从本质上讲,我想重新创建一个效果,如果他们将两张使用不同图层独立拍摄的照片合并在一起(其中一张不透明度较低)。

例如,对于上述情况,它会是这样的图片(普通层):

第 1 层

被这张图片(特殊层)覆盖,增加了透明度。

第 2 层

要做到这一点:

正确的

如您所见,虽然彩色玻璃后面的石头保留了色调,但最中间的石头后面的第二块石头没有显示在最终图片中。这是通过在 photoshop 中合并照片手动完成的,但这种“效果”是我对我的 mod 的渴望。

OpenGL怎么可能做到这一点?

澄清:

在上面的图像示例中,

  • 石块被归类为“特殊层”
  • 蓝色彩色玻璃块也被归类为“特殊层”
  • 周围的草块和黄色混凝土块是“正常”层的一部分
4

0 回答 0