我无法理解.dae文件中的几何应该如何加载到iOS SceneKit场景图中.
我知道你可以.dae直接将文件加载到SCNScene中:
// create a new scene
let scene = SCNScene("test.scnassets/test.dae")
Run Code Online (Sandbox Code Playgroud)
我也知道你可以创建一个空的SCNScene并将内置的3D对象作为子节点添加到其中:
let scene = SCNScene()
var sphereNode = SCNNode()
sphereNode.geometry = SCNSphere(radius: 1.0)
scene.rootNode.addChildNode(sphereNode)
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,您可以将.dae文件加载到SCNNode而不是使用内置对象吗?或者是否.dae需要首先将所有文件加载到SCNScene中?
如果后者为真,那么如何将SCNNode对象放在SCNScene下的场景图层次结构中的正确位置?编辑#1:
这对我来说很有用,这是@FlippinFun建议的修改版本.
let url = NSBundle.mainBundle().URLForResource("test.scnassets/test", withExtension: "dae")
let source = SCNSceneSource(URL: url, options: nil)
let block = source.entryWithIdentifier("ID10", withClass: SCNGeometry.self) as SCNGeometry
scene.rootNode.addChildNode(SCNNode(geometry: block))
Run Code Online (Sandbox Code Playgroud)
但也许有更好的方法?以上涉及从.dae树手动加载每个标识符.在我的文件中,有一个节点"SketchUp",子标识符为"ID2"和"ID10".此方法不允许您加载根"SketchUp".(我收到运行时错误.)
我正在尝试将在Cheetah 3D和Blender 3D中创建的动画加载到Scene Kit中,但我得到的是一堆"无标题动画",每个动画都是相同的动画.
有谁知道如何从Blender或Cheetah 3D正确导出这些,以便Scene Kit可以使用它们?
我正在使用iOS 11(for ARKit),虽然许多人指出SceneKit来自Apple 的示例应用程序与Fox,我在该示例项目(文件)中使用的扩展程序有问题,以添加动画:
extension CAAnimation {
class func animationWithSceneNamed(_ name: String) -> CAAnimation? {
var animation: CAAnimation?
if let scene = SCNScene(named: name) {
scene.rootNode.enumerateChildNodes({ (child, stop) in
if child.animationKeys.count > 0 {
animation = child.animation(forKey: child.animationKeys.first!)
stop.initialize(to: true)
}
})
}
return animation
}
}
Run Code Online (Sandbox Code Playgroud)
看来这个扩展非常方便,但我不确定如何迁移它现在它已被弃用?它SceneKit现在是默认内置的吗?
该文档并未真正显示有关其被弃用的原因或从何处开始的详细信息.
谢谢