OpenGL之图片色彩处理(三)

本文介绍了使用OpenGL进行图片色彩处理的步骤,包括编写顶点和片元着色器、图像绘制类,以及配置和绘制环境。详细讲解了glsl语言在顶点和片元着色器中的应用,并提到了ShaderUtils工具类在加载着色器程序中的作用,以及如何在SGLView和Activity中实现渲染。
摘要由CSDN通过智能技术生成

一、OpenGL图片绘制的一般步骤:

    1、编写顶点着色器和片元着色器;

    2、编写需要绘制的图形类,包括:加载着色器脚本内容,加载图片数据,图片绘制;

    3、配置绘制环境,绘制图片。

二、具体如下:

   1、 编写顶点着色器程序(glsl语言):

attribute vec4 vPosition;
attribute vec2 vCoordinate;//纹理数据
uniform mat4 vMatrix;
//给片元传递数据(纹理,变换前的顶点,变换后的顶点)
varying vec2 aCoordinate;
varying vec4 aPos;
varying vec4 gPosition;

void main(){
    gl_Position=vMatrix*vPosition;
    aPos=vPosition;
    aCoordinate=vCoordinate;
    gPosition=vMatrix*vPosition;
}

  2、 编写片元着色器程序(glsl语言):

precision mediump float;

uniform sampler2D vTexture;
uniform int vChangeType;
uniform vec3 vChangeColor;
uniform int vIsHalf;
uniform float uXY;

//给片元传递的数据(纹理数据,变换前顶点,变换后顶点)
varying vec2 aCoordinate;
varying vec4 aPos;
varying vec4 gPosition;

//修改颜色(防止颜色值超过一)
void modifyColor(vec4 color){
     color.r=max(min(color.r,1.0),0.0);
     color.g=max(min(color.g,1.0),0.0);
     color.b=max(min(color.b,1.0),0.0);
     color.a=max(min(color.a,1.0),0.0);
 }
void main() {
   vec4 nColor=texture2D(vTexture,aCoordinate);
   if(aPos.x>0.0 || vIsHalf == 0){
        if(vChangeType==1){
            //浮点算法     Gray=R * 0.3+G * 0.59+B * 0.114
            float gray=(nColor.r*0.3+nColor.g*0.59+nColor.b*0.114);
            gl_FragColor=vec4(gray,gray,gray,nColor.a);
        }else if(vChangeType==2){
            vec4 colorWarm=nColor+vec4(0.1,0.1,0.0,0.0);
            modifyColor(colorWarm);
            gl_FragColor=colorWarm;
        }else if(vChangeType==3){
            vec4 colorCold=nColor+vec4(0.0,0.0,0.1,0.0);
            modifyColor(colorCold);
            gl_FragColor=colorCold;
        }else if(vChangeType==4){
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值