`
我爱3G
  • 浏览: 29975 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Android OpenGL

阅读更多
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 简明开发教程

    ### Android OpenGL ES 开发教程详解 #### 概述与历史沿革 OpenGL ES(OpenGL for Embedded Systems)作为OpenGL API的子集,专为移动设备、PDA和游戏主机等嵌入式系统设计,旨在简化3D图形应用的开发流程。自2003...

    Android OpenGl ES绘制圆点与优化圆点锯齿

    在Android平台上,OpenGL ES是一种广泛使用的图形库,用于在移动设备上实现高性能的2D和3D图形渲染。本文将深入探讨如何使用OpenGL ES来绘制圆点,并介绍一种方法来优化圆点边缘的锯齿问题,提升视觉效果。 首先,...

    Android OpenGL 游戏引擎

    Android OpenGL 游戏引擎是基于OpenGL ES的框架,用于简化游戏开发过程,让开发者能够更高效地构建高性能的游戏应用。 一、Android OpenGL ES基础知识 1. **OpenGL ES API**:OpenGL ES 是 OpenGL 的子集,专为...

    android OpenGL绘制立体图形

    android OpenGL技术绘制一个旋转的3d立方体

    Android OpenGL ES 绘制立方体 球体 圆柱 等几何形状

    OpenGL ES 是一种在嵌入式设备上广泛使用的图形库,特别是在Android系统中,它用于创建复杂的3D图形和动画。Android OpenGL ES 提供了一个接口,让开发者能够利用硬件加速的图形处理能力,来绘制出立方体、球体、...

    androidOpenGL实现3d动画

    这是用androidOpenGL 实现的3D 动画 导入工程即可运行。

    android OpenGL 3D骰子

    在Android平台上,OpenGL ES(OpenGL for Embedded Systems)被广泛使用,它是OpenGL的一个精简版,专门针对移动设备和嵌入式系统设计。在这个"android OpenGL 3D骰子"项目中,我们将探讨如何利用OpenGL ES在Android...

    Android OpenGL 图片Texture渲染render 演示demo

    Android OpenGL 图片Texture渲染render 演示demo 1、开发语言:Kotlin 2、开发环境:Android studio 3、图片纹理渲染简介 OpenGL图片纹理渲染‌是指在3D图形渲染过程中,将2D图片(纹理)映射到3D物体表面的过程。这...

    android opengl 立方体 免费

    在Android平台上,OpenGL ES(Embedded Systems的缩写)被广泛应用于游戏开发、3D渲染等场景,它是OpenGL的一个子集,专为移动设备设计。本资源是一个适合初学者的Android OpenGL ES教程,通过构建一个简单的立方体...

    Android OpenGL 教程(1-5)

    Android OpenGL教程是开发者学习如何在Android设备上使用OpenGL ES进行图形编程的重要资源。 本教程系列共分为5个部分,从基础到进阶,逐步讲解OpenGL ES在Android上的应用: 1. GLLesson01:入门基础 这一课主要...

    android opengl原理分析

    ### Android OpenGL原理分析 #### OpenGL概述 OpenGL,全称Open Graphics Library,是一种跨语言、跨平台的应用程序编程接口(API),用于渲染2D、3D矢量图形。它由一系列函数组成,允许开发者通过调用这些函数来...

    android opengl 开发的小游戏

    本项目"android opengl 开发的小游戏"就是一个基于OpenGL ES开发的赛车游戏,名为"Countryside Racing",让我们来深入探讨一下这个项目可能涉及的关键技术和知识点。 1. **OpenGL ES基础**: - **顶点坐标系统**:...

    Android OpenGL的一个简单的例子.zip

    这个"Android OpenGL的一个简单的例子.zip"文件包含了一个基本的Android OpenGL应用实例,帮助开发者了解如何在Android设备上使用OpenGL ES。 首先,我们需要了解OpenGL ES的基本概念。OpenGL ES是OpenGL的精简版,...

    android opengl学习文档

    在Android平台的OpenGL ES开发中,Buffer的使用对于图形性能的优化至关重要。Buffer是内存中的一个连续区域,用于暂存图像数据,如顶点坐标、颜色、纹理坐标等,以便GPU高效读取。 Buffer在OpenGL ES中的使用主要是...

    Android OpenGL纹理的编程框架

    OpenGL是计算机图形学中的一个强大的库,用于在各种平台,包括Android,上创建3D和2D图形。在Android中,OpenGL ES(Embedded Systems的版本)被广泛使用,特别是对于游戏开发和复杂图形渲染。本篇文章将深入探讨...

    android opengl 贝塞尔曲线

    一个在android opengl 上实现的 贝塞尔曲线

    android openGl es2.0以画线的模式画成一个矩形 只有4条边中间透明

    android openGl es2.0以画线的模式画成一个矩形 只有4条边中间透明

    Android OpenGL ES多重采样抗锯齿MSAA演示demo源码

    Android OpenGL ES多重采样抗锯齿MSAA演示demo源码 多重采样抗锯齿MSAA,详解见:https://blog.csdn.net/github_27263697/article/details/143859755 目录 一、抗锯齿概念 二、多重采样 三、OpenGL中的MSAA 1、...

    Android OpenGL 教程(6-10)

    这个系列的教程,"Android OpenGL 教程(6-10)",是从经典的Nehe OpenGL教程移植到Android平台的,旨在帮助开发者理解和掌握Android上的OpenGL ES编程。 Lesson 6: "深度缓冲(Depth Buffer)" 深度缓冲是OpenGL中...

    android OPenGL基础范例一

    在Android平台上,OpenGL ES(OpenGL for Embedded Systems)是其对应的版本,专为移动设备和嵌入式系统设计,它在Android系统中广泛用于游戏、图形应用和其他需要高性能图形处理的场景。 在“android OpenGL基础...

Global site tag (gtag.js) - Google Analytics