SceneKit。 哪个方法是?

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

SCNScene(named: String?, inDirectory: String?, options: [NSObject : AnyObject]?) 

要么

 SCNSceneSource(URL url: NSURL!, options: [NSObject : AnyObject]!) 

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

设置这些相应地,我期望各个节点被转换和缩放时,我把它们join到我自己的场景构造的节点在加载的场景。 但是这些选项似乎没有效果。

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

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

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

当你简单地把DAE文件作为一个bundle资源包含的时候,我不相信这个选项是暴露的。 (这可能是一个很好的bug 。)但是,最好使用新的SceneKit资产目录function – 将DAE文件和任何外部资源(纹理)放入带有.scnassets扩展名的文件夹中,而Xcode将在您构build时一起处理它们以针对目标设备进行优化。 然后,当您在Xcode导航器中select该文件夹时,您将得到一个场景构build选项的编辑器:

SceneKit资产目录选项

所有的箱子都有好的检查。 :)(因为第一个没有提供解释:交错意味着组织几何graphics的顶点数据,所以你可以获得更好的GPU内存位置,减less顶点处理期间的caching未命中,这对于embedded式设备的性能非常重要。

嗯,我看不出有关单位的事情。 可能是另一个好文件 。

还有另一种select – 所有的SceneKit对象都实现了NSSecureCoding协议,所以你可以在OS X上加载和预处理你的场景,然后用NSKeyedArchiver 。 将生成的文件作为一个bundle资源包含在你的iOS项目中,Xcode不会对它进行预处理(它已经被压缩和优化了),如果你用.scn扩展名来命名,你可以使用所有的SCNSceneSCNSceneSource方法用于加载它,就像你将(预处理)DAE文件一样。