【Android开发学习11】Android OpenGL ES 颜色

基础知识:

1.平滑着色(Smooth coloring):

  将多个顶点的不同颜色混合在一起,创建出漂亮的色彩混合。


2.单调着色:
  给图形涂上一种固定单一的颜色。


3.三角形定义的颜色数组(平滑着色):

	int one = 0x10000;
	//三角形的顶点颜色值(r,g,b,a)
	private IntBuffer colorBuffer = IntBuffer.wrap(new int[]{
		one,0,0,one,
		0,one,0,one,
		0,0,one,one,
	});

	// 开启颜色渲染功能.
	gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

	// 设置三角形顶点的颜色
	gl.glColorPointer(4, GL10.GL_FIXED, 0, colorBuffer);

	//关闭颜色渲染功能.
	gl.glDisableClientState(GL10.GL_COLOR_ARRAY);


4.正方形定义的颜色数组(单调着色):

	/* 渲染正方形 */
	// 设置当前色为蓝色
	gl.glColor4f(1.0f, 0.5f, 1.0f, 1.0f);



代码编辑:

【Activity01.java】

package com.yarin.android.Examples_12_02;

import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.os.Bundle;

public class Activity01 extends Activity
{
	Renderer render = new GLRender();
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);

		GLSurfaceView glView = new GLSurfaceView(this);
		
		glView.setRenderer(render);
		setContentView(glView);
	}
}


【GLRender.java】

package com.yarin.android.Examples_12_02;

import java.nio.IntBuffer;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.opengl.GLSurfaceView.Renderer;

public class GLRender implements Renderer
{
	 int one = 0x10000;
		
	 //三角形三个顶点
	 private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{
			0,one,0,		//上顶点
			-one,-one,0,    //坐下点
			one,-one,0,});  //右下点
	 //正方形的4个顶点
	 private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{
				one,one,0,
				-one,one,0,
				one,-one,0,
				-one,-one,0});
	 
	 //三角形的顶点颜色值(r,g,b,a)
	 private IntBuffer colorBuffer = IntBuffer.wrap(new int[]{
			 one,0,0,one,
			 0,one,0,one,
			 0,0,one,one,
	 });
	@Override
	public void onDrawFrame(GL10 gl)
	{
		// 清除屏幕和深度缓存
		gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
		// 重置当前的模型观察矩阵
		gl.glLoadIdentity();
		
		// 左移 1.5 单位,并移入屏幕 6.0
		gl.glTranslatef(-1.5f, 0.0f, -6.0f);
		
		//设置定点数组
		gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
		//设置颜色数组 -- 开启颜色渲染功能.
		gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
		// 设置三角形顶点的颜色
		gl.glColorPointer(4, GL10.GL_FIXED, 0, colorBuffer);
		// 设置三角形顶点
		gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer);
		//绘制三角形
		gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
		//关闭颜色数组 -- 关闭颜色渲染功能.
		gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
		
		/* 渲染正方形 */
		// 设置当前色为蓝色
	    gl.glColor4f(1.0f, 0.5f, 1.0f, 1.0f);
	    
		// 重置当前的模型观察矩阵
	    gl.glLoadIdentity();
	    
	    // 左移 1.5 单位,并移入屏幕 6.0
	    gl.glTranslatef(1.5f, 0.0f, -6.0f);
	    //设置和绘制正方形
	    gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer);
	    gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

	    //取消顶点数组
	    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
	    
	}

	@Override
	public void onSurfaceChanged(GL10 gl, int width, int height)
	{
		// TODO Auto-generated method stub
		float ratio = (float) width / height;
		//设置OpenGL场景的大小
		gl.glViewport(0, 0, width, height);
		//设置投影矩阵
		gl.glMatrixMode(GL10.GL_PROJECTION);
		//重置投影矩阵
		gl.glLoadIdentity();
		// 设置视口的大小
		gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
		// 选择模型观察矩阵
		gl.glMatrixMode(GL10.GL_MODELVIEW);	
		// 重置模型观察矩阵
		gl.glLoadIdentity();	
	}

	@Override
	public void onSurfaceCreated(GL10 gl, EGLConfig config)
	{
		// 启用阴影平滑
		gl.glShadeModel(GL10.GL_SMOOTH);
		
		// 黑色背景
		gl.glClearColor(0, 0, 0, 0);
		
		// 设置深度缓存
		gl.glClearDepthf(1.0f);							
		// 启用深度测试
		gl.glEnable(GL10.GL_DEPTH_TEST);						
		// 所作深度测试的类型
		gl.glDepthFunc(GL10.GL_LEQUAL);							
		
		// 告诉系统对透视进行修正
		gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
	}
}



运行效果:
















  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值