SCNMaterial中的图像纹理始终为灰色。如何申请颜色?

时间:2019-04-18 14:04:38

标签: ios swift augmented-reality arkit

我正在按照Apple文档中的以下示例编写图像识别应用程序:https://developer.apple.com/documentation/arkit/detecting_images_in_an_ar_experience

到目前为止,一切工作正常,现在我想将透明平面叠加层更改为图像。我像这样设置飞机的材质。

let image = "overlay"
let material = SCNMaterial()
material.locksAmbientWithDiffuse = true;
material.isDoubleSided = false
material.diffuse.contents = image
material.ambient.contents = UIColor.white

let planeNode = SCNNode(geometry: plane)
planeNode.geometry?.materials = [material]

图像被加载和渲染,只是它总是缺少颜色。原始图像为红色,覆盖图为黑白。 我已经尝试了许多不同的环境和漫反射设置,但没有成功。我在这里想念什么?

谢谢

2 个答案:

答案 0 :(得分:1)

在您的代码中,以下行是String类型,而不是UIImage类型:

let image: String = "overlay"

尝试以下代码:

let plane = SCNPlane(width: 10, height: 10)

let image = UIImage(named: "art.scnassets/texture")
// let image = UIColor.red
// let image = UIColor(hue: 0.25, saturation: 0.5, brightness: 0.75, alpha: 1)

let material = SCNMaterial()
material.locksAmbientWithDiffuse = true
material.isDoubleSided = false
material.diffuse.contents = image
material.ambient.contents = UIColor.white

let planeNode = SCNNode(geometry: plane)
planeNode.geometry?.materials = [material]

scene.rootNode.addChildNode(planeNode)

另外,将diffuse素材槽的图像另存为PNG格式。

enter image description here

希望这会有所帮助。

答案 1 :(得分:0)

为以后的参考,这是我发现的内容: 即使将图像保存在不同的组或文件夹中,其名称也不得相同。我使用图像名称作为加载覆盖的参考。当我更改名称并手动(通过开关/大小写)获得引用时,一切正常。