gpt4 book ai didi

swift - 在 SceneKit 中,将文本标签放在 SCNGeometry 或 SCNBox 上

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

我正在尝试将一个简单的文本标签放在一个(希望是所有类型的)内置 SCNGeometry 形状上,因为它们在屏幕上移动。我最接近成功的是通过 .firstMaterial.diffuse.contents 将带有 CATextLayer 的 CALayer 添加到 SCNBox,如 described in this thread .

但是,文本永远不可读。使用高度为1.0的SCNBox:当layer.frame和textLayer.fontSize的大小为1.0时,文本不会出现;随着框架和字体大小的增加(不是框),文本出现 Blob ,如下图所示;当非常大时,文本显示为波浪线。

enter image description here

以下代码是生成形状的方法的一部分:

    var geometry:SCNGeometry

let layer = CALayer()
layer.frame = CGRect(x: 0, y: 0, width: 4, height: 4)
layer.backgroundColor = UIColor.white.cgColor

var textLayer = CATextLayer()
textLayer.frame = layer.bounds
textLayer.fontSize = layer.bounds.size.height
textLayer.string = "Matilda"
textLayer.alignmentMode = kCAAlignmentLeft
textLayer.foregroundColor = UIColor.black.cgColor
textLayer.display()
layer.addSublayer(textLayer)

let geometry = SCNBox(width: 1.0,
height: 1.0,
length: 3.0,
chamferRadius: 0.0)

geometry.firstMaterial?.locksAmbientWithDiffuse = true
geometry.firstMaterial?.diffuse.contents = layer

let geometryNode = SCNNode(geometry: geometry)
geometryNode.position = SCNVector3(x: 0.0, y: 0.0, z: 0.0)

scnScene.rootNode.addChildNode(geometryNode)

最佳答案

正如 David R. 所指出的,盒子大小的单位与框架大小的单位不同。

将框架调整为(并优化 SCNBox 大小)后它起作用了:

layer.frame = CGRect(x: 0, y: 0, width: 200, height: 50)

关于swift - 在 SceneKit 中,将文本标签放在 SCNGeometry 或 SCNBox 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47459451/

24 4 0