gpt4 book ai didi

swift - 如何将多个 SCNScene 添加到一个 SCNScene?

转载 作者:行者123 更新时间:2023-12-04 13:10:35 28 4
gpt4 key购买 nike

我正在尝试创建一个允许放置 3d 对象的应用程序。我能够编写一些有效的代码,但仅限于几何对象。我需要在一个场景中添加多个 SCNScenes。我该如何实现?

我是如何尝试的:

let sceneView = SCNView()
sceneView.scene = SCNScene()
sceneView.allowsCameraControl = true
sceneView.autoenablesDefaultLighting = true
sceneView.backgroundColor = .gray

let firstScene = SCNScene(named: "Earth.usdz")!
let firstSceneNode = firstScene.rootNode.childNode(withName: "Earth", recursively: true)!
firstSceneNode.rotate(by: .init(0, 0, 0, 0), aroundTarget: SCNVector3(0, -30, 10))
sceneView.scene?.rootNode.addChildNode(firstSceneNode)

let secondScene = SCNScene(named: "Venus.usdz")!
let secondSceneNode = secondScene.rootNode.childNode(withName: "Venus", recursively: true)!
sceneView.scene?.rootNode.addChildNode(secondSceneNode)

当我删除 secondScene 时,一切都适用于一个模型。

谢谢!

最佳答案

在 SceneKit 中,每个 SCNScene 可以包含多个连接到场景的 root 节点的 SCNNode。正如您在图像中看到的那样,这些节点不仅可以是几何体,还可以是灯具、相机或粒子系统。

enter image description here

您可以轻松地从任何 SCNScene 树中检索任何所需的 SCNNode 和相应的 Material ,并将其粘贴到其他场景(在本例中为空场景)。

import SwiftUI
import SceneKit

struct ContentView: View {

var body: some View {
SceneKitView().ignoresSafeArea()
}
}

struct SceneKitView: UIViewRepresentable {

let sceneView = SCNView(frame: .zero)

func makeUIView(context: Context) -> SCNView {

sceneView.allowsCameraControl = true
sceneView.autoenablesDefaultLighting = true
sceneView.backgroundColor = .black
sceneView.scene = SCNScene()

let scene01 = SCNScene(named: "Earth.usdz")!
let scene02 = SCNScene(named: "Mars.usdz")!
let scene03 = SCNScene(named: "Sun.usdz")!

let earthNode = scene01.rootNode.childNode(withName: "earthPlanet",
recursively: true)!
earthNode.position.x = -1.0

let marsNode = scene02.rootNode.childNode(withName: "marsPlanet",
recursively: true)!
marsNode.position.x = 0.2

let sunNode = scene03.rootNode.childNode(withName: "sunStar",
recursively: true)!
sunNode.position.x = 1.5

sceneView.scene?.rootNode.addChildNode(earthNode)
sceneView.scene?.rootNode.addChildNode(marsNode)
sceneView.scene?.rootNode.addChildNode(sunNode)
return sceneView
}
func updateUIView(_ uiView: SCNView, context: Context) { }
}

附言

但是您不能将多个 SCNScene 加载到单个 SCNScene 中

关于swift - 如何将多个 SCNScene 添加到一个 SCNScene?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65782576/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com