基于Qt的OpenGL可编程管线学习(16)- 柔光、强光、叠加
1、柔光
shader
//柔光uniformsampler2DU_MainTexture;uniformsampler2DU_SubTexture;varyingvec2M_coord;voidmain(){vec4blendColor=texture2D(U_SubTexture,M_coord);vec4baseColor=texture2D(U_MainTexture,M_coord);gl_FragColor=2.0*blendColor*baseColor+baseColor*baseColor-2.0*baseColor*baseColor*blendColor;}
效果图
2、强光
shader
//强光uniformsampler2DU_MainTexture;uniformsampler2DU_SubTexture;varyingvec2M_coord;voidmain(){vec4blendColor=texture2D(U_SubTexture,M_coord);vec4baseColor=texture2D(U_MainTexture,M_coord);vec3lumCoeff=vec3(0.2125,0.7154,0.0721);floatluminance=dot(blendColor.rgb,lumCoeff);if(luminance<0.45){gl_FragColor=2.0*blendColor*baseColor;}elseif(luminance>0.55){gl_FragColor=vec4(1.0)-2.0*(vec4(1.0)-baseColor)*(vec4(1.0)-blendColor);}else{vec4color1=2.0*blendColor*baseColor;;vec4color2=vec4(1.0)-2.0*(vec4(1.0)-baseColor)*(vec4(1.0)-blendColor);gl_FragColor=mix(color1,color2,(luminance-0.45)*10.0);}}
效果图
3、叠加
shader
//叠加uniformsampler2DU_MainTexture;uniformsampler2DU_SubTexture;varyingvec2M_coord;voidmain(){vec4blendColor=texture2D(U_SubTexture,M_coord);vec4baseColor=texture2D(U_MainTexture,M_coord);vec3lumCoeff=vec3(0.2125,0.7154,0.0721);floatluminance=dot(baseColor.rgb,lumCoeff);if(luminance<0.45){gl_FragColor=2.0*blendColor*baseColor;}elseif(luminance>0.55){gl_FragColor=vec4(1.0)-2.0*(vec4(1.0)-baseColor)*(vec4(1.0)-blendColor);}else{vec4color1=2.0*blendColor*baseColor;;vec4color2=vec4(1.0)-2.0*(vec4(1.0)-baseColor)*(vec4(1.0)-blendColor);gl_FragColor=mix(color1,color2,(luminance-0.45)*10.0);}}
效果图
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。