在OpenGL中渲染透明块

Rendering Transparent Blocks in OpenGL

本文关键字:透明 OpenGL      更新时间:2023-10-16

我正在用立方体渲染3D地形,我需要透明地渲染水。

经过一些研究,我的解决方案是将立方体水分离到一个缓冲区,将固体块分离到另一个缓冲区时,然后在我的碎片着色器中,我使用:

uniform float transparency;

在我的渲染代码中:

shader.setFloat("transparency", 1.0f);
glBindVertexArray(solidVAO);
glDrawArrays(GL_TRIANGLES, 0, solidPoints.size());
shader.setFloat("transparency", 0.3f);
glBindVertexArray(transparentVAO);
glDrawArrays(GL_TRIANGLES, 0, transparentPoints.size());

然后在我的Fragment Shader 中

out vec4 FragColor;
in vec2 TexCoord;
// texture sampler
uniform sampler2D atlas;
uniform float transparency;
void main()
{
FragColor = texture(atlas, TexCoord);
FragColor.w = transparency;
}

然而,水仍然是固体的,有更好的方法在固体面前绘制透明形状吗?或者,这里出了什么问题?

您还需要为透明形状设置混合模式:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);