设为首页收藏本站

木蚂蚁手机乐园首页

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4526|回复: 0

[UI开发] Android的OpenGL学习笔记(1)

[复制链接]

51

主题

1

帖子

317

积分

木蚂蚁小学三年级

地穴编织者

Rank: 3

积分
317
发表于 2011-3-11 07:00:40 | 显示全部楼层 |阅读模式
本帖最后由 煮咖啡 于 2011-3-11 07:03 编辑

Android的OpenGL学习笔记(1)

先写第一个程序,介绍OpenGL的某些知识和框架结构:

MainActivity,Vortex.java代码:

    1. package com.droidnova.android.games.vortex;

    2. import android.app.Activity;
    3. import android.os.Bundle;

    4. public class Vortex extends Activity {
    5.     //private static final String LOG_TAG = Vortex.class.getSimpleName();
    6.     private VortexView _vortexView;
    7.    
    8.     @Override
    9.     protected void onCreate(Bundle savedInstanceState) {
    10.         super.onCreate(savedInstanceState);
    11.         _vortexView = new VortexView(this);
    12.         setContentView(_vortexView);
    13.     }
    14. }
    15. /*@Override
    16. protected void onPause() {
    17.     super.onPause();
    18.     _vortexView.onPause();
    19. }

    20. @Override
    21. protected void onResume() {
    22.     super.onResume();
    23.     _vortexView.onResume();
    24. }*/
    复制代码

我们继承了GLSurfaceView是因为它会帮助我们画3D图像。接下来看VortexRenderer类。一个Renderer包含画一帧所必需的所有东西。

VortexRendere.java

  1. package com.droidnova.android.games.vortex;

  2. import javax.microedition.khronos.egl.EGLConfig;
  3. import javax.microedition.khronos.opengles.GL10;

  4. import android.opengl.GLSurfaceView;

  5. public class VortexRenderer implements GLSurfaceView.Renderer {
  6.     //private static final String LOG_TAG = VortexRenderer.class.getSimpleName();
  7.    
  8.     private float _red = 0.9f;
  9.     private float _green = 0.2f;
  10.     private float _blue = 0.2f;
  11.    
  12.     //当窗口创建的时候需要调用onSurfaceCreated,所以我们可以在里面对OpenGL做一些初始化的工作
  13.     @Override
  14.     public void onSurfaceCreated(GL10 gl, EGLConfig config) {
  15.         // Do nothing special.
  16.     }
  17.     //surface发生改变的时候调用,例如从竖屏切换到横屏的时候。当窗口的大小发生改变的时候,当然,不管窗口的大小是否已经改变。
  18.     //它在程序开始时至少运行一次,所以我们在该方法中设置OpenGL场景的大小
  19.     @Override
  20.     public void onSurfaceChanged(GL10 gl, int w, int h) {
  21.         gl.glViewport(0, 0, w, h);//设置OpenGL场景的大小,这里设置的和屏幕同样大小
  22.     }
  23.     //当任何时候调用一个画图方法的时候。即所有的绘图操作都在onDrawFrame方法中进行,在绘图之前,需要将屏幕清除成前面所指定的颜色,
  24.     //清除深度缓存,并且重置场景,然后就可以进行绘图了!
  25.     @Override
  26.     public void onDrawFrame(GL10 gl) {
  27.         // define the color we want to be displayed as the "clipping wall"
  28.         gl.glClearColor(_red, _green, _blue, 1.0f);//为底色定义了颜色
  29.         // clear the color buffer to show the ClearColor we called above...
  30.         gl.glClear(GL10.GL_COLOR_BUFFER_BIT);//GL10,这里的10代表1.0版本。清空颜色缓存。目前Android中的版本只达到1.1
  31.     }

  32.     public void setColor(float r, float g, float b) {
  33.         _red = r;
  34.         _green = g;
  35.         _blue = b;
  36.     }
  37. }
复制代码

VortexView.java代码:(属于自定义View)

  1. package com.droidnova.android.games.vortex;

  2. import android.content.Context;
  3. import android.opengl.GLSurfaceView;
  4. import android.view.MotionEvent;

  5. public class VortexView extends GLSurfaceView {
  6.     //private static final String LOG_TAG = VortexView.class.getSimpleName();
  7.     private VortexRenderer _renderer;
  8.    
  9.     public VortexView(Context context) {
  10.         super(context);
  11.         _renderer = new VortexRenderer();
  12.         setRenderer(_renderer);
  13.     }
  14.    
  15.     public boolean onTouchEvent(final MotionEvent event) {
  16.         queueEvent(new Runnable() {
  17.             public void run() {
  18.                 _renderer.setColor(event.getX() / getWidth(), event.getY() / getHeight(), 1.0f);
  19.             }
  20.         });
  21.         return true;
  22.     }
  23. }
  24. /*public boolean onTouchEvent(final MotionEvent event) {
  25.         queueEvent(new Runnable(){
  26.             public void run() {
  27.                 _renderer.setColor(event.getX() / getWidth(),
  28.                         event.getY() / getHeight(), 1.0f);
  29.             }});
  30.         return true;
  31.     }*/
复制代码

恩,基本上就这些代码,不需要任何布局!更详细的OpenGL知识可以参考计算机图形学!和以往一样,必要的解释都在代码注释中,如有不懂,可以留言提出!如有错误,请留言指出,这些都是些个人学习总结!



该贴已经同步到 煮咖啡的微博



上一篇:【3-11】DHD-Rom_v1.7 美化包,取消桌面旋屏,几处图标更新!Sense和No-Sense
下一篇:一条短信就可以获取被盗手机的GPS位置(PhoneFinder)
0.0 ……加油吧……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

推荐版块: PC破解软件下载  |   VR视频资源下载  |   三星Galaxy S8/S8+  |   恋舞OL  |   安卓破解软件  |   安卓破解游戏     安卓汉化下载  
安卓android软件大全  |   安卓大型游戏  |   小米手机论坛  |   三星Galaxy Note8论坛  |   影视资源下载  |   安卓破解    
安卓市场   安卓软件   小说电子书大全   在线影音播放   PC破解游戏下载   安卓软件教程   安卓游戏攻略   手机游戏   手机健康软件   手机订餐软件   手机购物软件   热门TAG
快速回复 返回顶部 返回列表