如何在SCNPlane几何体的每一面绘制不同的图像

时间:2017-08-06 21:51:17

标签: ios swift scenekit scnnode

我的最终目标是让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)
}

谢谢!

1 个答案:

答案 0 :(得分:1)

由于您需要不同的图像,因此需要使用不同的材质。 SceneKit允许指定每个几何元素的材质。 SCNPlane只有一个元素,这就是isDoubleSided只反映背面图像的原因。你有两个选择:

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

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