【发布时间】:2019-11-30 17:53:30
【问题描述】:
我从SCNView 导出场景时遇到问题。
在 Xcode 中,我用光和一个大的透明盒子制作了简单的场景。
在运行的应用程序中会生成彩色的小盒子。
SCNView 中的场景如下所示:
我对此很满意。 但是如果我通过
导出文件@IBAction func exportDAE(_ sender: Any) {
if let scene = view3D.scene {
let panel = NSSavePanel()
panel.allowedFileTypes = ["dae"]
panel.runModal()
if let url = panel.url {
scene.write(to: url,
options: nil,
delegate: nil,
progressHandler: nil);
}
}
}
抛出一个错误:
2019-12-02 13:27:16.450749+0100 ShowMeInstances[83949:14810790] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled}
所有的小盒子都被销毁了,只有一个大的看起来还可以:
有时材料也会被破坏:(那些被破坏的洋红色盒子应该与被包围的盒子颜色相似:
var instancesNode: InstancesNode? = nil
发起者:
class InstancesNode: SCNNode {
typealias CoordUnit = Double
var instanceGenerator: InstanceGenerator<CoordUnit>?
init(with data: Data) throws {
self.instanceGenerator = try InstanceGenerator(from: data)
super.init()
for instance in instanceGenerator?.instances ?? [] {
let coords = instance.coordinates.map( {$0.value})
let color = getMaterialDiffuseColor(for: coords)
let coords3D = convertCoordinatesTo3D(coords)
let node = Instance3D(
name: instance.instanceName,
coordinates: coords3D,
color: color)
self.addChildNode(node)
}
}
.....
}
现在Instance3D 由
class Instance3D: SCNNode {
init (name: String, coordinates: SCNVector3, color: NSColor) {
super.init()
self.name = name
let box = SCNBox(width: 0.2, height: 0.2, length: 0.2, chamferRadius: 0)
let material = SCNMaterial()
material.diffuse.contents = color
material.emission.contents = color
material.lightingModel = .lambert
material.metalness.contents = 0
material.shininess = 1
box.materials = [material]
self.position = coordinates
self.geometry = box
}
一切都被插入到场景中
view3D.scene?.rootNode.addChildNode(instancesNode!)
在 appDelegate 中。如果没有这条线,则只能看到大盒子和灯光。
Blender 也无法导入文件,Blender 无声无息立即爆炸。
可能是什么原因?这是一个功能还是一个错误?
【问题讨论】:
-
能分享一下生成大小立方体的代码吗?
-
大立方体是通过编辑器添加的。给我几分钟。
-
我添加了代码并试图解释这个结构是如何创建的逻辑。