如何在OpenGL中反转纹理颜色

问题描述:

因此我在OpenGL中纹理2D对象,并且在加载纹理的同时,我只是不太确定如何反转颜色。如何访问位图的颜色信息并将其反转?这会在着色器或主程序中最好地完成吗?如何在OpenGL中反转纹理颜色

由于我不是在寻找“修复我的代码”类型的答案,而是“这是您如何访问位图的颜色信息”,因此我要离开这种开放。

谢谢!

+0

纹理格式在OpenGL是简单的C数组RGBRGB或RGBARGBA图案,所以,一旦加载 - 通过还原式改变它。其他的东西 - 你可以用着色器来计算它,但是它会花费更多。 – Starl1ght

+0

您可以首先上传倒置纹理,或者让片段着色器在读取它时反转它。 – immibis

+0

我建议您开始学习OpenGL核心配置文件。特别是,这在片段着色器中很重要。 –

以S简单

gl_FragColor = vec4(1.0 - textureColor.r,1.0 -textureColor.g,1.0 -textureColor.b,1) 最好是做这种事情在着色器,如果你想做一次,然后重复使用它未来的绘制只使用渲染纹理。这是进行颜色反转的最快方法。

编辑:您可以使用 vec4 textureColor =的Texture2D(uSampler,vTexCoords) 您这样gl_FragColor 之前使用.R,.G,.B和.A分别访问了红色,绿色,蓝色和alpha值。

+0

啊,这是有道理的!我将其添加到我的代码中,在这里和那里做了一些更改,瞧!谢谢!! – user5884993

我正在写一个视觉受损的游戏,为此我想反转颜色,所以白色是黑色等......这听起来像你在做什么。我最终击中了这个工程,并且不涉及着色器或修改纹理。但是它会杀死混合。因此,我渲染到纹理缓冲器中,然后做

glLogicOp (GL_COPY_INVERTED); 
glEnable (GL_COLOR_LOGIC_OP); 

<bind to texture buffer and blit that> 

glLogicOp (GL_COPY); 
glDisable (GL_COLOR_LOGIC_OP);