与OpenGL进行alpha混合的最佳方法是什么?

时间:2010-06-28 21:02:53

标签: c++ c opengl

我正在绘制2D多边形,实际上我绘制了很多三角形并使用了GLUOrtho2D。我注意到通过缩小我得到了更好的帧速率。我意识到我最大限度地提高了显卡的填充率,而不是像我最初怀疑的那样绘制了太多的多边形。我认为这是因为我绘制了大量重叠的多边形并使用

glEnable(GL_BLEND);

    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

这是我应该使用的混合功能吗?考虑到我正在做的事情的性质,我怎么能最小化填充?我尝试启用GL_DEPTH_TEST和Z命令我的多边形,但由于我进行了alpha混合,这无济于事。做这种事最有效的方法是什么?

由于

3 个答案:

答案 0 :(得分:3)

我怀疑使用不同的混合功能会有所帮助。人们通常会根据所需的输出选择正确的混合功能,而不是性能。

您呈现的所有多边形是透明/半透明的吗?如果没有,可能有助于将那些除了不透明多边形之外的渲染分开,并相应地设置正确的GL状态。

这些纹理多边形也是?您可以优化纹理处理(例如:减少上下文切换,使用更高效的图像格式等)。

最后,你是如何渲染这些三角形的?如果处于立即模式或使用顶点数组,请考虑使用VBO。

答案 1 :(得分:2)

避免在尽可能多的三角形上进行alpha混合。它加起来,是的,它真的很贵。没有神奇的高性能混合功能。

唯一的解决方案是“使用更少的混合和更多的z缓冲”

答案 2 :(得分:0)

更改混合函数只会导致混合系数的变化,但不会导致等式变化。 无论如何,现代视频卡不使用硬编码方程。您可以尝试编写满足您需求的pixel shader

顺便说一下,如果你还没有,可以考虑使用VBO为你的“很多三角形”。