前言:
项目需求是:通过服务器动态加载网络下载的3D模型。
思路流程:
1、服务器给下载地址
2、下载得到一个压缩包存入沙盒
3、解压得到一个obj和jpg文件
4、模型展示,代码参考上一篇iOS-SceneKit3D引擎展示本地obj模型、
关键的分割线来了:
这样看我们几乎没有遇到问题,网络框架使用:AFNetworking 解压框架使用:SSZipArchive,按照流程操作即可。
但是还是遇到了一系列问题,是必须需要处理的。
遇到问题:
加载出来的模型是白色的,没有贴图。
测试发现在本地的头模可以正常加载贴图,但是网络下载到沙盒的贴图怎么就是无法展示。
展示头模的代码都是一样的,最后经过排查问题得到解决。
问题分析:
上一篇文章的案例中,模型文件是放在Xcode项目里面。这时候Xcode会默认对.scnassets文件夹里的.obj文件做一次优化。
如果我们通过网络把文件下载到沙盒,然后我们从沙盒里读取,这时候是没有的,所以是获取不到贴图的(详细原因待研究)。
解决思路:
把Xcode默认的优化步骤,我们用手动优化一次。
解决方法:
1、打开你的Xcode,在 /Contents/Developer/usr/bin/ 路径里找到 copySceneKitAssets 、 scntool 这2个脚本。
2、在桌面上新建一个文件夹,暂时起名为model,更改后缀为.scnassets 。将copySceneKitAssets、scntool文件拷贝到model.scnassets所在的目录下(也就是桌面)
4、进入终端并cd到桌面下,运行
./copySceneKitAssets model.scnassets -o model-o.scnassets
如果终端没有报错,并且生成了model-o.scnassets,则代表运行成功。
5、我们拿到model-o.scnassets文件夹,放入Xcode项目工程中。项目运行的时候把Resource下的model-o.scnassets文件拷贝到沙盒根目录(这里压缩包也行,文件夹也行,压缩包可以节约空间。如果压缩包记得多一步解压操作)。
这里压缩包也行,文件夹也行,压缩包可以节约空间。
6、通过网络下载头模的压缩包。下载到沙盒的model-o.scnassets路径下面,并展示即可。
完整总结:
1、拿到文件,通过终端生成model-o.scnassets文件。
2、将model-o.scnassets文件拖入Xcode工程里面。
3、运行程序,将model-o.scnassets从Resource文件夹下拷贝到沙盒。
4、下载头模数据(一般是压缩包),解压缩之后,放入沙盒的model-o.scnassets目录下。
5、拿到路径加载头模即可。
网友评论