Eps*_*lon 5 macos collada scenekit swift
将 SceneKit 场景的内容导出到 Collada (.dae) 文件时,我得到了意外的结果。这是我到目前为止所拥有的。
我创建了一个沿 x 轴有 5 个球体的简单场景
var x:CGFloat = 0
for i in 0...4 {
let sphere = SCNNode(geometry: SCNSphere(radius: 1))
sphere.name = "sphere\(i+1)"
sphere.position = SCNVector3(x: x, y: 0, z: 0)
exportScene.rootNode.addChildNode(sphere)
x += 2
}
Run Code Online (Sandbox Code Playgroud)
并导出内容
let url = URL(fileURLWithPath: pathName)
exportScene.write(to: url, options: nil, delegate: nil) { totalProgress, error, stop in
print("Export progress: \(totalProgress * 100.0)%")
}
Run Code Online (Sandbox Code Playgroud)
当我将 .dae 文件加载到 3D 程序 (Cheetah 3D) 中时,我期望沿 x 轴有 5 个相同的球体,但出现以下内容。我在导出到 .obj 文件时遇到了类似的问题。
下面的答案是“请记住,DAE 并不能处理 SceneKit 的所有功能”,但不会涉及文件格式的限制。
将 SceneKit 场景导出为 Collada .dae 文件的最简单方法?
问:有人知道如何导出SceneKit场景的内容吗?
看起来像是 SceneKit 日落的开始。
在 SceneKit macOS 应用程序中,.dae这两种格式都无法正确生成。.obj而且,.usdz根本不导出格式。
在iOS应用程序中,仅.usdz正确导出格式(它保留了SCN场景的所有节点的变换和名称)。这.usdz可以在 Maya 中打开。但是.dae和.obj文件仅包含一个球体而不是五个。
如果您对 Maya 中的 USDZ 纹理有疑问,请阅读这篇文章。
请注意,.usdz使用循环时无法正确导出for-in。
import SceneKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let sceneView = self.view as! SCNView
sceneView.backgroundColor = .black
sceneView.scene = SCNScene()
let url = URL(string: "file:///Users/swift/Desktop/model.usdz")!
let sphere1 = SCNNode(geometry: SCNSphere(radius: 0.5))
sphere1.position = SCNVector3(x: -2, y: 0, z: 0)
sceneView.scene!.rootNode.addChildNode(sphere1)
// ...sphere2, sphere3, sphere4...
let sphere5 = SCNNode(geometry: SCNSphere(radius: 0.5))
sphere5.position = SCNVector3(x: 2, y: 0, z: 0)
sceneView.scene!.rootNode.addChildNode(sphere5)
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
sceneView.scene?.write(to: url, delegate: nil) { (prgs, _, _) in
print("Export progress: \(prgs * 100.0)%")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
聚苯乙烯
在 macOS 13.0 Ventura、Xcode 14.1、iOS 16.1 模拟器上进行了测试。
| 归档时间: |
|
| 查看次数: |
689 次 |
| 最近记录: |