所以我在OpenGL中对2D对象进行纹理处理,虽然我的纹理加载很好,但我还是不太确定如何反转颜色。如何访问位图的颜色信息并将其反转?这会在着色器或主程序中最好吗?
我离开这种打开方式,因为我没有找到"修复我的代码"答案的类型,而是"这是您访问位图的颜色信息的方式"。
谢谢!
答案 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);
这将完成工作。