首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向SCNSphere添加文本

向SCNSphere添加文本
EN

Stack Overflow用户
提问于 2019-07-06 22:27:21
回答 1查看 454关注 0票数 1

下午好,

首先,请原谅我的(可能)非常基本的问题,我对AR的世界相当陌生……

当用户点击屏幕时,我正在玩显示3D对象的游戏。当用户点击时,我已经成功地将一个气泡状的物体投影到一个设定的位置:

代码语言:javascript
复制
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let bubble = SCNSphere(radius: 0.1)
    bubble.firstMaterial?.transparency = 0.5
    bubble.firstMaterial?.writesToDepthBuffer = false
    bubble.firstMaterial?.blendMode = .screen
    bubble.firstMaterial?.reflective.contents = #imageLiteral(resourceName: "bubble")

    let node = SCNNode(geometry: bubble)
    node.position = SCNVector3Make(0, 0.1, 0)

    let parentNode = SCNNode()
    parentNode.addChildNode(node)

    if let camera = sceneView.pointOfView {
        parentNode.position = camera.position

        // Animation like bubble
        let wait = SCNAction.wait(duration: 0.2)

        let speedsArray: [TimeInterval] = [0.5, 1.0, 1.5]
        let speed: TimeInterval = speedsArray[Int(arc4random_uniform(UInt32(speedsArray.count)))]

        let toPositionCamera = SCNVector3Make(0, 0, -2)
        let toPosition = camera.convertPosition(toPositionCamera, to: nil)

        let move = SCNAction.move(to: toPosition, duration: speed)
        move.timingMode = .easeOut
        let group = SCNAction.sequence([wait, move])
        parentNode.runAction(group) {

        }
    }
    sceneView.scene.rootNode.addChildNode(parentNode)
}

我现在想做的是在SCNSphere上显示一个数字。理想情况下,它看起来像是打印在球体的表面上。

我尝试了下面的代码,但我发现,虽然文本被渲染了,但它在球体后面几乎看不见,而且比球体小得多(我附上了一张照片来尝试展示这一点)。我试着玩弄不同的价值观,但我觉得我错过了一些关于定位的至关重要的东西。

代码语言:javascript
复制
let string = "25"
    let text = SCNText(string: string, extrusionDepth: 0.1)
    text.font = UIFont.systemFont(ofSize: 5)
    text.firstMaterial?.diffuse.contents = UIColor.black
    text.flatness = 0.005
    let textNode = SCNNode(geometry: text)
    let fontScale: Float = 0.01
    textNode.scale = SCNVector3(fontScale, fontScale, fontScale)

    parentNode.addChildNode(textNode)

任何建议都将不胜感激。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-08 19:49:55

不确定它是否会给你真正想要的东西。这只是一种方法,我把数字作为纹理放在球体上。

代码语言:javascript
复制
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let bubble = SCNSphere(radius: 0.1)

    let view = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 100))
    view.backgroundColor = .black
    let label = UILabel(frame: CGRect(x: 0, y: 35, width: 200, height: 30))
    label.font = UIFont.systemFont(ofSize: 30)
    view.addSubview(label)
    label.textAlignment = .center
    label.text = "25"
    label.textColor = .white

    bubble.firstMaterial?.diffuse.contents = view
    .
    .
    .
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56914979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档