我有一个由OpenGL渲染的圆环,可以映射纹理;只要纹理不透明就没有问题。但是当我在片段着色器中使颜色选择性透明时,它不起作用。或者更确切地说:它可以工作,但仅在某些区域,取决于顶点缓冲区中三角形的顺序;看到外赤道的差异。 圆环应均匀覆盖斑点。
源图像将是png,但是现在我使用bmp,因为它更容易加载(纹理加载函数是教程的一部分)。 图像上有白色背景和不同颜色的斑点;它不透明。 期望的结果是具有斑点的几乎透明的圆环。必须看到前侧和后侧的两个点。 渲染将在离线状态下完成,因此我不需要速度;我只需要从其表面的图像生成环面图像。
到目前为止,我的代码看起来像这样(它是两个例子的合并): https://gist.github.com/juriad/ba66f7184d12c5a29e84
片段着色器是:
#version 330 core
// Interpolated values from the vertex shaders
in vec2 UV;
// Ouput data
out vec4 color;
// Values that stay constant for the whole mesh.
uniform sampler2D myTextureSampler;
void main(){
// Output color = color of the texture at the specified UV
color.rgb = texture2D( myTextureSampler, UV ).rgb;
if (color.r == 1 && color.g == 1 && color.b == 1) {
color.a = 0.2;
} else {
color.a = 1;
}
}
我知道这个问题与订单有关。 我能做什么(但不知道什么会起作用):
以某种方式改变混合和深度处理:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LEQUAL);
glDepthRange(0.0f, 1.0f);
我需要一个建议,如何继续。
更新,这几乎解决了这个问题:
glDisable(GL_DEPTH_TEST);
//glDepthMask(GL_TRUE);
glDepthFunc(GL_NEVER);
//glDepthRange(0.0f, 1.0f);
我想写一下,它并没有区分前后运动,但后来我发现它们几乎是白色的,与白色混合并没有什么不同。
具有彩色纹理的圆环新图像是:
剩下的问题是:
如何修复后者?
答案 0 :(得分:0)
第一个问题是通过禁用深度测试来解决的(请参阅问题中的更新)。
通过手动排序所有三角形的数组来解决第二个问题。它甚至可以在20000个三角形中实时工作,这对我来说已经足够了
生成的源代码:https://gist.github.com/juriad/80b522c856dbd00d529c
它基于并使用来自OpenGL教程的内容:http://www.opengl-tutorial.org/download/。