Ⅰ Android OpenGLES2.0(十六)——3D模型贴图及光照处理(obj+mtl)
在Android OpenGLES2.0(十四)——Obj格式3D模型加载中实现了Obj格式的3D模型的加载,加载的是一个没有贴图,没有光照处理的帽子,为了呈现出立体效果,“手动”加了光照,拥有贴图的纹理及光照又该怎么加载呢?
本篇博客例子中加载的是一个卡通形象皮卡丘,资源是在网上随便找的一个。加载出来如图所示:
obj内容格式如下:
mtl文件内容格式如下:
关于Obj的内容格式,在上篇博客中已经做了总结,本篇博客中使用的obj,可以看到f后面的不再跟的是4个数字,而是 f 2/58/58 3/59/59 17/60/60 这种样子的三组数,每一组都表示为顶点坐标索引/贴图坐标点索引/顶点法线索引,三个顶点组成一个三角形。而头部的 mtllib pikachu.mtl 则指明使用的材质库。
而mtl格式文件中,主要数据类型为:
模型加载和之前的模型加载大同小异,不同的是,这次我们需要将模型的贴图坐标、顶点法线也一起加载,并传入到shader中。其他参数,有的自然也要取到。
模型加载以obj文件为入口,解析obj文件,从中获取到mtl文件相对路径,然后解析mtl文件。将材质库拆分为诸多的单一材质。obj对象的 加载,根据具使用材质不同来分解为多个3D模型。具体加载过程如下:
顶点着色器
片元着色器
完成了以上准备工作,就可以调用 readMultiObj 方法,将obj文件读成一个或多个带有各项参数的3D模型类,然后将每一个3D模型的参数传入shader中,进而进行渲染:
Ⅱ 安卓手机有没有能做3d模型的软件
手机端实现的建模技术已经支持3D扫描、数字雕刻、3D打印等高端技术,指尖触摸和拖动创很精确,对用户来说,触摸界面更加友好,适合随时随地发挥创意。以下是手机上的3D建模软件总结:
PhotoSynthforiPhone
一款微软开发的全景拍摄应用老烂,该应用会判断出照片和照片之间的共同点,快速建构将各种不同角度和来源照片的360度平面全景照片。
QloneMat
一个黑科技感满点的AR3D扫描建模工具,可以超级方便快速地把现实物品扫描成3D模型文件。目前仅支持英明高文语言。
Sculpt建模app
一款数字雕刻和绘画应用程序,用户在线可以简单的绘制3D图形。
Putty3d
一款超好用的手机在线3D素描簿,支持3D建模、3D打印等高激含尺端操作,实现简单触摸和拖动雕刻。
如果想偷懒的话,可以利用ThingJS3D模型库,有十万个3D模型、场景供选择,不用重复建模,直接拖动到3D场景中。效果还不错滴
工具类
植物类
建筑类
Ⅲ 一、Android 虚拟机内存模型
jvm运行时数据区域解析
刘望舒的BLOG
虚拟机的内存模型
1.程序计数器: 确定程序指令执行顺序的,是唯一一块不会发生内存溢出的区域
2. Java虚拟机栈
**它也是线程私有的,负责存储方法内的局部变量,方法出口等。每执行一个方法都相当于压如一个栈帧,方法执行完比后这个栈帧从Java虚拟机栈中弹出。
3.本地方法区
负责管理虚拟机用到的 C 的方法。
4.堆内存区域
Java堆是一块被所有线程共享的区域,用来存放对象的实例。它不需要物理上连续,只需要逻辑上连续就可以。
5.方法区
方法区是被所有线程共享的的内存区域,用来存放已经被Java虚拟机加载的类的结构信息:运行时常量池,字段,方法信息,静态变量等数据。
class文件的内容