[Android实例] OpenGL ES基础教程(一)

来源:互联网 发布:布面运动鞋怎么洗 知乎 编辑:程序博客网 时间:2024/05/16 17:40

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=155420

原文转自:http://www.cnblogs.com/sunnychuh/archive/2011/07/20/2112110.html

官方网站:http://www.khronos.org/opengles

博客链接:http://www.cnblogs.com/dwinter/


一、设置OpenGL ES视图

设置OpenGL视图并不难,Android上也较简单。我们一般只需要2个步骤。

GLSurfaceView

我们要为GLSurfaceView提供一个专门用于渲染的接口

public void  setRenderer(GLSurfaceView.Renderer renderer)


GLSurfaceView.Renderer

GLSurfaceView.Renderer是一个通用渲染接口。我们必须实现下面的三个抽象方法:

// 画面创建

public void onSurfaceCreated(GL10 gl, EGLConfig config)

// 画面绘制

public void onDrawFrame(GL10 gl)

// 画面改变

public void onSurfaceChanged(GL10 gl, int width, int height)

onSurfaceCreated

在这里我们主要进行一些初始化工作,比如对透视进行修正、设置清屏所用颜色等。

onDrawFrame

绘制当前画面

onSurfaceChanged

当设备水平或者垂直变化时调用此方法,设置新的显示比例


案例代码:

  1. public class OpenGLDemo extends Activity {
  2.     @Override
  3.     public void onCreate(Bundle savedInstanceState) { 
  4.         GLSurfaceView view = new GLSurfaceView(this);
  5.         view.setRenderer(new OpenGLRenderer());
  6.         setContentView(view);
  7.     }
  8. }
复制代码

实现renderer需要更多的设置

  1.     public void onSurfaceCreated(GL10 gl, EGLConfig config) {
  2.         // 黑色背景
  3.         gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
  4.         // 启用阴影平滑(不是必须的)
  5.         gl.glShadeModel(GL10.GL_SMOOTH);
  6.         // 设置深度缓存
  7.         gl.glClearDepthf(1.0f);
  8.         // 启用深度测试
  9.         gl.glEnable(GL10.GL_DEPTH_TEST);
  10.         // 所作深度测试的类型
  11.         gl.glDepthFunc(GL10.GL_LEQUAL);
  12.         // 对透视进行修正
  13.         gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
  14.     }

  15.     public void onDrawFrame(GL10 gl) {
  16.         // 清除屏幕和深度缓存
  17.         gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
  18.     }

  19.     public void onSurfaceChanged(GL10 gl, int width, int height) {
  20.         // 设置画面的大小
  21.         gl.glViewport(0, 0, width, height);
  22.         // 设置投影矩阵
  23.         gl.glMatrixMode(GL10.GL_PROJECTION);
  24.         // 重置投影矩阵
  25.         gl.glLoadIdentity();
  26.         // 设置画面比例
  27.         GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f,100.0f);
  28.         // 选择模型观察矩阵
  29.         gl.glMatrixMode(GL10.GL_MODELVIEW);
  30.         // 重置模型观察矩阵
  31.         gl.glLoadIdentity();
  32.     }
  33. }
复制代码

只要加入这段代码到OpenGLDemo class里就可实现全屏

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);


设置完视图后,即可编译运行,可以看到一个“漂亮”的黑屏 = =

原创粉丝点击