【发布时间】:2014-08-28 12:11:53
【问题描述】:
我正在尝试渲染一些文本,但目前我正在单独渲染每个字形,这既慢又无效。
因此我想改变系统,所以文本只是被渲染成一个单独的纹理一次,每当它改变时,然后该纹理应该在主渲染通道中渲染到屏幕上。
到目前为止一切顺利,但问题是,要将其绘制在主要场景上,我只有两个选择。我可以将特定颜色(例如绿色)指定为“透明”,使用该颜色清除文本的帧缓冲区纹理,绘制文本并随后使用着色器将结果渲染到主场景上,减去透明颜色。
虽然这样可行,但我无法再将那种颜色用于实际文本。
相反,我宁愿完全清除帧缓冲区纹理的 alpha(基本上得到无色、空白的石板)然后绘制文本,但这似乎不可能?
glColorMask(GL_FALSE,GL_FALSE,GL_FALSE,GL_TRUE);
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT);
这样做只会应用指定的 rgb 值和 alpha 作为这些颜色的“强度”。在这种情况下,它根本不会做任何事情,因为颜色组件被禁用。但我需要更改帧缓冲区中纹理的 现有 alpha,而不使用 glDrawPixels(太慢)。
现在,我当然可以编写一个额外的着色器来将每个片段的 alpha 值设置为 0,但这似乎并不那么有效/快速。
处理此类问题的最佳方法是什么?
【问题讨论】:
-
为什么需要清除 alpha?如果字形具有透明度,则应将其透明度值写入文本 FBO。
标签: c++ opengl framebuffer