MTL本来就是材质文件,是以模型为载体一起的,不能单独导入的,打个比如说,我要一张画但不要画这幅画的这张纸,那画上的内容能单独拿下来吗,不行,不知道你听懂没有
iOS可以加载的3D模型有3种,分别是.dae和.obj和.scn。其中.dae和.obj一般可以通过3D软件导出该格式的模型。
demo点我,先爽为快
导出.dae格式的3D模型时,有些软件还能导出模型所需要的材质,即.jpg图片。有些导出时仅仅只有.dae文件。【比如,我在Mac上用Blender导出的就包含材质,同事在windows上,用Cinema 4D导出的仅仅只有dae文件】
不过,没有导出材质也不用怕,当在Xcode上加载dae文件的时候,会有提示。
除此之外,我们还可以手动为某个节点添加材质。具体 *** 作是先找点对应的node,然后再进行设置:
node.geometry?.firstMaterial?.diffuse.contents = UIImage(named: "3d66Model-515552-1-52.jpg")
具体见demo。
导出obj格式的模型时,还会包含.mtl文件和.jpg文件。不过我还不知道怎么使用.mtl,demo中的例子,是直接手动设置材质。 【希望哪位大佬指导下,怎么使用.mtl文件】
这个格式,使用起来,也与.dae格式没什么区别,也是需要将材质放在相同目录下。具体见demo.
在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中,进而进行渲染:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)