没有合适的资源?快使用搜索试试~ 我知道了~
Gallery_3D_源码分析汇总
3星 · 超过75%的资源 需积分: 3 14 下载量 141 浏览量
2011-05-27
14:48:37
上传
评论
收藏 63KB DOCX 举报
温馨提示
试读
53页
网上荡的。个人感觉不错,应该值得下。upupupupupuupuppupupupupupupupupupupupupupuppupupupupupppup
资源推荐
资源详情
资源评论
Gallery 3D 分析
文章分类:移动开发
Gallery 3D 分析
1.Layer 是个抽象类。
有 5 个变量,分别是 mX;mY(位置坐标);mWidth;mHeight(宽与高);mHidden (是否隐藏);
一个抽象方法,非抽象子类都有实现。
Java 代码
1. publicabstractvoidgenerate(RenderViewview,RenderView.Lists
lists);
其他的可以在子类中重写
Java 代码
1. //Returnstrueifsomethingisanimating.
2. publicbooleanupdate(RenderViewview,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. //Allowssubclassestofurtherconstrainthehittestdefin
edbylayer
17. //bounds.
18. publicbooleancontainsPoint(floatx,floaty){
19. returntrue;
20. }
21.
22. protectedvoidonSurfaceCreated(RenderViewview,GL11gl){
23. }
24.
25. protectedvoidonSizeChanged(){
26. }
27.
28. protectedvoidonHiddenChanged(){
29. }
有好几个类都继承了 Layer 抽象类:
BackgroundLayer
CanvasLayer
GridLayer
HudLayer
LoadingLayer
RootLayer
其中用到的 RenderView 类
Java 代码
1. finalclassRenderViewextendsGLSurfaceViewimplementsGLSurfa
ceView.Renderer,SensorEventListener
里面有个静态final 类Lists
里面定义了 updateList,opaqueList,blendedList,hitTestList,systemList 等以 Layer 为对象内容的
ArrayList;以及一个清空所有 ArrayList 的方法 Clear().
Gallery 3D 代码分析之概览
文章分类:移动开发
Gallery 3D UI 非常炫, 如下图所示:
需要明确的几个问题
伪 2D 还是 3D:
gallery3d 基于 android SDK OpenGL ES 接口开发,使用了 Java API, 没有使用 NDK。
图片如何显示:
在 OpenGL ES 中,要显示图片,需要定义一个四边形,然后把图片当作 texture 贴到四边形上。
布局及特效如何实现:
这是 gallery3d 的精华所在,需认真分析。
大数据量图片/cache 如何实现和管理:
gallery3d 有缓冲区的设计,非常不错,需要认真分析。
动画引擎:
简单的讲,动画引擎对外可表现为一个接口:
Java 代码
1. floatanimate(floatinitVal,float*currentVal,longtimeElapse
d,longduration)
即,给定初始值(initVal),动画引擎根据逝去的时间(timeElapsed)和动画总时间(duration)计算下一帧对
应的值 (currentVal) ,这个值可能是位置坐标,也可能是一个矩阵 matrix,或者是其它的属性。显示一帧
就调用该函数更新 actor 的属性,各个帧连起来显示就成了动画。
3D 坐标与 2D 坐标的转换:
这个需要仔细分析。
使用缓冲区对象 (GL_OES_vertex_buffer_object)
OpenGL ES 中的顶点数组使得几何图元的显示方便了很多,但是如果每次都要向 OPENGL 发送一大
块数据,而这数据其实并没有修改过,那么这传输就是冗余的。所以 这里添加了缓冲区对象,将顶点数
组存储在服务器端的缓冲区对象中。
gallery3d 使用了缓冲区对象来保存顶点数据。
参考:
Nexus One Gallery on Android
一个简单的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.GLSurfaceView;
8. importandroid.os.Bundle;
9.
10. publicclassClearActivityextendsActivity{
11. @Override
12. protectedvoidonCreate(BundlesavedInstanceState){
13. super.onCreate(savedInstanceState);
14. mGLView=newGLSurfaceView(this);
15. mGLView.setRenderer(newClearRenderer());
16. setContentView(mGLView);
17. }
18.
19. @Override
20. protectedvoidonPause(){
21. super.onPause();
22. mGLView.onPause();
23. }
24.
25. @Override
26. protectedvoidonResume(){
27. super.onResume();
28. mGLView.onResume();
29. }
30.
31. privateGLSurfaceViewmGLView;
32. }
33.
34. classClearRendererimplementsGLSurfaceView.Renderer{
35. publicvoidonSurfaceCreated(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_BUF
FER_BIT);
45. }
46. }
剩余52页未读,继续阅读
资源评论
- 棉花团2013-01-14不是我想要的,决定自己写一个
苏家晓睿
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功