ShaderJoy —— “Gamma校正”的实现 【GLSL】

举报
ShaderJoy 发表于 2021/12/29 23:18:59 2021/12/29
【摘要】 效果图   GLSL代码 算法比较简单,不再赘述,直接看源码和注释。 uniform sampler2D srcTex;uniform vec3 levels; /// Gamma 校正vec3 gammaCorrect(vec3 color, float gamma){ return pow(color, ...

效果图

 

GLSL代码

算法比较简单,不再赘述,直接看源码和注释。


  
  1. uniform sampler2D srcTex;
  2. uniform vec3 levels;
  3. /// Gamma 校正
  4. vec3 gammaCorrect(vec3 color, float gamma){
  5. return pow(color, vec3(1.0/gamma));
  6. }
  7. /// 对 color 进行重新映射到 min, max 之间
  8. vec3 levelRange(vec3 color, float minInput, float maxInput){
  9. return min(
  10. max(color - vec3(minInput), vec3(0.0)) / (vec3(maxInput) - vec3(minInput)),
  11. vec3(1.0));
  12. }
  13. vec3 finalLevels(vec3 color, float minInput, float gamma, float maxInput){
  14. return gammaCorrect(levelRange(color, minInput, maxInput), gamma);
  15. }
  16. void main(){
  17. vec2 uv = gl_FragCoord.xy / vec2(512., 512.);
  18. vec4 texture = texture2D(srcTex, uv) ;
  19. // 注意 minInput 和 maxInput 的取值范围为[0, 255]
  20. vec3 adjustedLevels = finalLevels(texture.rgb, levels.x/255.0, levels.y, levels.z/255.0);
  21. gl_FragColor = vec4(adjustedLevels,1.0);
  22. }

 

文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/52269462

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。