Gallery 3D 源码分析汇总

上传人:M****1 文档编号:477099042 上传时间:2023-12-23 格式:DOCX 页数:55 大小:471.98KB
返回 下载 相关 举报
Gallery 3D 源码分析汇总_第1页
第1页 / 共55页
Gallery 3D 源码分析汇总_第2页
第2页 / 共55页
Gallery 3D 源码分析汇总_第3页
第3页 / 共55页
Gallery 3D 源码分析汇总_第4页
第4页 / 共55页
Gallery 3D 源码分析汇总_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《Gallery 3D 源码分析汇总》由会员分享,可在线阅读,更多相关《Gallery 3D 源码分析汇总(55页珍藏版)》请在金锄头文库上搜索。

1、文档供参考,可复制、编制,期待您的好评与关注! Gallery 3D 分析文章分类:移动开发Gallery 3D 分析1.Layer 是个抽象类。有5个变量,分别是mX;mY(位置坐标);mWidth;mHeight(宽与高);mHidden (是否隐藏);一个抽象方法,非抽象子类都有实现。Java代码1. publicabstractvoidgenerate(RenderViewview,RenderView.Listslists);其他的可以在子类中重写Java代码1. /Returnstrueifsomethingisanimating.2. publicbooleanupdate(Re

2、nderViewview,floatframeInterval)3. returnfalse;4. 5. 6. publicvoidrenderOpaque(RenderViewview,GL11gl)7. 8. 9. publicvoidrenderBlended(RenderViewview,GL11gl)10. 11. 12. publicbooleanonTouchEvent(MotionEventevent)13. returnfalse;14. 15. 16. /Allowssubclassestofurtherconstrainthehittestdefinedbylayer17

3、. /bounds.18. publicbooleancontainsPoint(floatx,floaty)19. returntrue;20. 21. 22. protectedvoidonSurfaceCreated(RenderViewview,GL11gl)23. 24. 25. protectedvoidonSizeChanged()26. 27. 28. protectedvoidonHiddenChanged()29. 有好几个类都继承了Layer抽象类:BackgroundLayerCanvasLayerGridLayerHudLayerLoadingLayerRootLay

4、er其中用到的RenderView类Java代码1. finalclassRenderViewextendsGLSurfaceViewimplementsGLSurfaceView.Renderer,SensorEventListener里面有个静态 final 类 Lists里面定义了updateList,opaqueList,blendedList,hitTestList,systemList等以Layer为对象内容的ArrayList;以及一个清空所有ArrayList的方法Clear().Gallery 3D 代码分析之概览文章分类:移动开发Gallery 3D UI 非常炫, 如下图

5、所示: 需要明确的几个问题伪 2D 还是 3D:gallery3d 基于 android SDK OpenGL ES 接口开发,使用了 Java API,没有使用 NDK。图片如何显示:在 OpenGL ES 中,要显示图片,需要定义一个四边形,然后把图片当作 texture 贴到四边形上。布局及特效如何实现:这是 gallery3d 的精华所在,需认真分析。大数据量图片/cache 如何实现和管理:gallery3d 有缓冲区的设计,非常不错,需要认真分析。动画引擎:简单的讲,动画引擎对外可表现为一个接口:Java代码1. floatanimate(floatinitVal,float*cu

6、rrentVal,longtimeElapsed,longduration)即,给定初始值(initVal),动画引擎根据逝去的时间(timeElapsed)和动画总时间(duration)计算下一帧对应的值 (currentVal),这个值可能是位置坐标,也可能是一个矩阵 matrix,或者是其它的属性。显示一帧就调用该函数更新actor的属性,各个帧连起来显示就成了动画。3D坐标与2D坐标的转换:这个需要仔细分析。使用缓冲区对象 (GL_OES_vertex_buffer_object)OpenGL ES 中的顶点数组使得几何图元的显示方便了很多,但是如果每次都要向OPENGL发送一大块数

7、据,而这数据其实并没有修改过,那么这传输就是冗余的。所以 这里添加了缓冲区对象,将顶点数组存储在服务器端的缓冲区对象中。gallery3d 使用了缓冲区对象来保存顶点数据。参考:Nexus One Gallery on Android构件图gallery3d 的基本构件组成及其关系如下所示:Gallery 3D 代码分析之 GLSurfaceView文章分类:移动开发简介SDK 中的android.opengl.GLSurfaceView类提供如下功能: 在 OpenGL ES 和 View 系统之间建立联系; 使得 OpenGL ES 可以工作在 Activity 生命周期中; 可选择合适的

8、 frame buffer 像素格式; 创建并管理一个单独的渲染线程,可以实现平滑的动画; 提供debugging 工具和 API。一个简单的 GLSurfaceView 应用Java代码1. packagecom.example.android.apis.graphics;2. 3. importjavax.microedition.khronos.egl.EGLConfig;4. importjavax.microedition.khronos.opengles.GL10;5. 6. importandroid.app.Activity;7. importandroid.opengl.GL

9、SurfaceView;8. importandroid.os.Bundle;9. 10. publicclassClearActivityextendsActivity11. Override12. protectedvoidonCreate(BundlesavedInstanceState)13. super.onCreate(savedInstanceState);14. mGLView=newGLSurfaceView(this);15. mGLView.setRenderer(newClearRenderer();16. setContentView(mGLView);17. 18.

10、 19. Override20. protectedvoidonPause()21. super.onPause();22. mGLView.onPause();23. 24. 25. Override26. protectedvoidonResume()27. super.onResume();28. mGLView.onResume();29. 30. 31. privateGLSurfaceViewmGLView;32. 33. 34. classClearRendererimplementsGLSurfaceView.Renderer35. publicvoidonSurfaceCre

11、ated(GL10gl,EGLConfigconfig)36. /Donothingspecial.37. 38. 39. publicvoidonSurfaceChanged(GL10gl,intw,inth)40. gl.glViewport(0,0,w,h);41. 42. 43. publicvoidonDrawFrame(GL10gl)44. gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);45. 46. 这个程序功能很简单,每帧绘制时将屏幕设置成黑色。但它是一个完整的工作在 Activity 生命周期中的O

12、penGL 程序。当 activity 暂停时,它暂停渲染;当 activity 继续时,它继续渲染。可以将这个程序用作非交互式的 demo 程序。可以在 ClearRenderer.onDrawFrame() 接口中增加 OpenGL 调用做很多的绘制。GLSurfaceView.Render 接口有三个方法: * onSurfaceCreated():该方法在渲染开始前调用,OpenGL ES 的绘制上下文被重建时也会被调用。当 activity 暂停时绘制上下文会丢失,当 activity 继续时,绘制上下文会被重建。另外,创建长期存在的 OpenGL 资源(如 texture)往往也在

13、这里进行。 * onSurfaceChanged():当 surface 的尺寸发生改变时该方法被调用。往往在这里设置 viewport。若你的 camera 是固定的,也可以在这里设置 camera。 * onDrawFrame():每帧都通过该方法进行绘制。绘制时通常先调用 glClear函数来清空 framebuffer,然后在调用 OpenGL ES 的起它的接口进行绘制。输入如何处理若是开发一个交互型的应用(如游戏),通常需要子类化 GLSurfaceView,由此可以获取输入事件。下面有个例子:Java代码1. packagecom.google.android.ClearTest;2. 3. importjavax.microedition.khronos.egl.EGLConfig;4. impor

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 国内外标准规范

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号