OpenGL ES之GLSurfaceView学习
来源:互联网 发布:网络暴力调查数据图 编辑:程序博客网 时间:2024/05/19 02:00
OpenGL ES之GLSurfaceView学习包括三个部分:
android Surface和SurfaceView概述:
http://blog.csdn.net/hankersyan/article/details/6124998
android.opengl.GLSurfaceView概述:
http://blog.csdn.net/hankersyan/article/details/6124998
android.opengl.GLSurfaceView.Renderer概述:
http://blog.csdn.net/hankersyan/article/details/6125004
====================================================================================================================================
使用GLSurfaceView开发3D应用时,如果是非交互式的应用,可以直接使用GLSurfaceView。如果需要交互式的行为,则需要继承GLSurfaceView并重写一些方法
OpenGL ES之GLSurfaceView学习:非交互式的实例
- import javax.microedition.khronos.egl.EGLConfig;
- import javax.microedition.khronos.opengles.GL10;
- import android.app.Activity;
- import android.opengl.GLSurfaceView;
- import android.opengl.GLSurfaceView.Renderer;
- import android.os.Bundle;
- import android.provider.OpenableColumns;
- /**
- * 本示例演示OpenGL ES开发3D应用
- * 该Activity直接使用了GLSurfaceView
- * 这是因为GLSurfaceView可以直接使用,除非需要接受用户输入,和用户交互,才需要重写一些GLSurfaceView的方法
- * 如果开发一个非交互式的OpenGL应用,可以直接使用GLSurfaceView。参照本示例
- * @author Administrator
- *
- */
- public class NonInteractiveDemo extends Activity {
- private GLSurfaceView mGLView;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mGLView = new GLSurfaceView(this);
- //这里需要指定一个自定义的渲染器
- mGLView.setRenderer(new DemoRenderer());
- setContentView(mGLView);
- }
- public void onPause(){
- super.onPause();
- mGLView.onPause(); //当Activity暂停时,告诉GLSurfaceView也停止渲染,并释放资源。
- }
- public void onResume(){
- super.onResume();
- mGLView.onResume(); //当Activity恢复时,告诉GLSurfaceView加载资源,继续渲染。
- }
- }
- class DemoRenderer implements Renderer{
- @Override
- public void onDrawFrame(GL10 gl) {
- //每帧都需要调用该方法进行绘制。绘制时通常先调用glClear来清空framebuffer。
- //然后调用OpenGL ES其他接口进行绘制
- gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
- }
- @Override
- public void onSurfaceChanged(GL10 gl, int w, int h) {
- //当surface的尺寸发生改变时,该方法被调用,。往往在这里设置ViewPort。或者Camara等。
- gl.glViewport(0, 0, w, h);
- }
- @Override
- public void onSurfaceCreated(GL10 gl, EGLConfig config) {
- // 该方法在渲染开始前调用,OpenGL ES的绘制上下文被重建时也会调用。
- //当Activity暂停时,绘制上下文会丢失,当Activity恢复时,绘制上下文会重建。
- //do nothing special
- }
- }
OpenGL ES之GLSurfaceView学习:交互式的实例
- import javax.microedition.khronos.egl.EGLConfig;
- import javax.microedition.khronos.opengles.GL10;
- import android.app.Activity;
- import android.content.Context;
- import android.opengl.GLSurfaceView;
- import android.os.Bundle;
- import android.view.MotionEvent;
- /**
- * 本示例演示OpenGL ES开发3D应用
- * 该Activity使用了自定义的GLSurfaceView的子类
- * 这样,我们可以开发出和用户交互的应用,比如游戏等。
- * 需要注意的是:由于渲染对象是运行在一个独立的渲染线程中,所以
- * 需要采用跨线程的机制来进行事件的处理。但是Android提供了一个简便的方法
- * 我们只需要在事件处理中使用queueEvent(Runnable)就可以了.
- *
- * 对于大多数3D应用,如游戏、模拟等都是持续性渲染,但对于反应式应用来说,只有等用户进行了某个操作后再开始渲染。
- * GLSurfaceView支持这两种模式。通过调用方法setRenderMode()方法设置。
- * 调用requestRender()继续渲染。
- *
- *
- * @author Administrator
- *
- */
- public class InteractiveDemo extends Activity {
- private GLSurfaceView mGLView;
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- mGLView = new DemoGLSurfaceView(this); //这里使用的是自定义的GLSurfaceView的子类
- setContentView(mGLView);
- }
- public void onPause(){
- super.onPause();
- mGLView.onPause();
- }
- public void onResume(){
- super.onResume();
- mGLView.onResume();
- }
- }
- class DemoGLSurfaceView extends GLSurfaceView{
- DemoRenderer2 mRenderer;
- public DemoGLSurfaceView(Context context) {
- super(context);
- //为了可以激活log和错误检查,帮助调试3D应用,需要调用setDebugFlags()。
- this.setDebugFlags(DEBUG_CHECK_GL_ERROR|DEBUG_LOG_GL_CALLS);
- mRenderer = new DemoRenderer2();
- this.setRenderer(mRenderer);
- }
- public boolean onTouchEvent(final MotionEvent event){
- //由于DemoRenderer2对象运行在另一个线程中,这里采用跨线程的机制进行处理。使用queueEvent方法
- //当然也可以使用其他像Synchronized来进行UI线程和渲染线程进行通信。
- this.queueEvent(new Runnable() {
- @Override
- public void run() {
- //TODO:
- mRenderer.setColor(event.getX()/getWidth(), event.getY()/getHeight(), 1.0f);
- }
- });
- return true;
- }
- }
- /**
- * 这个应用在每一帧中清空屏幕,当tap屏幕时,改变屏幕的颜色。
- * @author Administrator
- *
- */
- class DemoRenderer2 implements GLSurfaceView.Renderer{
- private float mRed;
- private float mGreen;
- private float mBlue;
- @Override
- public void onDrawFrame(GL10 gl) {
- // TODO Auto-generated method stub
- gl.glClearColor(mRed, mGreen, mBlue, 1.0f);
- gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
- }
- @Override
- public void onSurfaceChanged(GL10 gl, int w, int h) {
- // TODO Auto-generated method stub
- gl.glViewport(0, 0, w, h);
- }
- @Override
- public void onSurfaceCreated(GL10 gl, EGLConfig config) {
- // TODO Auto-generated method stub
- }
- public void setColor(float r, float g, float b){
- this.mRed = r;
- this.mGreen = g;
- this.mBlue = b;
- }
- }
- OpenGL ES之GLSurfaceView学习
- OpenGL ES之GLSurfaceView学习一:介绍
- OpenGL ES之GLSurfaceView学习一:介绍
- OpenGL ES之GLSurfaceView学习一:介绍
- OpenGL ES之GLSurfaceView学习一:介绍
- OpenGL ES之GLSurfaceView学习一:介绍
- OpenGL ES之GLSurfaceView学习一:介绍
- OpenGL ES之GLSurfaceView学习:介绍
- OpenGL ES之GLSurfaceView学习一:介绍
- OpenGL ES之GLSurfaceView学习一:介绍
- OpenGL ES之GLSurfaceView学习二:非交互式的实例
- OpenGL ES之GLSurfaceView学习三:交互式的实例
- OpenGL ES之GLSurfaceView学习二:非交互式的实例
- OpenGL ES之GLSurfaceView学习二:非交互式的实例
- OpenGL ES之GLSurfaceView学习三:交互式的实例
- OpenGL ES之GLSurfaceView学习三:交互式的实例
- OpenGL ES之GLSurfaceView学习二:非交互式的实例
- OpenGL ES之GLSurfaceView学习三:交互式的实例
- eclipse启动无响应,停留在Loading workbench状态
- C#内置事件机制在Unity3D应用
- winXP下开发的.NET的web程序,迁移到winserver2008的设置
- 第一周项目1练习2
- 互联网大佬生存法则:如何防守周鸿祎?
- OpenGL ES之GLSurfaceView学习
- Java Web 高性能开发,第 1 部分: 前端的高性能
- (转载)web.xml 中的listener、 filter、servlet 加载顺序及其详解
- 出错"ORA-01000: maximum open cursors exceeded" 问题分析
- VMware workstation 7.0 下安装 unbuntu 12.10 Vmware Easy Install 解决办法
- 海量数据对比去除重复的解决方案
- 免费主机
- C++程序员必读:让你的代码更强大(1
- VMware Workstation 9下安装Fedora 18图文教程