Android的OpenGL学习笔记(1)

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

MainActivity,Vortex.java代码:

Code:
  1. packagecom.droidnova.android.games.vortex;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. publicclassVortexextendsActivity{
  5. //privatestaticfinalStringLOG_TAG=Vortex.class.getSimpleName();
  6. privateVortexView_vortexView;
  7. @Override
  8. protectedvoidonCreate(BundlesavedInstanceState){
  9. super.onCreate(savedInstanceState);
  10. _vortexView=newVortexView(this);
  11. setContentView(_vortexView);
  12. }
  13. }
  14. /*@Override
  15. protectedvoidonPause(){
  16. super.onPause();
  17. _vortexView.onPause();
  18. }
  19. @Override
  20. protectedvoidonResume(){
  21. super.onResume();
  22. _vortexView.onResume();
  23. }*/

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

VortexRendere.java

Code:
  1. packagecom.droidnova.android.games.vortex;
  2. importjavax.microedition.khronos.egl.EGLConfig;
  3. importjavax.microedition.khronos.opengles.GL10;
  4. importandroid.opengl.GLSurfaceView;
  5. publicclassVortexRendererimplementsGLSurfaceView.Renderer{
  6. //privatestaticfinalStringLOG_TAG=VortexRenderer.class.getSimpleName();
  7. privatefloat_red=0.9f;
  8. privatefloat_green=0.2f;
  9. privatefloat_blue=0.2f;
  10. //当窗口创建的时候需要调用onSurfaceCreated,所以我们可以在里面对OpenGL做一些初始化的工作
  11. @Override
  12. publicvoidonSurfaceCreated(GL10gl,EGLConfigconfig){
  13. //Donothingspecial.
  14. }
  15. //surface发生改变的时候调用,例如从竖屏切换到横屏的时候。当窗口的大小发生改变的时候,当然,不管窗口的大小是否已经改变。
  16. //它在程序开始时至少运行一次,所以我们在该方法中设置OpenGL场景的大小
  17. @Override
  18. publicvoidonSurfaceChanged(GL10gl,intw,inth){
  19. gl.glViewport(0,0,w,h);//设置OpenGL场景的大小,这里设置的和屏幕同样大小
  20. }
  21. //当任何时候调用一个画图方法的时候。即所有的绘图操作都在onDrawFrame方法中进行,在绘图之前,需要将屏幕清除成前面所指定的颜色,
  22. //清除深度缓存,并且重置场景,然后就可以进行绘图了!
  23. @Override
  24. publicvoidonDrawFrame(GL10gl){
  25. //definethecolorwewanttobedisplayedasthe"clippingwall"
  26. gl.glClearColor(_red,_green,_blue,1.0f);//为底色定义了颜色
  27. //clearthecolorbuffertoshowtheClearColorwecalledabove...
  28. gl.glClear(GL10.GL_COLOR_BUFFER_BIT);//GL10,这里的10代表1.0版本。清空颜色缓存。目前Android中的版本只达到1.1
  29. }
  30. publicvoidsetColor(floatr,floatg,floatb){
  31. _red=r;
  32. _green=g;
  33. _blue=b;
  34. }
  35. }

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

Code:
  1. packagecom.droidnova.android.games.vortex;
  2. importandroid.content.Context;
  3. importandroid.opengl.GLSurfaceView;
  4. importandroid.view.MotionEvent;
  5. publicclassVortexViewextendsGLSurfaceView{
  6. //privatestaticfinalStringLOG_TAG=VortexView.class.getSimpleName();
  7. privateVortexRenderer_renderer;
  8. publicVortexView(Contextcontext){
  9. super(context);
  10. _renderer=newVortexRenderer();
  11. setRenderer(_renderer);
  12. }
  13. publicbooleanonTouchEvent(finalMotionEventevent){
  14. queueEvent(newRunnable(){
  15. publicvoidrun(){
  16. _renderer.setColor(event.getX()/getWidth(),event.getY()/getHeight(),1.0f);
  17. }
  18. });
  19. returntrue;
  20. }
  21. }
  22. /*publicbooleanonTouchEvent(finalMotionEventevent){
  23. queueEvent(newRunnable(){
  24. publicvoidrun(){
  25. _renderer.setColor(event.getX()/getWidth(),
  26. event.getY()/getHeight(),1.0f);
  27. }});
  28. returntrue;
  29. }*/

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

更多相关文章

  1. cocos2dx 调用java层代码
  2. 【Android】在开发项目的时候,利用AndroidStudio开发工具,突然一直
  3. Android(安卓)Layout布局文件里的android:layout_height等属性为
  4. Android(安卓)Layout布局文件里的android:layout_height等属性为
  5. Android开发小知识文章目录
  6. 使用Vitamio打造自己的Android万能播放器(4)——本地播放(快捷搜索
  7. Android(安卓)原生开发、H5、React-Native开发特点
  8. android 窗口式activity
  9. Android(安卓)Launcher一些资源

随机推荐

  1. Android(安卓)studio 升级2.2 之后 Maven
  2. Android(安卓)4.4KitKat AudioFlinger 流
  3. Android(安卓)7.1 系统 部分功能修改 汇
  4. Ubuntu Android编译服务器搭建
  5. 关于 Cannot install platform packages
  6. Android(安卓)OpenGL ES 开发教程(6):GLSu
  7. Android(安卓)简单定制OptionMenu外观
  8. android开发之路3
  9. Android(安卓)得到当前已连接的wifi的信
  10. Android的线程池:ExecutorService和Execut