以下是我如何设置透明度的方法:
glEnable(GLenum(GL_DEPTH_TEST)) glEnable(GLenum(GL_POINT_SIZE)); glEnable(GLenum(GL_BLEND)) glBlendFunc(GLenum(GL_SRC_ALPHA), GLenum(GL_ONE_MINUS_SRC_ALPHA)) glEnable(GLenum(GL_POINT_SMOOTH))
这不是透明度的工作方式.OpenGL不是场景图,它只是按照您指定的顺序绘制几何图形.如果您绘制的第一件事是红色圆圈,它们将与背景混合.一旦绘制出红色圆圈"后面"的东西,由于深度测试,"隐藏"部分将被简单地丢弃.OpenGL(或任何其他基于深度测试的算法)无法自动对不同深度层进行排序并适当地混合它们.
您要做的是订单独立透明度,这仍然是如何有效解决问题的研究中的问题.
对于你想要达到的目标,你必须:
将几何体分类到远近,然后按顺序绘制
渲染时禁用深度测试