OpenGL中的完全透明圆环
Posted
技术标签:
【中文标题】OpenGL中的完全透明圆环【英文标题】:Fully transparent torus in OpenGL 【发布时间】:2014-10-17 10:05:15 【问题描述】:我有一个由 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;
我知道这个问题与订单有关。 我能做什么(但不知道什么会起作用):
-
为输入图像添加透明度(并找到加载此类图像的代码)。
在顶点着色器中做一些事情(见Fully transparent OpenGL model)。
排序可以解决我的问题,但如果我得到正确,我必须自己实现它。我必须找到每个三角形的中心(简单),用我的矩阵投影它并比较 z 值。
以某种方式改变混合和深度处理:
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);
我想写它不区分正面和背面的运动,但后来我意识到它们几乎是白色的,与白色混合没有任何区别。
带有彩色纹理的环面的新图像是:
剩下的问题是:
-
红点是蓝色的——和加载BMP的函数有关(没关系)
因为在输入图像中所有的光点大小相同,较大的光点应该在顶部,因此是饱和的,不会与圆环的白体混合。似乎顺序与应有的相反。如果将其与上一张图像进行比较,则外观上的大点被正确绘制,而小点被隐藏(圆环的背面)。
如何解决后一个问题?
【问题讨论】:
您是否尝试禁用深度测试? 既然你在玩 alpha,Order Independent Transparency 可能会对你有所帮助。 是的,它会对我有所帮助,但是快速搜索我认为我必须从头开始实现它,因为它不是 OpenGL 的一部分。我对么?是否有任何易于使用且易于合并到我现有代码中的库?最后,手动排序可能是最好的主意,因为我不需要实时处理。这是一个一次性项目,我做了不同类型的事情,但现在我需要将结果可视化。 是的,你是。我没有找到任何库,但如果您想从头开始构建,link 可能会对您有所帮助。 我看到了那个链接;它肯定会使用超过 50 行代码。还是谢谢。 【参考方案1】:通过禁用深度测试解决了第一个问题(请参阅问题中的更新)。
第二个问题通过手动排序所有三角形的数组来解决。即使实时处理 20000 个三角形,它也能很好地工作,这对我的目的来说已经绰绰有余了
生成的源代码:https://gist.github.com/juriad/80b522c856dbd00d529c
它基于 OpenGL 教程并使用包括:http://www.opengl-tutorial.org/download/。
【讨论】:
以上是关于OpenGL中的完全透明圆环的主要内容,如果未能解决你的问题,请参考以下文章