【Android开发学习09】Android OpenGL ES 基础
来源:互联网 发布:java方法命名规范to 编辑:程序博客网 时间:2024/05/12 12:55
其实,我个人学习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);
到这里,我们的基本框架就搭建好了。
- 【Android开发学习09】Android OpenGL ES 基础
- Android 学习OpenGL ES
- Android OpenGL ES (1) -- 基础
- Android的OpenGL Es开发
- android游戏开发-OPENGL ES
- Android OpenGL ES 开发入门
- 【Android开发学习10】Android OpenGL ES 画多边形
- 【Android开发学习11】Android OpenGL ES 颜色
- 【Android开发学习12】Android OpenGL ES 旋转glRotatef
- 【Android开发学习18】Android OpenGL ES 光照glDrawArrays
- 【Android开发学习10】Android OpenGL ES 画多边形
- 零基础开发OpenGL ES 2.0学习笔记-Android篇(一)
- 零基础开发OpenGL ES 2.0学习笔记-Android篇(二)
- 学习android的opengl es
- android opengl es 1.0学习
- 在android 上OpenGL ES开发学习资料
- Android OpenGL ES 开发教程(2):关于OpenGL ES
- Android OpenGL ES 开发教程(3):OpenGL ES管道(Pipeline)
- LA 3942 字典树+递推
- 花香短信大全,发送的不止是短信——花香短信大全 V1.0
- Android -- (13),Content Provider
- MSDN我告诉你
- 得到真实外网IP、IP所在国家、省份、地区
- 【Android开发学习09】Android OpenGL ES 基础
- [unity3d3.54下载] unity 3d 安装方法 教程
- 验证是否支持html5的Video标签及MP4视频播放
- linux
- iOS开发那些事--iOS视图生命周期与视图控制器关系
- 浅谈Java--内存泄漏
- Android数据库知识和操作笔记
- SpringMVC介绍之约定优于配置
- 当你学不进去的时候,试试“普瑞马法则”