gallery3d 代码分析

引用地址:http://www.linuxgraphics.cn/android/gallery3d_overview.html
简介

gallery3d 是 Google Nexus one 手机上的媒体浏览程序,它的 3D UI 非常眩,如下图所示:


需要明确的几个问题
伪 2D 还是 3D:

需要明确的几个问题
伪 2D 还是 3D:

gallery3d 基于 android SDK OpenGL ES 接口开发,使用了 Java API,没有使用 NDK。

图片如何显示:

OpenGL ES 中,要显示图片,需要定义一个四边形,然后把图片当作texture 贴到四边形上。

布局及特效如何实现:

这是 gallery3d 的精华所在,需认真分析。

大数据量图片/cache 如何实现和管理:

gallery3d 有缓冲区的设计,非常不错,需要认真分析。

动画引擎:

简单的讲,动画引擎对外可表现为一个接口:

float animate(float initVal, float *currentVal, long timeElapsed, long duration)

即,给定初始值(initVal),动画引擎根据逝去的时间(timeElapsed)和动画总时间(duration)计算下一帧对应的值(currentVal),这个值可能是位置坐标,也可能是一个矩阵 matrix,或者是其它的属性。显示一帧就调用该函数更新actor的属性,各个帧连起来显示就成了动画。

3D坐标与2D坐标的转换:

这个需要仔细分析。

使用缓冲区对象 (GL_OES_vertex_buffer_object)

OpenGL ES 中的顶点数组使得几何图元的显示方便了很多,但是如果每次都要向 OPENGL 发送一大块数据,而这数据其实并没有修改过,那么这传输就是冗余的。所以这里添加了缓冲区对象,将顶点数组存储在服务器端的缓冲区对象中。

gallery3d 使用了缓冲区对象来保存顶点数据。

构件图

gallery3d 的基本构件组成及其关系如下所示:

构件图
构件图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值