如何在 OpenGL 中反转纹理颜色



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

我之所以保持这种开放状态,是因为我不是在寻找"修复我的代码"类型的答案,而是"这就是您访问位图颜色信息的方式"。

它很简单

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 分别访问红色、绿色、蓝色和字母值。

我正在写一个视力受损的游戏,为此我想反转颜色,所以白色就是黑色等等......这听起来像你在做什么。我最终找到了这个有效的方法,并且不涉及着色器或修改纹理。然而,它确实会杀死混合。所以我渲染到纹理缓冲区,然后做

glLogicOp (GL_COPY_INVERTED);
glEnable (GL_COLOR_LOGIC_OP);
<bind to texture buffer and blit that>
glLogicOp (GL_COPY);
glDisable (GL_COLOR_LOGIC_OP);

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

因此,在片段着色器中:

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

现在试一试:

gl_FragColor=texture2D(sampler,vert_uv_New);

这将完成这项工作。

precision mediump float;
uniform sampler2D u_tex;
varying vec2 v_texCoord;
void main()
{
    gl_FragColor = vec4(1,1,1,1) - texture2D(u_tex, v_texCoord);
}

最新更新