如何在 OpenGL 中反转纹理颜色
How to invert texture colours in 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 分别访问红色、绿色、蓝色和 alpha 值。
我正在写一个视力受损的游戏,为此我想反转颜色,所以白色是黑色等等......这听起来像你在做什么。我最终找到了这个可行的方法,并且不涉及着色器或修改纹理。但是它确实会破坏混合。所以我渲染到一个纹理缓冲区然后做
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);
}
我正在 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 分别访问红色、绿色、蓝色和 alpha 值。
我正在写一个视力受损的游戏,为此我想反转颜色,所以白色是黑色等等......这听起来像你在做什么。我最终找到了这个可行的方法,并且不涉及着色器或修改纹理。但是它确实会破坏混合。所以我渲染到一个纹理缓冲区然后做
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);
}