OpenGL - 将帧缓冲区纹理设置为完全透明

时间:2014-08-28 12:11:53

标签: c++ opengl framebuffer

我试图渲染一些文字,但此刻我分别渲染每个字形,这是缓慢而无效的。

因此我想更改系统,因此只要文本发生变化,文本就会被渲染成单独的纹理一次,然后该纹理应该在主渲染过程中在屏幕上呈现。

到目前为止一直很好,问题是,要把它画在主场景上,我只有两个选择。我可以将特定颜色(例如绿色)指定为'透明',用该颜色清除文本的帧缓冲区纹理,绘制文本并使用着色器将结果渲染到主场景上,减去透明的颜色。

虽然这样可行,但我不能再将该颜色用于实际文本了。

相反,我更完全清除帧缓冲区纹理的alpha(基本上是为了得到一个无色的空白板),然后绘制文本,但这似乎不可能?

glColorMask(GL_FALSE,GL_FALSE,GL_FALSE,GL_TRUE);
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT);

执行此操作只会将指定的rgb值应用为alpha' intensity'那些颜色。在这种情况下,它根本不会做任何事情,因为颜色组件被禁用。但我需要更改帧缓冲区中纹理的现有 alpha,而不使用glDrawPixels(这太慢了)。

现在,我当然可以编写一个额外的着色器来将每个片段的alpha值设置为0,但这看起来并不有效/快速。

处理这样的事情的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

  

到目前为止一直很好,问题是,要把它画在主场景上,我只有两个选择。我可以将特定颜色(例如绿色)指定为'透明',用该颜色清除文本的帧缓冲区纹理,绘制文本并使用着色器将结果渲染到主场景上,减去透明的颜色。

你过分复杂了整件事。如果将文本/字形渲染为仅具有单个通道的纹理,该纹理将用作Alpha通道,则会为您提供glphys形状。颜色以顶点属性的形式控制,并在渲染时与纹理中的alpha结合。

如果你想获得幻想,而不是将裸露的字形呈现给纹理,你可能想要生成一个带符号的距离场图,以节省纹理大小,同时保留高质量的文本输出。