OpenGL:透明纹理问题
OpenGL: Transparent texture issue
我在 OpenGL 中遇到纹理透明度问题。正如您在下图中所看到的,它并不完全有效。值得注意的是,黑色实际上是ClearColor,我用来清屏。
我使用以下代码实现混合:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
这是我的片段着色器:
#version 330 core
in vec2 tex_coords;
out vec4 color;
uniform vec4 spritecolor;
uniform sampler2D image;
void main(void)
{
color = spritecolor * texture(image, tex_coords);
}
以下是线框模式下的场景截图,希望对绘制顶点有帮助:
如果还有什么需要的,尽管问,我会添加。
你必须做一个Transparency Sorting
如果绘制场景,通常深度测试(glDepthFunc
)设置为GL_LESS
。这会导致片段仅在它们位于到目前为止绘制的场景前面时才被绘制。
要正确绘制透明物体,您必须先绘制不透明物体。透明物体必须在之后绘制,按到相机的反向距离排序 position.To 正确绘制透明物体,你必须先绘制不透明物体。之后必须绘制透明物体,按到相机位置的反向距离排序。
先绘制透明物体,它与相机位置的距离最大,最后绘制透明物体,与相机位置的距离最小。
另请参阅以下问题的答案:
- OpenGL depth sorting
- opengl z-sorting transparency
- Fully transparent OpenGL model
我在 OpenGL 中遇到纹理透明度问题。正如您在下图中所看到的,它并不完全有效。值得注意的是,黑色实际上是ClearColor,我用来清屏。
我使用以下代码实现混合:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
这是我的片段着色器:
#version 330 core
in vec2 tex_coords;
out vec4 color;
uniform vec4 spritecolor;
uniform sampler2D image;
void main(void)
{
color = spritecolor * texture(image, tex_coords);
}
以下是线框模式下的场景截图,希望对绘制顶点有帮助:
如果还有什么需要的,尽管问,我会添加。
你必须做一个Transparency Sorting
如果绘制场景,通常深度测试(glDepthFunc
)设置为GL_LESS
。这会导致片段仅在它们位于到目前为止绘制的场景前面时才被绘制。
要正确绘制透明物体,您必须先绘制不透明物体。透明物体必须在之后绘制,按到相机的反向距离排序 position.To 正确绘制透明物体,你必须先绘制不透明物体。之后必须绘制透明物体,按到相机位置的反向距离排序。
先绘制透明物体,它与相机位置的距离最大,最后绘制透明物体,与相机位置的距离最小。
另请参阅以下问题的答案:
- OpenGL depth sorting
- opengl z-sorting transparency
- Fully transparent OpenGL model