1 什么是 OpenGL?
OpenGL 是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。OpenGL 的前身是 SGI 公司为其图形工作站开的 IRIS GL。IRIS GL 是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是 SGI 公司便在 IRIS GL 的基础上开发 OpenGL 。
2 OpenGL 的发展历程
1992年7月 发布了 OpenGL 1.0 版本,并与微软共同推出 Windows NT 版本的 OpenGL 。
1995年 OpenGL 1.1 版本面市,加入了新功能,并引入了纹理特性等等。
一直到 2009年8月Khronos小组发布了OpenGL 3.2,这是一年以来OpenGL进行的第三次重要升级。
3 OpenGL ES 简介
Android 3D 引擎采用的是OpenGL ES。OpenGL ES是一套为手持和嵌入式系统设计的3D引擎API,由Khronos公司维护。在PC领域,一直有两种标准的3D API进行竞争,OpenGL 和 DirectX。一般主流的游戏和显卡都支持这两种渲染方式,DirectX在Windows平台上有很大的优势,但是 OpenGL 具有更好的跨平台性。
由于嵌入式系统和PC相比,一般说来,CPU、内存等都比PC差很多,而且对能耗有着特殊的要求,许多嵌入式设备并没有浮点运算协处理器,针对嵌入式系统的以上特点,Khronos对标准的 OpenGL 系统进行了维护和改动,以期望满足嵌入式设备对3D绘图的要求。
4 Android OpenGL ES 简介
Android系统使用 OpenGL 的标准接口来支持3D图形功能,android 3D 图形系统也分为 java 框架和本地代码两部分。本地代码主要实现的 OpenGL 接口的库,在 Java 框架层,javax.microedition.khronos.opengles 是 java 标准的 OpenGL 包,android.opengl 包提供了 OpenGL 系统和 Android GUI 系统之间的联系。
5 Android 支持 OpenGL 列表
* GL
* GL 10
* GL 10 EXT
* GL 11
* GL 11 EXT
* GL 11 ExtensionPack
6 GLSurfaceView
Android中提供了GLSurfaceView用于显示OpenGL渲染,GLSurfaceView包含了以下功能:
* 在 OpenGL ES 和 View 系统之间建立联系;
* 使得 OpenGL ES 可以工作在 Activity 生命周期中;
* 可选择合适的 frame buffer 像素格式;
* 创建并管理一个单独的渲染线程,可以实现平滑的动画;
* 提供debugging 工具和 API。
public void setRenderer(GLSurfaceView.Renderer renderer) 提供了渲染方法
7 GLSurfaceView.Renderer
普通的渲染接口,当你创建自己的render时需要实现这个接口同时重写一些方法。然后通过 GLSurfaceView的setRenderer(GLSurfaceView.Renderer)将自己的render渲染到 GLSurfaceView中,实现GLSurfaceView.Renderer时,你需要实现以下三个方法:
* public void onSurfaceCreated(GL10 gl, EGLConfig config)
该方法在渲染开始前调用,OpenGL ES 的绘制上下文被重建 时也会被调用。当 activity 暂停时绘制上下文会丢失,当 activity 继续 时,绘制上下文会被重建。通俗的来说在渲染的过程中一些不经常变换的,可以在这个方法里面设置,比方说:创建长期存在的 OpenGL 资源(如 texture)往往也在这里进行。
* public void onDrawFrame(GL10 gl)
通常这个方法中就是实际绘画的地方,每帧都通过该方法进行绘制。绘制时通常先调用 glClear 函数来清空 framebuffer,然后在调用 OpenGL ES 的起它的接口进行绘制。
* public void onSurfaceChanged(GL10 gl, int width, int height)
surface 的尺寸发生改变时该方法被调用(横竖屏切换时)。往往在 这里设置 viewport。若你的 camera 是固定的,也可以在这里设置 camera。
8 应用示例
了解完GLSurfaceView和GLSurfaceView.Render之后,接下来我们开始实际操刀:
1. 创建Activity:
view plaincopy to clipboardprint?
1. package se.jayway.opengl.tutorial;
2.
3. import android.app.Activity;
4. import android.opengl.GLSurfaceView;
5. import android.os.Bundle;
6.
7. public class TutorialPartI extends Activity {
8. /** Called when the activity is first created. */
9. @Override
10. public void onCreate(Bundle savedInstanceState) {
11. super.onCreate(savedInstanceState);
12. GLSurfaceView view = new GLSurfaceView(this);
13. view.setRenderer(new OpenGLRenderer());
14. setContentView(view);
15. }
16. }
package se.jayway.opengl.tutorial;
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
public class TutorialPartI extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GLSurfaceView view = new GLSurfaceView(this);
view.setRenderer(new OpenGLRenderer());
setContentView(view);
}
}
1. 创建Render:package se.jayway.opengl.tutorial;
view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
1. package se.jayway.opengl.tutorial;
2. import javax.microedition.khronos.egl.EGLConfig;
3. import javax.microedition.khronos.opengles.GL10;
4. import android.opengl.GLU;
5. import android.opengl.GLSurfaceView.Renderer;
6. public class OpenGLRenderer implements Renderer {
7. /*
8. * @see
9. * android.opengl.GLSurfaceView.Renderer#onSurfaceCreated(javax.
10. * microedition.khronos.opengles.GL10, javax.microedition.khronos.
11. * egl.EGLConfig)
12. */
13. public void onSurfaceCreated(GL10 gl, EGLConfig config) {
14. // Set the background color to black ( rgba ).
15. gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // OpenGL docs.
16. // Enable Smooth Shading, default not really needed.
17. gl.glShadeModel(GL10.GL_SMOOTH);// OpenGL docs.
18. // Depth buffer setup.
19. gl.glClearDepthf(1.0f);// OpenGL docs.
20. // Enables depth testing.
21. gl.glEnable(GL10.GL_DEPTH_TEST);// OpenGL docs.
22. // The type of depth testing to do.
23. gl.glDepthFunc(GL10.GL_LEQUAL);// OpenGL docs.
24. // Really nice perspective calculations.
25. gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, // OpenGL docs.
26. GL10.GL_NICEST);
27. }
28. /*
29. * @see
30. * android.opengl.GLSurfaceView.Renderer#onDrawFrame(javax.
31. * microedition.khronos.opengles.GL10)
32. */
33. public void onDrawFrame(GL10 gl) {
34. // Clears the screen and depth buffer.
35. gl.glClear(GL10.GL_COLOR_BUFFER_BIT | // OpenGL docs.
36. GL10.GL_DEPTH_BUFFER_BIT);
37. }
38. /*
39. * @see
40. * android.opengl.GLSurfaceView.Renderer#onSurfaceChanged(javax.
41. * microedition.khronos.opengles.GL10, int, int)
42. */
43. public void onSurfaceChanged(GL10 gl, int width, int height) {
44. // Sets the current view port to the new size.
45. gl.glViewport(0, 0, width, height);// OpenGL docs.
46. // Select the projection matrix
47. gl.glMatrixMode(GL10.GL_PROJECTION);// OpenGL docs.
48. // Reset the projection matrix
49. gl.glLoadIdentity();// OpenGL docs.
50. // Calculate the aspect ratio of the window
51. GLU.gluPerspective(gl, 45.0f,
52. (float) width / (float) height,
53. 0.1f, 100.0f);
54. // Select the modelview matrix
55. gl.glMatrixMode(GL10.GL_MODELVIEW);// OpenGL docs.
56. // Reset the modelview matrix
57. gl.glLoadIdentity();// OpenGL docs.
58. }
59. }
分享到:
相关推荐
### Android OpenGL ES 开发教程详解 #### 概述与历史沿革 OpenGL ES(OpenGL for Embedded Systems)作为OpenGL API的子集,专为移动设备、PDA和游戏主机等嵌入式系统设计,旨在简化3D图形应用的开发流程。自2003...
在Android平台上,OpenGL ES是一种广泛使用的图形库,用于在移动设备上实现高性能的2D和3D图形渲染。本文将深入探讨如何使用OpenGL ES来绘制圆点,并介绍一种方法来优化圆点边缘的锯齿问题,提升视觉效果。 首先,...
Android OpenGL 游戏引擎是基于OpenGL ES的框架,用于简化游戏开发过程,让开发者能够更高效地构建高性能的游戏应用。 一、Android OpenGL ES基础知识 1. **OpenGL ES API**:OpenGL ES 是 OpenGL 的子集,专为...
android OpenGL技术绘制一个旋转的3d立方体
OpenGL ES 是一种在嵌入式设备上广泛使用的图形库,特别是在Android系统中,它用于创建复杂的3D图形和动画。Android OpenGL ES 提供了一个接口,让开发者能够利用硬件加速的图形处理能力,来绘制出立方体、球体、...
这是用androidOpenGL 实现的3D 动画 导入工程即可运行。
在Android平台上,OpenGL ES(OpenGL for Embedded Systems)被广泛使用,它是OpenGL的一个精简版,专门针对移动设备和嵌入式系统设计。在这个"android OpenGL 3D骰子"项目中,我们将探讨如何利用OpenGL ES在Android...
Android OpenGL 图片Texture渲染render 演示demo 1、开发语言:Kotlin 2、开发环境:Android studio 3、图片纹理渲染简介 OpenGL图片纹理渲染是指在3D图形渲染过程中,将2D图片(纹理)映射到3D物体表面的过程。这...
在Android平台上,OpenGL ES(Embedded Systems的缩写)被广泛应用于游戏开发、3D渲染等场景,它是OpenGL的一个子集,专为移动设备设计。本资源是一个适合初学者的Android OpenGL ES教程,通过构建一个简单的立方体...
Android OpenGL教程是开发者学习如何在Android设备上使用OpenGL ES进行图形编程的重要资源。 本教程系列共分为5个部分,从基础到进阶,逐步讲解OpenGL ES在Android上的应用: 1. GLLesson01:入门基础 这一课主要...
### Android OpenGL原理分析 #### OpenGL概述 OpenGL,全称Open Graphics Library,是一种跨语言、跨平台的应用程序编程接口(API),用于渲染2D、3D矢量图形。它由一系列函数组成,允许开发者通过调用这些函数来...
本项目"android opengl 开发的小游戏"就是一个基于OpenGL ES开发的赛车游戏,名为"Countryside Racing",让我们来深入探讨一下这个项目可能涉及的关键技术和知识点。 1. **OpenGL ES基础**: - **顶点坐标系统**:...
这个"Android OpenGL的一个简单的例子.zip"文件包含了一个基本的Android OpenGL应用实例,帮助开发者了解如何在Android设备上使用OpenGL ES。 首先,我们需要了解OpenGL ES的基本概念。OpenGL ES是OpenGL的精简版,...
在Android平台的OpenGL ES开发中,Buffer的使用对于图形性能的优化至关重要。Buffer是内存中的一个连续区域,用于暂存图像数据,如顶点坐标、颜色、纹理坐标等,以便GPU高效读取。 Buffer在OpenGL ES中的使用主要是...
OpenGL是计算机图形学中的一个强大的库,用于在各种平台,包括Android,上创建3D和2D图形。在Android中,OpenGL ES(Embedded Systems的版本)被广泛使用,特别是对于游戏开发和复杂图形渲染。本篇文章将深入探讨...
一个在android opengl 上实现的 贝塞尔曲线
android openGl es2.0以画线的模式画成一个矩形 只有4条边中间透明
Android OpenGL ES多重采样抗锯齿MSAA演示demo源码 多重采样抗锯齿MSAA,详解见:https://blog.csdn.net/github_27263697/article/details/143859755 目录 一、抗锯齿概念 二、多重采样 三、OpenGL中的MSAA 1、...
这个系列的教程,"Android OpenGL 教程(6-10)",是从经典的Nehe OpenGL教程移植到Android平台的,旨在帮助开发者理解和掌握Android上的OpenGL ES编程。 Lesson 6: "深度缓冲(Depth Buffer)" 深度缓冲是OpenGL中...
在Android平台上,OpenGL ES(OpenGL for Embedded Systems)是其对应的版本,专为移动设备和嵌入式系统设计,它在Android系统中广泛用于游戏、图形应用和其他需要高性能图形处理的场景。 在“android OpenGL基础...