如何在 SCNPlane Geometry 的每一侧绘制不同的图像

How to draw different images on each side of SCNPlane Geometry

我的最终目标是让 SCNNode 代表漂浮在 space 中的图像。这或多或少很容易用我下面的当前代码完成,但问题是图像的背面没有渲染,因此从背面看是透明的。我希望能够在背面显示不同的图像,以便从两面都能看到一些东西。 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)
}

谢谢!

既然想要不同的图片,就需要使用不同的material。 SceneKit 允许为每个几何元素指定 material。 SCNPlane 只有一个元素,这就是为什么 isDoubleSided 只是背面的镜像。您在这里有两个选择:

  • 创建两个 SCNPlane 几何体,将它们背对背定向并为每个几何体分配不同的图像 geometry.firstMaterial.diffuse.contents
  • SCNGeometrySource(平面的 4 个顶点)和两个 SCNGeometryElements(每边一个:2 个三角形,6 个索引)创建自定义 SCNGeometry,并分配两个 materials(不同的图像)到几何。

第一个选项更简单,但看起来更像是一种解决方法。