Android 颜色渲染(三) Shader颜色渲染

转载自:http://blog.csdn.net/t12x3456/article/details/10418901


相信看过在上一篇中提到的三篇文章后,大家已经对颜色处理方面有更深的体会.    

   之前讲到颜色渐变的效果, 具体怎么做呢,这就需要应用颜色渲染. 首先要介绍Android Api中关于颜色渲染的几个重要的类:

   Shader,BitmapShader,ComposeShader,LinearGradient,RadialGradient,SweepGradient

看一下它们之间的关系:

 


 public class Shader extends Object 
该类作为基类主要是返回绘制时颜色的横向跨度。其子类可以作用与Piant。通过 paint.setShader(Shader shader);来实现一些渲染效果。之作用与图形不作用与bitmap。
构造方法为默认的构造方法。  


枚举: 
emun Shader.TileMode 


定义了平铺的3种模式: 
static final Shader.TileMode CLAMP: 边缘拉伸.


static final Shader.TileMode MIRROR:在水平方向和垂直方向交替景象, 两个相邻图像间没有缝隙.


Static final Shader.TillMode REPETA:在水平方向和垂直方向重复摆放,两个相邻图像间有缝隙缝隙.
 


 
方法: 
1. boolean getLoaclMatrix(Matrix localM); 如果shader有一个非本地的矩阵将返回true.
    localM:如果不为null将被设置为shader的本地矩阵.
2. void setLocalMatrix(Matrix localM); 

    设置shader的本地矩阵,如果localM为空将重置shader的本地矩阵。  


Shader的直接子类:

BitmapShader    : 位图图像渲染

LinearGradient  : 线性渲染

RadialGradient  : 环形渲染

SweepGradient   : 扫描渐变渲染/梯度渲染

ComposeShader   : 组合渲染,可以和其他几个子类组合起来使用

是不是很像Animation及其子类的关系(AlphaAnimation,RotateAnimation,ScaleAnimation,TranslateAnimation, AnimationSet)

既有具体的渲染效果,也有渲染效果的组合


下面说下Shader的使用步骤:

1. 构建Shader对象

2. 通过Paint的setShader方法设置渲染对象

3.设置渲染对象

4.绘制时使用这个Paint对象


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio中,要渲染Shader(着色器),首先你需要了解它是如何工作的。Shader是一种程序,通常编写在GLSL(OpenGL Shading Language)语言中,用于控制图形的绘制过程,比如颜色、纹理和光照等。以下是在Android中使用Shader的基本步骤: 1. **创建Shader文件**:在res/shader目录下创建一个新的GLSL文件,例如 vertex_shader.glsl 和 fragment_shader.glsl(顶点着色器和片段着色器通常是配对使用的)。 2. **编写Shader代码**:在这些文件中分别编写你的顶点着色器(处理几何变换)和片段着色器(处理像素颜色)。例如,你可以设置颜色混合、纹理映射等操作。 3. **加载Shader对象**:在Android应用的Activity中,通过` GLES20.GL_VERTEX_SHADER`和` GLES20.GL_FRAGMENT_SHADER`创建`ShaderProgram`对象。需要读取shader源文件并创建对应的`Shader`实例。 ```java String vertexSource = readFromFile("vertex_shader.glsl"); int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexSource); String fragmentSource = readFromFile("fragment_shader.glsl"); int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentSource); ShaderProgram program = new ShaderProgram(vertexShader, fragmentShader); ``` 4. **连接Shader和Program**:将两个Shader链接成一个ShaderProgram,并获取编译后的ID。 5. **检查Shader状态**:检查Shader是否成功编译,如果有错误,需要处理异常。 6. **使用Shader**:在`onDraw()`方法中,设置Shader作为当前使用的着色器,然后调用`glUseProgram()`启用它,再进行渲染操作。 ```java program.use(); // 然后绘制几何数据... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值