简介
在之前的文章中都是我们使用代码绘制的图形图像,而如果我们想要使用别人设计的模型时就需要使用到模型加载。和桌面不同的是,Android上的模型加载库推荐使用jPCT-AE,官网http://www.jpct.net/jpct-ae/,可以直接下载并参考文档学习使用。当3D大师们使用Blender、3DS Max或者Maya等软件制作模型后,可以导出例如.blend,.x3d,.obj等等各种类型的文件,我们要使用.obj类型的文件来读取模型的信息。jPCT-AE软件已经封装好读取的方法,虽然jPCT-AE使用方便,但是因为它封装了各个功能,使用起来就变成了它的方法调用而不是我们熟悉的OpenGL ES代码了,这里我们还是选择自己封装读取方法。
一个模型的文件可能只有一个obj文件,此时表示该模型没有纹理文件,只是使用纯色来绘制的图形;当有纹理文件时,还会有一个.mtl文件,用来存放纹理文件信息,还会有各种图片。我们这里使用免费的3d网站(https://free3d.com/)来找一些模型,我们找一个简单的没有纹理的模型:https://free3d.com/3d-model/plastic-cup-high-poly-version-79161.html,下载之后我们使用文本编辑器打开.obj文件。参考https://en.wikipedia.org/wiki/Wavefront_.obj_file我们先分析下obj文件的内容格式
#开头 注释行,读取时忽略
mtllib file.mtl 使用的纹理文件名
g default 使用的组名称(一个obj可含多个group)
o testvt.obj 对象名称(Object name)
v -0.5 -0.5 0.1 顶点
vn 0 0 1 法向量(可能不是单位向量)
vt 0 1 纹理坐标
usemtl Default 当前所用纹理
f 1 2 3 4 四边形顶点索引,索引起始于1
f 1 2 3 三角形顶点索引
f 1/1 2/2 3/3 顶点索引/纹理索引
f 1//1 2//2 3//3 顶点索引//法向量索引
f 1/1/1 2/2/1 3/3/1 4/4/1 顶点索引/纹理索引/法向量索引
l 5 8 1 2 4 9 线 暂时忽略
我们先尝试读取这个没有纹理的模型,模型是一只鹿,因为它的顶点比较大,我们设置观察点时需要注意,绘制方面就比较简单了,和绘制三角形没有区别,这里我们设置颜色固定为白色,效果图如下:
因为都是白色的,只能看到轮廓,无法看到细节,使用纹理才能看到更好的效果,下一章我们学习纹理和光照效果的读取与设置。
网友评论