SCNText - 背景 "speech bubble"
SCNText - background "speech bubble"
如何向 SCNtext 插入背景(例如 "speech bubble" 或矩形)?
具体来说,如果我将 "Hello World" 作为 SCNText 插入(然后显然作为场景中的 SCNNode),那么如何仅为该文本添加背景?它会是一个 UIimage,它将作为 SCNNode 插入到“Hello World?”中的相同位置吗?
(请记住,在 SceneKit 中没有任何 SCNNode 的背景)
您可以将 SCNPlane 用作另一个 SCNNode,将 SCNMaterial 分配给它的几何体,然后将那个 material 的 diffuse.contents 属性 设置为您要使用的背景图像。然后是的,将它放置在与 SCNText 节点相同的位置,但 position.z 值略低于 SCNText 节点,因此它将在它后面。如果您打算移动或旋转文本节点,请将 SCNPlane 节点添加为文本节点的子节点。
这是一个示例代码。它将添加 SCNPlane
作为 SCNTextNode
:
的背景
let minVec = textNode.boundingBox.min
let maxVec = textNode.boundingBox.max
let bound = SCNVector3Make(maxVec.x - minVec.x,
maxVec.y - minVec.y,
maxVec.z - minVec.z);
let plane = SCNPlane(width: CGFloat(bound.x + 1),
height: CGFloat(bound.y + 1))
plane.cornerRadius = 0.2
plane.firstMaterial?.diffuse.contents = UIColor.black.withAlphaComponent(0.9)
let planeNode = SCNNode(geometry: plane)
planeNode.position = SCNVector3(CGFloat( minVec.x) + CGFloat(bound.x) / 2 ,
CGFloat( minVec.y) + CGFloat(bound.y) / 2,CGFloat(minVec.z - 0.01))
textNode.addChildNode(planeNode)
planeNode.name = "text"
希望对大家有所帮助
如何向 SCNtext 插入背景(例如 "speech bubble" 或矩形)? 具体来说,如果我将 "Hello World" 作为 SCNText 插入(然后显然作为场景中的 SCNNode),那么如何仅为该文本添加背景?它会是一个 UIimage,它将作为 SCNNode 插入到“Hello World?”中的相同位置吗? (请记住,在 SceneKit 中没有任何 SCNNode 的背景)
您可以将 SCNPlane 用作另一个 SCNNode,将 SCNMaterial 分配给它的几何体,然后将那个 material 的 diffuse.contents 属性 设置为您要使用的背景图像。然后是的,将它放置在与 SCNText 节点相同的位置,但 position.z 值略低于 SCNText 节点,因此它将在它后面。如果您打算移动或旋转文本节点,请将 SCNPlane 节点添加为文本节点的子节点。
这是一个示例代码。它将添加 SCNPlane
作为 SCNTextNode
:
let minVec = textNode.boundingBox.min
let maxVec = textNode.boundingBox.max
let bound = SCNVector3Make(maxVec.x - minVec.x,
maxVec.y - minVec.y,
maxVec.z - minVec.z);
let plane = SCNPlane(width: CGFloat(bound.x + 1),
height: CGFloat(bound.y + 1))
plane.cornerRadius = 0.2
plane.firstMaterial?.diffuse.contents = UIColor.black.withAlphaComponent(0.9)
let planeNode = SCNNode(geometry: plane)
planeNode.position = SCNVector3(CGFloat( minVec.x) + CGFloat(bound.x) / 2 ,
CGFloat( minVec.y) + CGFloat(bound.y) / 2,CGFloat(minVec.z - 0.01))
textNode.addChildNode(planeNode)
planeNode.name = "text"
希望对大家有所帮助