在OpenGL中渲染透明块
Rendering Transparent Blocks in OpenGL
我正在用立方体渲染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);
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 了解 GLM- openGL 中的相机转换
- 如何在全屏模式下(在OpenGL中)使背景透明
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 在OpenGL中渲染透明块
- OpenGL - 深度缓冲区在渲染半透明立方体时剪切掉不应该剪切的面
- 通过使用alpha混合opengl实现具有透明背景的纹理
- 在OpenGL中部分透明的HUD风格覆盖层
- openGL中的完全透明对象
- 为什么使用OpenGL上下文创建的窗口会以透明方式打开
- Opengl透明立方体面
- Opengl C++:如何使纹理的某些部分透明
- 如何在OpenGL中分离不透明对象和透明对象
- OpenGL/GLFW看起来是透明的
- 在c++ / OpenGL中显示无边框透明背景上的图像
- OpenGL透明度是不透明的
- SDL OpenGL窗口不响应,透明
- OpenGL,将透明纹理与对象颜色混合
- 如何在OpenGL场景中绘制透明橡皮筋