首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SCNMaterial中的图像纹理始终为灰色。如何应用颜色?

SCNMaterial中的图像纹理始终为灰色。如何应用颜色?
EN

Stack Overflow用户
提问于 2019-04-18 22:04:38
回答 2查看 1.4K关注 0票数 3

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

到目前为止一切都很好,现在我想把透明的平面叠加改成一个图像。我把飞机的材质设置成这样。

代码语言:javascript
复制
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]

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

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-25 22:41:39

为了将来参考,这里是我发现的:图像不应该具有相同的名称,即使保存在不同的组或文件夹中。我使用图像的名称作为引用来加载覆盖图。当我手动(通过开关/大小写)更改名称并获取引用时,一切都很正常。

票数 0
EN

Stack Overflow用户

发布于 2019-04-19 13:17:49

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

代码语言:javascript
复制
let image: String = "overlay"

尝试以下代码:

代码语言:javascript
复制
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格式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55747744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档