我的最终目标是让SCNNode代表浮动在空间中的图像。使用下面的当前代码或多或少地容易实现这一点,但问题是图像的背面没有被渲染,因此从背面透明。我希望能够在背面显示不同的图像,以便从两侧看到一些东西。 isDoubleSided
属性在这里不起作用,因为它只是模仿前面的内容。有任何想法吗?我研究了从Sources和Elements创建自己的几何体的想法,但它看起来非常复杂,应该非常简单。
我目前的代码:
private func createNode() -> SCNNode{
let scaleFactor = image.size.width/0.2
let width = image.size.width/scaleFactor
let height = image.size.height/scaleFactor
let geometry = SCNPlane(width: width, height: height)
let material = SCNMaterial()
material.diffuse.contents = image
geometry.materials = [material]
return SCNNode(geometry: geometry)
}
谢谢!
答案 0 :(得分:1)
由于您需要不同的图像,因此需要使用不同的材质。 SceneKit允许指定每个几何元素的材质。 SCNPlane
只有一个元素,这就是isDoubleSided
只反映背面图像的原因。你有两个选择:
SCNPlane
几何图形,将它们背对背,并为每个geometry.firstMaterial.diffuse.contents
分配不同的图像SCNGeometry
(平面的4个顶点)和两个SCNGeometrySource
(每边一个:2个三角形,6个索引)创建自定义SCNGeometryElements
,并分配两种材质的数组(不同图像)到几何。第一个选项更容易,但看起来更像是一种解决方法。