- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个允许放置 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。正如您在图像中看到的那样,这些节点不仅可以是几何体,还可以是灯具、相机或粒子系统。
您可以轻松地从任何 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/
我正在尝试创建一个允许放置 3d 对象的应用程序。我能够编写一些有效的代码,但仅限于几何对象。我需要在一个场景中添加多个 SCNScenes。我该如何实现? 我是如何尝试的: let sceneVie
我正在使用一个共享项目,并花了很多时间将它更新为 Swift 2,所以我想让它正常工作,但不幸的是我有一个运行时错误需要处理。 Storyboard 上没有任何内容,因此一切都是以编程方式完成的。看到
我一直在尝试将 SCNScene 子类化,因为这似乎是保持场景相关逻辑的最佳位置。现在我不确定是否推荐这样做,所以我的第一个问题是——我是否应该将 SCNScene 子类化,如果不是,为什么不呢? 文
我有一个使用 SpriteKit 和发射器粒子 (sks) 的应用程序,我发现它不如 Scene kit 的粒子 (scnp) 真实。所以我希望将它合并到 SKScene 中,但我不确定这是否可能。所
目前,我正在制作有关ARKit的演示。我正在使用两个 3D 对象 .dae 文件。还实现了该对象的旋转,但在这里我遇到了问题,因为对象连续旋转,我们如何只旋转一次? 如何替换屏幕上的这些对象? 我还提
import UIKit import SceneKit class Scene: SCNScene { var cameraPosition = SCNVector3Make(0, 0, 1
我正在尝试创建包含带有纹理的 SCNScene 的 pod,但出现错误: SceneKit Error: Failed loading : C3DImage src:file:///Users/...
我正在尝试用代码更改当前的 sceneNamed,但我的方法似乎有一些问题。首先,新场景将发生变化,但我必须触摸或评价对象才能发生变化。其次,childNodeWithName 似乎根本没有变化!这是
我正在构建一个 ARKit + SceneKit 应用程序,它需要在现实世界中显示模型。每次用户选择一个按钮时,模型都会改变。 我尝试在按下按钮时将新模型加载到节点中,然后将其添加到场景的根节点,但这
感谢这里提供的答案 -- Programmatically create a UIView with color gradient --我可以为我的应用程序的主屏幕背景设置颜色渐变。 在使用 CAGr
我正在使用 ARKit,我无法从 SCNScene url 获取下载进度。这是我的代码: func downloadModel(hitTestResult: ARHitTestResult) {
我正在为我的 IT 任务做一个 ARKit 应用程序,我遵循了位掩码和碰撞指南,我让它工作,但它只适用于一个简单的盒子,而不是我的 3D 模型,所以有没有办法转换将此代码添加到底部的代码还是我做错了什
我想知道我应该如何从实例化的 SceneKit 场景中提取 SCNRenderer。我正在尝试获取位于 SCNRenderer 中的 AVAudioEngine,以便我可以将音频过滤器应用于我的节点。
如何将 off-screen SCNScene 渲染到 UIImage 中? 我知道 SCNView 提供了一个 -snapshot 方法,但不幸的是,它不适用于离屏 View 。 similar q
我正在使用一种非常简单的方法来设置 SKVideoNode 并通过几何体的漫反射内容将其放置在 SCNNode 中。当我这样做时,唯一纹理更新和正确显示视频的时间是相机或节点移动时。当两者都静止时,纹
我正在尝试找到将 SCNScene 与物理表对齐的最佳策略。就像 ARKit 应用程序 WWWFreeRivers . 目前我只是在测试一个简单的平面模型,其尺寸与表格相同。如果我画出 ARKit 检
我正在 SceneKit 中开发一个项目,用户可以更改场景中的对象,并希望能够在用户点击提交按钮时保存场景的状态。在SceneKit的文档中,有一个函数调用write:https://develope
我正在使用 SceneKit 和 ARKit。我用一系列表情符号制作了一个collectionView。现在,我希望用户能够从 collectionView 中选择表情符号,并且当他/她触摸屏幕时,所
我有一个带有相机设置的 SCNScene 子类,我想在所有子类中使用它。 let scene01 = TheSubclassScene() let scene02 = TheSubclassScene
我正在尝试加载目前只有 3 面墙、天花板和地板的场景。我正在加载我在 blender 中创建的场景并正常加载它。但是,具有 SCNBox 几何形状的 SCNNode 会直接掉落。该盒子附有一个动态物理
我是一名优秀的程序员,十分优秀!