【Android开发学习09】Android OpenGL ES 基础

其实,我个人学习Android最主要的目的是学习在此平台下的3D效果的开发。所以,我们开始进入主题吧。


OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。
该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。

官方主页为: http://cn.khronos.org/opengles


在Android中搭建一个3D开发的基本框架:

一、导入opengl es库:

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



二、加入渲染支持:

在Android中,GLSurfaceView包含了一个专门用于渲染3D的接口Renderer,来显示OpenGL视图:

1、导入支持库:

import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;

2、创建一个GLRender类实现Renderer接口:

public class GLRender implements Renderer
{
}

3、实现GLRender类中的3个抽象方法:

public void onDrawFrame(GL10 gl)
public void onSurfaceChanged(GL10 gl, int width, int height)
public void onSurfaceCreated(GL10 gl, EGLConfig config)

onSurfaceCreated 在窗口被创建时被调用,需要做一些必要的初始化工作:
	public void onSurfaceCreated(GL10 gl, EGLConfig config)
	{
		// 启用阴影平滑
		gl.glShadeModel(GL10.GL_SMOOTH);
	
		// 黑色背景,设置清除屏幕时所用的颜色-->> (R, G, B, A) 取值: 0.0f-1.0f 。
		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);
	} 
onSurfaceChanged 当窗口大小发生改变时被调用,不管窗口的大小是否已经改变,在程序开始时至少运行一次。
   在这个里面,我们要设置OpenGL的场景大小:

	public void onSurfaceChanged(GL10 gl, int width, int height)
	{
		float ratio = (float) width / height;
		//设置OpenGL场景的大小
		gl.glViewport(0, 0, width, height);
		//设置投影矩阵 -->> 增加透视.
		gl.glMatrixMode(GL10.GL_PROJECTION);
		//重置投影矩阵 -->> 恢复成原始状态.
		gl.glLoadIdentity();
		// 设置视口的大小 -->> 前4个参数确定窗口的大小,后2个参数分别是在场景中所能绘制深度的起点和终点。
		gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
		// 选择模型观察矩阵
		gl.glMatrixMode(GL10.GL_MODELVIEW);	
		// 重置模型观察矩阵
		gl.glLoadIdentity();							

	}
onDrawFrame 在窗口内进行绘图操作。 在绘图之前,需要将屏幕清楚成前面指定的颜色,清楚深度缓存并且重置场景,
   然后就可以绘图了:

	public void onDrawFrame(GL10 gl)
	{
		// 清除屏幕和深度缓存
		gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
		// 重置当前的模型观察矩阵
		gl.glLoadIdentity();

		// 具体的绘图操作开始 。。。

  	}


三、在主程序调用我们写好的接口:
   调用GLSurfaceView类的setRenderer方法将我们自己构建的GLRender类设置为默认的Renderer,
   然后,通过setContentView方法使Activity显示一个GLSurfaceView即可。

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


到这里,我们的基本框架就搭建好了。







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值