【发布时间】:2021-08-01 14:43:23
【问题描述】:
我想在 SceneView 中将 UIImage 转换为 3D 对象。我找到了以下代码示例,它应该可以工作,但没有显示任何内容。资源“占位符”只是一个随机的 PNG 图像。
import SwiftUI
import SceneKit
struct TestScene: View {
var cameraNode: SCNNode? {
let node = SCNNode(geometry: SCNPlane())
node.geometry?.firstMaterial?.diffuse.contents = UIImage(imageLiteralResourceName: "placeholder")
return node
}
var body: some View {
SceneView(
scene: SCNScene(),
pointOfView: cameraNode,
options: []
)
}
}
struct TestScene_Previews: PreviewProvider {
static var previews: some View {
TestScene()
}
}
编辑:使用示例 SCNScene 测试了此代码的变体,它可以工作!但我需要弄清楚如何使用 SwiftUI 将 UIImage 转换为空 SCNScene 中的材质。
【问题讨论】:
-
您的可选链接是否有效?我的意思是,
geometry和firstMaterial是否已定义,或者它们是否为零? -
这可能就是原因。老实说,我不知道。我只是从这个答案中获取了代码,但它并没有说明它应该如何实现。 stackoverflow.com/a/49451321/15072454
-
您可以设置一对 if/let 而不是使用可选链接来检查这些属性是否已定义。你知道我的意思吗?
-
我可以试试。我认为主要问题是节点似乎从未附加到场景。在这个问题中,他们将其作为 childNode 附加,但我不知道他们将它附加到什么,也无法让它与我的设置一起使用。 stackoverflow.com/q/63921221/15072454
-
是的,您实际上是在将 empty
SCNScene加载到SceneView中,因此您只会得到一个空白屏幕。您需要实现SCNScene,然后将任何节点添加到该场景并将相同的实例加载到您的SceneView。我对 SceneKit 一无所知(我喜欢 SpriteKit),但它是同一个概念。