博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android OpenGL ES(六)创建实例应用OpenGLDemos程序框架 .
阅读量:5932 次
发布时间:2019-06-19

本文共 4362 字,大约阅读时间需要 14 分钟。

有了前面关于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 window     GLU.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();     }    @Override    public 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 Activity       implements IOpenGLDemo{        /** Called when the activity is first created. */        @Override        public 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);             }             @Override        protected void onResume() {            // Ideally a game should implement            // onResume() and onPause()            // to take appropriate action when the            //activity looses focus            super.onResume();            mGLSurfaceView.onResume();        }             @Override        protected 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;         }

结果如下:

 

转载地址:http://siktx.baihongyu.com/

你可能感兴趣的文章
ActionView - 更好用的团队敏捷开发工具
查看>>
使用vue-cli创建运行Vue项目
查看>>
Flutter启动流程简析
查看>>
图片居中
查看>>
在已有vu项目中引入vux
查看>>
电子商务java b2b b2c o2o平台
查看>>
JS数据类型分类和判断
查看>>
两位数据科学家跟你聊聊AI那点事儿(附学习资料)
查看>>
[译] 为什么 HTML 中复选框样式难写 — 本文给你答案
查看>>
环境配置01-win10+Cenos双系统安装过程记录
查看>>
请教nodejs中promise、setTimeout、setImmediate在eventloop中的执行时机问题
查看>>
从零开始,如何打造出一个好的运营团队
查看>>
python学习干货教程(2):环境变量配置
查看>>
LeetCode每日一题: 种花问题(No.605)
查看>>
【综述】各类人工智能&大数据相关比赛
查看>>
JavaScript对象浅析
查看>>
TEST
查看>>
微信分享音乐给好友时会话列表无法快捷播放问题填坑记录
查看>>
一些jQuery小知识点(笔记)
查看>>
前端工程化篇之 gulp 一文让您轻松掌握gulp 【全套gulp源码注释解析】
查看>>