看起来,大多数3D创作应用程序都使用Z作为“Up”轴。而SceneKit使用Y作为“Up”轴。SceneKit允许您将场景加载为Collada .DAE文件。通过以下任何一种方式加载场景时:
SCNScene(named: String?, inDirectory: String?, options: [NSObject : AnyObject]?)或
SCNSceneSource(URL url: NSURL!, options: [NSObject : AnyObject]!)您可以指定选项,包括SCNSceneSourceConvertToYUpKey和SCNSceneSourceConvertUnitsToMetersKey。
因此,当我将各个节点添加到由加载场景中的节点构建的我自己的场景中时,我期望各个节点被转换和缩放。但这些选择似乎没有任何效果。
let myScene = SCNScene(named: "Scene.dae", inDirectory: nil, options: [SCNSceneSourceConvertToYUpKey:true, SCNSceneSourceConvertUnitsToMetersKey:25.4])我是否误解了这些选项参数的含义?
发布于 2014-07-14 18:31:39
SceneKit不直接在iOS上加载DAE (或ABC)文件--它从一个私有的Apple加载场景,当您在项目中包含场景文件时,Xcode会自动转换为这种格式。此转换的一部分是转换向上轴的选项。
我不认为当您只是将DAE文件作为包资源包含时,就会公开该选项。(这可能是一个很好的缺陷要归档。)不过,最好还是使用新的SceneKit资产目录功能--将DAE文件和任何外部资源(纹理)放入一个具有.scnassets扩展名的文件夹中,Xcode将一起处理它们,以便在构建时对目标设备进行优化。然后,当您在Xcode导航器中选择该文件夹时,您将得到一个用于场景构建选项的编辑器:

所有的箱子都可以检查。)(因为第一个没有解释:交织意味着为一个几何学组织顶点数据,因此您可以获得更好的GPU内存局部性,因为在顶点处理过程中丢失缓存的次数较少,这对嵌入式设备的性能非常重要。)
嗯,不过,我没看到任何关于单位的事。可能是另一个要归档的好错误。
还有另一种选择--所有SceneKit对象都实现了NSSecureCoding协议,所以您可以在OS上加载和预处理场景,然后使用NSKeyedArchiver将其写出来。将结果文件包含在您的iOS项目中作为一个包资源,Xcode不会对它进行预处理(它已经被压缩和优化了) --如果您用.scn扩展名命名它,您可以使用所有SCNScene和SCNSceneSource方法加载它,就像加载(预处理) DAE文件一样。
https://stackoverflow.com/questions/24739248
复制相似问题