gpt4 book ai didi

swift - 更改 SCNText 中某些单词的颜色

转载 作者:搜寻专家 更新时间:2023-11-01 06:51:50 25 4
gpt4 key购买 nike

我有一个在 AR 应用程序中显示的 SCNText,但我希望某些词具有不同的颜色。

我已尝试执行以下操作: How to change colour of the certain words in label - Swift 3但是 NSString 和标签与 SCN 不同(当然),所以那是行不通的。

下面是我当前的代码,展示了我在做什么:

func addARWords(_ words: String) {

let scene = SCNScene()
var highlightedWords = [String]()

textGeometry = SCNText(string: words, extrusionDepth: 1.0)
textGeometry.font = UIFont(name: "Arial", size: 10)
textGeometry.flatness = 0.2

textNode = SCNNode(geometry: textGeometry)
textNode.position = SCNVector3(myTextPosition.x, myTextPosition.y, myTextPosition.z)
textNode.scale = SCNVector3(myTextScale, myTextScale, myTextScale)
scene.rootNode.addChildNode(textNode)
sceneView.scene = scene
}

最佳答案

单对象文本

SCNText() 类可帮助您创建 3D mono-object-text,因此您无法单独访问其中的每个字符(目前 API 不允许您可以访问每个角色)。相反,您可以使用纹理来绘制整个对象:

let text = scene.rootNode.childNode(withName: "text node", recursively: true)!
text.geometry?.materials.first?.diffuse.contents = UIImage(named: "rainbow.jpg")

enter image description here

enter image description here

但是您会在 SCNText 对象的侧面得到纹理的伪影。

Solution:

因此有两种可能的方法可以在 3D 文本中的不同字符上使用不同的纹理:

  • 使用3D包(如Maya、3dsMax、Cinema4D、Houdini、Blender)创建的3D文本与手工制作UV-mapped纹理。

  • 或者,如果您更喜欢 SceneKit,请使用单词,包含单独的 SCNText 字符,每个字符都有所需的纹理。因此,您必须将多个单独的 SCNText 元素设置为一个 ParentNode 的父级,以便将其作为一个合并组进行移动、旋转和缩放。

多对象文本

如果您想使用简单的颜色映射(不是纹理)——使用我的代码:

func addARWords(_ word01: String, _ word02: String, _ word03: String) {

let textGeometry01 = SCNText(string: word01, extrusionDepth: 1.0)
textGeometry01.font = NSFont(name: "Arial", size: 10)
textGeometry01.flatness = 0.2
textGeometry01.firstMaterial?.diffuse.contents = UIColor.yellow
let textNode01 = SCNNode(geometry: textGeometry01)

let textGeometry02 = SCNText(string: word02, extrusionDepth: 1.0)
textGeometry02.font = NSFont(name: "Arial", size: 10)
textGeometry02.flatness = 0.2
textGeometry02.firstMaterial?.diffuse.contents = UIColor.brown
let textNode02 = SCNNode(geometry: textGeometry02)
textNode02.position.x = 7

let textGeometry03 = SCNText(string: word03, extrusionDepth: 1.0)
textGeometry03.font = NSFont(name: "Arial", size: 10)
textGeometry03.flatness = 0.2
textGeometry03.firstMaterial?.diffuse.contents = UIColor.blue
let textNode03 = SCNNode(geometry: textGeometry03)
textNode03.position.x = 14

let groupNode = SCNNode()
groupNode.addChildNode(textNode01)
groupNode.addChildNode(textNode02)
groupNode.addChildNode(textNode03)

scene.rootNode.addChildNode(groupNode)

groupNode.scale = SCNVector3(x: 2, y: 2, z: 2)
}

addARWords("A", "R", "Kit")

enter image description here

如果您想使用非 UV 贴图纹理 – 添加此代码:

textGeometry01.firstMaterial?.diffuse.contents = UIImage(named: "rainbow.jpg")
textGeometry02.firstMaterial?.diffuse.contents = UIImage(named: "leopard.jpg")
textGeometry03.firstMaterial?.diffuse.contents = UIImage(named: "zebra.jpg")

enter image description here

关于swift - 更改 SCNText 中某些单词的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56717483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com