如何在OpenGL中反转纹理颜色

时间:2016-02-04 19:28:19

标签: c++ visual-studio opengl colors textures

所以我在OpenGL中对2D对象进行纹理处理,虽然我的纹理加载很好,但我还是不太确定如何反转颜色。如何访问位图的颜色信息并将其反转?这会在着色器或主程序中最好吗?

我离开这种打开方式,因为我没有找到"修复我的代码"答案的类型,而是"这是您访问位图的颜色信息的方式"。

谢谢!

3 个答案:

答案 0 :(得分:1)

简单如

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值。

答案 1 :(得分:0)

我正在写一个视力受损的游戏,为此我想要反转颜色,所以白色是黑色等......听起来就像你正在做的那样。我最终点击它有效,不涉及着色器或修改纹理。然而它确实杀死混合。所以我渲染到纹理缓冲区,然后执行

glLogicOp (GL_COPY_INVERTED);
glEnable (GL_COLOR_LOGIC_OP);

<bind to texture buffer and blit that>

glLogicOp (GL_COPY);
glDisable (GL_COLOR_LOGIC_OP);

答案 2 :(得分:0)

实际上,您必须在对纹理进行采样之前反转纹理坐标才能实现这一点。

所以,在片段着色器中:

vec2 vert_uv_New=vec2(1-vert_uv.x,1-vert_uv.y);

现在采样:

gl_FragColor=texture2D(sampler,vert_uv_New);

这将完成工作。