有了前面关于Android OpenGL ES的介绍,可以开始创建示例程序OpenGLDemos。

使用Eclipse 创建一个Android项目

  • Project Name: OpenGLDemos
  • Build Target: Android 1.6 ( >1.5 即可)
  • Application Name: Android OpenGL ES Demos
  • Package Name: com.pstreets.opengl.demo
  • Create Activity:AndroidOpenGLDemo
创建一个OpenGLRenderer 实现 GLSurfaceView.Renderer接口:
OpenGLRenderer.java
package com.example.gltest;import javax.microedition.khronos.opengles.GL10;import android.opengl.EGLConfig;
import android.opengl.GLSurfaceView.Renderer;
import android.opengl.GLU;public class OpenGLRenderer implements Renderer {private final IOpenGLDemo openGLDemo;public OpenGLRenderer(IOpenGLDemo demo){openGLDemo=demo;}public void onSurfaceCreated(GL10 gl, EGLConfig config) {// Set the background color to black ( rgba ).gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);// Enable Smooth Shading, default not really needed.
     gl.glShadeModel(GL10.GL_SMOOTH);// Depth buffer setup.gl.glClearDepthf(1.0f);// Enables depth testing.
     gl.glEnable(GL10.GL_DEPTH_TEST);// The type of depth testing to do.
     gl.glDepthFunc(GL10.GL_LEQUAL);// Really nice perspective calculations.
     gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,GL10.GL_NICEST);}public void onDrawFrame(GL10 gl) {if(openGLDemo!=null){openGLDemo.DrawScene(gl);}}public void onSurfaceChanged(GL10 gl, int width, int height) {// Sets the current view port to the new size.gl.glViewport(0, 0, width, height);// Select the projection matrix
     gl.glMatrixMode(GL10.GL_PROJECTION);// Reset the projection matrix
     gl.glLoadIdentity();// Calculate the aspect ratio of the windowGLU.gluPerspective(gl, 45.0f,(float) width / (float) height,0.1f, 100.0f);// Select the modelview matrix
     gl.glMatrixMode(GL10.GL_MODELVIEW);// Reset the modelview matrix
     gl.glLoadIdentity();}@Overridepublic void onSurfaceCreated(GL10 arg0,javax.microedition.khronos.egl.EGLConfig arg1) {// TODO Auto-generated method stub
        }}

为简洁起见,为所有的示例定义了一个接口IOpenGLDemo,
定义在IOpenGLDemo.java

package com.example.gltest;import javax.microedition.khronos.opengles.GL10;public interface IOpenGLDemo {public void DrawScene(GL10 gl);}

DrawScene 用于实际的GL绘图示例代码,其它的初始化工作基本就由GLSurfaceView 和OpenGLRenderer 完成,其中onSurfaceCreated 和 onSurfaceChanged 中的代码含义现在无需了解,后面会有具体介绍,只要知道它们是用来初始化GLSurfaceView就可以了。

最后使用一个简单的例子“Hello World”结束本篇,“Hello World” 使用红色背景刷新屏幕。

MainActivity.java

package com.example.gltest;import javax.microedition.khronos.opengles.GL10;import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;public class MainActivity extends Activityimplements IOpenGLDemo{/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);mGLSurfaceView = new GLSurfaceView(this);mGLSurfaceView.setRenderer(new OpenGLRenderer(this));setContentView(mGLSurfaceView);}public void DrawScene(GL10 gl) {gl.glClearColor(1.0f, 0.0f, 0.0f, 0.0f);// Clears the screen and depth buffer.
            gl.glClear(GL10.GL_COLOR_BUFFER_BIT| GL10.GL_DEPTH_BUFFER_BIT);}@Overrideprotected void onResume() {// Ideally a game should implement// onResume() and onPause()// to take appropriate action when the//activity looses focus
            super.onResume();mGLSurfaceView.onResume();}@Overrideprotected void onPause() {// Ideally a game should implement onResume()//and onPause()// to take appropriate action when the//activity looses focus
            super.onPause();mGLSurfaceView.onPause();}private GLSurfaceView mGLSurfaceView;}

结果如下:

转载于:https://www.cnblogs.com/Anita9002/p/4443538.html

Android OpenGL ES(六)创建实例应用OpenGLDemos程序框架 .相关推荐

  1. android opengl es 粒子效果实例代码

    概述:粒子系统采用许多形状简单的微小粒子作为基本元素,用它们来表示不规则模糊物体,系统中的每个粒子都有各自的生命周期,我们可以管理它们从创建到消亡的时间,它们都要经历"产生".&q ...

  2. android平台下OpenGL ES 3.0实例详解顶点属性、顶点数组

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  3. Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  4. Android OpenGL ES 学习(十) – GLSurfaceView 源码解析GL线程以及自定义 EGL

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  5. Android OpenGL ES 学习(十二) - MediaCodec + OpenGL 解析H264视频+滤镜

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  6. Android OpenGL ES 入门系列(一) --- 了解OpenGL ES的前世今生

    转载请注明出处 本文出自Hansion的博客 OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机.PDA和游戏主机等嵌 ...

  7. OpenGl文章 Android OpenGL ES 简明开发教程

    Android OpenGL ES 简明开发教程 分类:android学习笔记2011-12-14 15:04375人阅读评论(0)收藏举报 ApiDemos 的Graphics示例中含有OpenGL ...

  8. Android OpenGL ES视频渲染(一)GLSurfaceView

    相关文章:Android OpenGL ES视频渲染(二)EGL+OpenGL Android中视频渲染有几种方式,之前的文章使用的是nativewindow(包括softwareRender).今天 ...

  9. Android OpenGl Es 学习(二):定义顶点和着色器

    概述 这是一个新的系列,学习OpengGl Es,其实是<OpenGl Es 应用开发实践指南 Android卷>的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为 ...

最新文章

  1. 一条简单的 SQL 执行超过1000ms,纳尼?
  2. 安装Uikit时ERROR in Entry module not found: Error: Can't resolve './src' in 'xxx'的解决思路
  3. 荣耀手环5没有篮球鸿蒙,荣耀手环5和篮球版区别
  4. Orange Business Services 助力汽车制造商宝沃构建数字化基础架构
  5. 【Linux】一步一步学Linux——ipcs命令(141)
  6. C# - DynamicObject with Dynamic
  7. wordpress教程:默认http头信息X-Pingback的隐藏与修改
  8. 求解组合问题的一个迭代算法
  9. 支持语言locale
  10. Atitti v5住宿服务部后勤部建设指引指南.docx
  11. 深入java虚拟机(圣思园)
  12. 【资源分享】Dll Injector(DLL注入器)
  13. 机械臂速成小指南(二):机械臂的应用
  14. Docker Nginx配置(docker.io/nginx)
  15. Win32学习笔记 - WndProc回调函数
  16. linux编译c如何延时,linux和windows下,C/C++开发的延时函数,sleep函数
  17. matlab中f分布,在matlab中用哪个函数求F分布的分位点(分子分母的自由度和概率均已知)...
  18. 如何最大效率压缩视频文件(ffmpeg)
  19. Poly-Yolo复现
  20. 郭炜-C语言程序设计-程序设计与算法(一)-第二周

热门文章

  1. oracle退出scott_Oracle_11g中解决被锁定的scott用户的方法(转载)
  2. php 监听条码枪输入,一起看看js获取扫码枪输入数据的方法
  3. Jupyter notebook最简原型界面设计 - ipywidgets与lineup_widget
  4. [postgresql]postgresql的锁介绍
  5. [Flink]Flink DataStream API 概览
  6. 加一度分享:如何降低推广预算,增加KPI
  7. Linux的基础命令和配置文件
  8. 机房(厂房)温度环境监控系统
  9. DotNetBar.Bar作为容器使用的方法及Text更新原理
  10. 我在百度运维的成长经历 之六