`
xiehongdong
  • 浏览: 69194 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用Shader渲染图形

阅读更多
public class ShaderActivity extends Activity {
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        MyView myView = new MyView(this);
        
        setContentView(myView);
        
    }
    
    public class MyView extends View{
    	//声明BitMap对象
    	private Bitmap bitmap;
    	//声明位图渲染图像
    	private Shader bitmapShader;
    	//声明线性渲染对象
    	private Shader linerGradient;
    	//声明光束渲染对象
    	private Shader radialGradient;
    	//声明梯度渲染对象
    	private Shader sweepGradient;
    	//声明混合渲染对象
    	private Shader composeGradient;
    	
    	private Paint paint;
    	//声明颜色数组
    	private int[] colors;
    	private boolean isFrist = true;
		/**
		 * @param context
		 */
		public MyView(Context context) {
			super(context);
			//获得BitMap实例
	        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.openning);
	        //实例化画笔
	        paint = new Paint();
	        colors = new int[]{Color.RED,Color.GREEN,Color.BLUE};
	        
	        //实例化位图渲染对象,X坐标方向重复图形,	Y坐标方向镜像图形
	        bitmapShader = new BitmapShader(bitmap,TileMode.REPEAT,TileMode.MIRROR);
	        //实例化线性对象
	        linerGradient = new LinearGradient(0, 0, 100, 100, colors, null, TileMode.REPEAT);
	        //实例化光束
	        radialGradient = new RadialGradient(100,100,80,colors,null,TileMode.REPEAT);
	        //实例化梯度
	        sweepGradient = new SweepGradient(200,200,colors,null);
	        //实例化混合
	        composeGradient = new ComposeShader(linerGradient,radialGradient,PorterDuff.Mode.DARKEN);
	        
	        setFocusable(true);
		}
    	/* (non-Javadoc)
    	 * @see android.view.View#onDraw(android.graphics.Canvas)
    	 */
    	@Override
    	protected void onDraw(Canvas canvas) {
    		super.onDraw(canvas);
    		if(isFrist){
    			String content = "按上、下、左、右、中间键测试";
    			paint.setColor(Color.BLUE);
    			canvas.drawText(content, 0, content.length()-1, 20,20,paint);
    			
    		}else{
    			//全屏画矩形
    			canvas.drawRect(0, 0, getWidth(), getHeight(), paint);
    		}
    	}
    	
    	/* (non-Javadoc)
    	 * @see android.view.View#onKeyDown(int, android.view.KeyEvent)
    	 */
    	@Override
    	public boolean onKeyDown(int keyCode, KeyEvent event) {
    		isFrist = false;
    		if(keyCode == KeyEvent.KEYCODE_DPAD_UP){
    			paint.setShader(bitmapShader);
    		}
    		
    		if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){
    			paint.setShader(linerGradient);
    		}
    		
    		if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT){
    			paint.setShader(radialGradient);
    		}
    		
    		if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){
    			paint.setShader(sweepGradient);
    		}
    		
    		if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER){
    			paint.setShader(composeGradient);
    		}
    		//重绘界面
    		postInvalidate();
    		return super.onKeyDown(keyCode, event);
    	}
    }
}

 

分享到:
评论

相关推荐

    shader类渲染图形

    在Android平台上,Shader类是图形...不过,使用Shader需要一定的学习曲线,包括理解GLSL语法、图形渲染原理和性能优化策略。在实际开发中,结合Android提供的工具和库,可以更高效地利用Shader实现各种酷炫的图形效果。

    Paint的使用,Shader渲染器的使用

    Shader是Paint的一个重要组成部分,用于实现复杂的图形渲染效果,如线性渐变(LinearGradient)、径向渐变(RadialGradient)、位图着色(BitmapShader)和扫描渐变(SweepGradient)。 首先,我们来详细了解一下Paint类。...

    使用shader实现卡通渲染示例代码

    在本示例中,我们将探讨如何使用Shader实现卡通渲染。卡通渲染是一种非真实感渲染技术,它模拟了传统手绘动画的风格,通过简化光影、边缘强化和色彩对比来创造独特的视觉效果。 首先,我们需要了解HLSL(High-Level...

    ShaderForge 图形界面编辑shader工具源码

    ShaderForge是一款强大的图形界面工具,专为Unity游戏引擎设计,用于创建自定义着色器。它允许开发者通过直观的节点式界面,而非直接编写复杂的着色器代码,来构建和编辑着色效果。源码的提供意味着我们可以深入理解...

    android Shader类简介_渲染图像示例

    在Android开发中,Shader类是实现复杂图形渲染和图像效果的关键工具。Shader是OpenGL ES(OpenGL for Embedded Systems)的一部分,它允许开发者自定义顶点和片段处理,从而创建出丰富的2D和3D图形。本篇文章将对...

    shader渲染一个三角形

    Shader是OpenGL中的一个重要概念,它允许我们直接在GPU上执行计算,极大地提高了图形渲染的效率。本篇文章将深入探讨如何使用shader在OpenGL中渲染一个基本的三角形。 首先,我们需要理解OpenGL的工作流程。当我们...

    Shader渲染

    Shader渲染在Android应用开发中扮演着重要的角色,尤其是在自定义视图和图形处理方面。它允许开发者通过编程方式控制屏幕上的像素颜色,从而实现复杂的视觉效果。本篇将深入探讨BitmapShader、线性渐变以及梯度渐变...

    在OpenGL中使用Shader

    Shader是在OpenGL中实现复杂图形效果的关键工具,它允许开发者编写自己的渲染代码,以控制图形的着色过程。这篇资源是关于如何在现代OpenGL中使用Shader的实践教程,基于VS2015开发环境。 首先,了解Shader的基本...

    在Android端使用compute shader加速计算

    在Android平台上,使用Compute Shader可以显著提升计算密集型任务的执行效率,特别是在图形处理和物理模拟等场景。Compute Shader是OpenGL ES 3.0引入的一个重要特性,它允许开发者利用GPU进行并行计算,不再局限于...

    计算机图形学经典书籍资料-渲染部分

    计算机图形学渲染书籍: 1):Andrew Glassner 的An Introduction to Ray tracing (光线追踪) 2):Francois X. Sillion的Radiosity and Global Illumination(辐射度) 3):Ian Ashdown的Radiosity: A Programmer's ...

    Shader(着色器)是一种用于图形渲染的程序.docx

    Shader(着色器)是一种用于图形渲染的程序,它在图形处理单元(GPU)上执行,负责处理图形数据,如顶点、像素等,以实现复杂的视觉效果。以下是对Shader的详细介绍: 一、Shader的基本概念和分类 基本概念:Shader...

    计算机图形学opengl+shader几个实例

    通过这些实例,学习者可以深入了解OpenGL的顶点着色器、片段着色器、几何着色器等功能,以及如何使用Shader进行图形的高级渲染。同时,还可以掌握递归算法的应用、分形理论、纹理映射等计算机图形学的关键概念。对于...

    Android 中的图形图像的渲染

    本文将深入探讨Android中的图形图像渲染技术,包括基础概念、渲染流程、Shader(着色器)的应用以及如何利用工具进行优化。 首先,我们需要理解Android图形渲染的基本原理。Android使用SurfaceFlinger服务来管理...

    Deferred Shader延迟渲染的例子

    在"Deferred Shader延迟渲染的例子"中,我们看到的是基于DirectX 3D和HLSL(High-Level Shader Language)的一个实例。DirectX 3D是微软开发的一套API,用于处理3D图形和音频,而HLSL则是一种专门用于DirectX的着色...

    TypeScript图形渲染实战:基于WebGL的3D架构与实现_源代码+视频.zip

    在本资源中,"TypeScript图形渲染实战:基于WebGL的3D架构与实现",我们探讨了如何利用TypeScript这一强大的静态类型语言,结合WebGL技术,来构建高效的3D图形渲染应用。WebGL是一种JavaScript API,允许在浏览器中...

    shader使用

    总之,Shader的使用涉及OpenGL ES API、GLSL编程以及Android的图形渲染流程。熟练掌握Shader可以让你在Android平台上创建出更丰富、更动态的视觉效果。在 Lesson11-Graphics009-Shader 中,你将会看到具体示例,从...

    Unity Shader实现图形绘制(蓝天白云大海)

    开发者可以使用Unity Shader创建复杂的图形效果,提高游戏或应用程序的视觉效果。 9. 小结 本资源提供了一个完整的Unity Shader实现图形绘制的示例代码,涵盖了Shader的结构、Properties的定义、SubShader的定义、...

    unity内置渲染shader转urpshader工具

    2. **Surface Shaders**:Unity内置渲染管线和URP都支持Surface Shaders,但URP中的Surface Shader需要使用`SubShader`标签内的`UniversalSurfaceInput`结构体。转换工具会将旧的`Input`结构体替换为`...

    树叶的Shader风吹效果

    在Unity中,这通常涉及到两个主要方面:物理模拟和Shader渲染。 1. **物理模拟**: - 风力效果通常通过刚体(Rigidbody)组件和Force应用来实现。我们可以为树叶创建一个小型的刚体,并在风力源(如一个风力场或...

Global site tag (gtag.js) - Google Analytics