在 OpenGL 中渲染透明块

Posted

技术标签:

【中文标题】在 OpenGL 中渲染透明块【英文标题】:Rendering Transparent Blocks in OpenGL 【发布时间】:2018-08-01 20:57:02 【问题描述】:

我正在用立方体渲染 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());

然后在我的片段着色器中

out vec4 FragColor;

in vec2 TexCoord;

// texture sampler
uniform sampler2D atlas;
uniform float transparency;

void main()

    FragColor = texture(atlas, TexCoord);
    FragColor.w = transparency;

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于在 OpenGL 中渲染透明块的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL - 在附加层下渲染透明度

渲染具有透明度的纹理时 OpenGL 不需要的像素

Opengl 透明部分被渲染为黑色

OpenGL渲染到纹理透明度问题

在 OpenGL 中重用纹理和顶点

OpenGL透明纹理问题