SceneKit.哪种方式起来了?

Bas*_*Man 7 collada ios scenekit swift

似乎大多数3D创作应用程序使用Z作为"向上"轴.而SceneKit使用Y作为'向上'轴.SceneKit允许您将场景加载为Collada .DAE文件.通过以下任一方式加载场景时:

SCNScene(named: String?, inDirectory: String?, options: [NSObject : AnyObject]?)
Run Code Online (Sandbox Code Playgroud)

要么

SCNSceneSource(URL url: NSURL!, options: [NSObject : AnyObject]!)
Run Code Online (Sandbox Code Playgroud)

您可以指定选项,包括SCNSceneSourceConvertToYUpKey和SCNSceneSourceConvertUnitsToMetersKey.

相应地设置这些,我期望当我将它们添加到从加载的场景中的节点构造的我自己的场景中时,各个节点被变换和缩放.但这些选项似乎没有效果.

let myScene = SCNScene(named: "Scene.dae", inDirectory: nil, options: [SCNSceneSourceConvertToYUpKey:true, SCNSceneSourceConvertUnitsToMetersKey:25.4])
Run Code Online (Sandbox Code Playgroud)

我误解了这些选项参数的含义吗?

ric*_*ter 10

SceneKit不直接在iOS上加载DAE(或ABC)文件 - 它从私有Apple格式加载场景,当您在项目中包含场景文件时,Xcode会自动转换为该格式.此转换的一部分是转换上轴的选项.

当您只是将DAE文件包含为捆绑资源时,我不相信该选项会暴露.(这可能是一个很好的文件错误.)但是,最好使用新的SceneKit资产目录功能,无论如何 - 把你的DAE文件和任何外部资源(纹理)放到一个带.scnassets扩展名的文件夹中,和Xcode在构建时将一起处理它们以优化目标设备.然后,当您在Xcode导航器中选择该文件夹时,您将获得场景构建选项的编辑器:

SceneKit资产目录选项

那里的所有盒子都很好检查.:)(由于第一个没有解释:交错意味着组织几何的顶点数据,因此您可以获得更好的GPU内存位置,以便在顶点处理期间减少缓存未命中,这对于嵌入式设备的性能非常重要.)

嗯,我在那里看不到任何关于单位的事情.可能是另一个好的bug提交.

还有另一个选项 - 所有SceneKit对象都实现了NSSecureCoding协议,因此您可以在OS X上加载和预处理场景,然后用NSKeyedArchiver它来写出来.将生成的文件作为捆绑包资源包含在iOS项目中,Xcode不会对其进行预处理(它已经过压缩和优化) - 如果您使用.scn扩展名来命名,则可以使用所有SCNSceneSCNSceneSource方法像加载(预处理的)DAE文件一样加载它.

  • 要将dae文件转换为可由SCNScene读取的文件(命名为:...您可以使用终端中的以下命令行手动转换文件:**/Applications/Xcode.app/Contents/Developer/usr/bin/scntool --convert InFile.dae --format c3d --output OutFile.dae --force-y-up --force-interleaved --look-for-pvrtc-image**(当然,替换InFile.dae和OutFile.dae由您自己的文件名)抱歉,评论中没有真正的格式. (13认同)