我有一个SCNText,我在AR应用程序中显示,但我希望某些单词是不同的颜色。
我尝试过这样做:How to change colour of the certain words in label - Swift 3,但NSString和labels与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
}发布于 2019-06-23 22:31:57
单对象文本
API类帮助你创建一个3D mono-object-text,,因此你不能单独访问它里面的每个角色(目前SCNText()不允许你访问每个角色)。相反,可以使用纹理来绘制整个对象:
let text = scene.rootNode.childNode(withName: "text node", recursively: true)!
text.geometry?.materials.first?.diffuse.contents = UIImage(named: "rainbow.jpg")


但是你会在SCNText对象的侧面得到纹理的伪像。
Solution:
在3D text中,有两种可能的方法来对不同的字符使用不同的纹理
SCNText字符的单词,每个字符都具有所需的纹理。因此,您必须将多个单独的SCNText元素设置为一个ParentNode的父元素,才能将其作为一个合并组进行移动、旋转和缩放。多对象文本
如果您想要使用纹理simple color mapping (而不是纹理)-请使用我的代码
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")

,如果您想要使用非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")

https://stackoverflow.com/questions/56717483
复制相似问题