问题描述
我有一个纹理,我想将它绘制到一个 FrameBufferObject。纹理具有透明区域。我想要以下内容:
- 对于所有透明像素,让它们在 FrameBufferObject 中绘制为透明。
- 对于所有非透明像素,让它们使用我选择的颜色绘制,即纯红色(忽略它们的实际 rgb 值)
我在绘制纹理之前尝试过 Batch.setColor(red)
,但这只是给它着色 - 我希望将所有非透明像素绘制为纯红色。
我也想弄清楚如何直接在 opengl 中实现这一点,看起来可能有一种方法可以通过混合来做到这一点,然后可以将其关联回 gdx。
谢谢
解决方法
你需要写一个shader,shader就是渲染纹理的OpenGL程序。因此,您的着色器将在不更改的情况下渲染透明度,而其他所有颜色都将是您自己选择的颜色。
以下链接包含用于调色板交换的 libgdx 着色器,即在渲染时直接重新分配颜色,您可以轻松适应单一颜色和透明度。