- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个在 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")
但是您会在 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")
如果您想使用非 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")
关于swift - 更改 SCNText 中某些单词的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56717483/
在陈述我的问题之前,我想澄清一下,我的问题有多个答案,不幸的是,没有一个能解决我的问题。请不要将其标记为重复项。 现在这是我必须创建文本节点的代码 let textNode: SCNNode = {
我的 SceneKit 应用程序中有以下代码,但出于某种原因,文本从未显示在屏幕上。 let text = SCNText(string: item.label, extrusionDepth: 4
我正在读取陀螺仪并将 SCNText 几何图形的字符串更改为陀螺仪的偏航值。更改发生在每 1/30 秒调用一次的陀螺仪处理程序内部。 SCNText 几何体是使用 Interface Builder
我正在尝试使用以下代码设置字体大小: func setupText(){ let text = SCNText(string: "textString", extrusionDepth: 4
如何计算SCNText中心与其左边缘角和右边缘角之间的距离。 例如,使用下面的代码,如果单词是“texas”,则字母“x”的中间将是枢轴点,因为它位于单词的中间。我如何获得字母“t”左侧和字母“x”之
我想在 SceneKit 场景中显示一些文本,其中字符具有不同的颜色。 documentation of SCNText状态: When you create a text geometry from
我可以在 AR 环境中显示 SCNText,但是当我尝试将文本包装在固定宽度和高度的容器中时,而不是以多行显示它会重叠。 let text = SCNText(string: ktext, extru
我有一个在 AR 应用程序中显示的 SCNText,但我希望某些词具有不同的颜色。 我已尝试执行以下操作: How to change colour of the certain words in l
如何向 SCNtext 插入背景(例如“对话泡泡”或矩形)?具体来说,如果我将“Hello World”作为 SCNText 插入(然后显然作为场景中的 SCNNode),那么我如何才能仅为该文本添加
为什么这些代码行有效: let text = NSString(string: "Test") (node.geometry as! SCNText).string = text 但这些没有: let
我没有得到如何从 SCNText 获取浮点值。如果我打印 SCNText.string,我可以在 SCNText 中看到字符串。现在我想要 SCNText 具有按字符流动的浮点值,我的要求是从中提取浮
当我运行这段 SceneKit 代码时: let txt = SCNText(string: "Hello", extrusionDepth: 0.2) let textNode = SCNNode(
我试过右对齐,但还是左对齐。 let txt = SCNText(string: "TEST", extrusionDepth: 10) txt.chamferRadius = 5 //0
我已经设法将一个立方体 (SCNNode) 放置在相机指向的表面上,但是我发现很难完成将文本也放置在相同位置的简单(?)任务。 我已经创建了 SCNText 和后续的 SCNNode,但是当我将它添加
如何设置 SCNText 对象的纹理?这就是我所拥有的,外观没有任何变化: // myNode is a working SCNText element let mat = SCNMaterial()
我一直在寻找使用 arkit 显示一些文本的方法。为此,我创建了一个 SCNText 对象,为其指定字体大小并按比例缩小。这似乎是调节其大小的推荐方法。 现在为了定位,我需要计算 SCNText 对象
我有一个 SCNText 元素: print(NodeElement?.geometry?) // output `Optional( )` 但是,当我这样做时: print(self.editing
我在 AR 屏幕上显示了一个 SCNText 节点。我正在尝试使用 SCNAction 属性为其设置动画。但它不能正常工作。有没有其他方法可以使节点动画化? 此外,如果我想插入图像来代替文本,我应该怎
我正在尝试创建一个具有多个 SCNText 和 SCNPlane 的 AR 应用程序。我正在尝试将每个 SCNText 放在 SCNPlane 中,但是因为这 figure显示,文本总是在平面之外。
我想在 ARSCNView 中的 SCNText 周围添加一个 SCNPlane。因此,我需要使用 SCNText 创建的文本的 textSize,例如: 正如您从图像中看到的那样,有一个错误表明 S
我是一名优秀的程序员,十分优秀!