7 способов добавить текст над объектами в ARKit с помощью Swift

В этом сообщении блога мы рассмотрим различные методы добавления текста над сущностями в ARKit с использованием Swift. Независимо от того, создаете ли вы приложение дополненной реальности (AR) или работаете над проектом, требующим текстовых аннотаций в трехмерном пространстве, эти методы пригодятся. Мы углубимся в примеры кода и объясним каждый метод в разговорной форме. Итак, начнем!

Метод 1: использование SCNText
Один из способов добавить текст над объектами — использовать класс SCNText, предоставляемый SceneKit. Вы можете создать объект SCNText, установить его свойства, такие как шрифт, цвет и размер, и расположить его над нужным объектом.

let textNode = SCNNode()
let textGeometry = SCNText(string: "Hello, ARKit!", extrusionDepth: 1.0)
textNode.geometry = textGeometry
textNode.position = SCNVector3(x: 0, y: 0.1, z: -0.5)
sceneView.scene.rootNode.addChildNode(textNode)

Метод 2: использование наложения SpriteKit
Другой подход — использовать возможности наложения SpriteKit. Вы можете создать SKLabelNode с нужным текстом и добавить его в качестве наложения на AR-сцену.

let textNode = SKLabelNode(text: "Hello, ARKit!")
textNode.fontSize = 24
textNode.fontColor = .white
textNode.position = CGPoint(x: sceneView.frame.midX, y: sceneView.frame.maxY - 50)
sceneView.overlaySKScene?.addChild(textNode)

Метод 3: использование SCNBillboardConstraint
SCNBillboardConstraint позволяет текстовым узлам всегда быть обращены к камере, гарантируя, что они остаются видимыми независимо от точки зрения зрителя.

let textNode = SCNNode()
let textGeometry = SCNText(string: "Hello, ARKit!", extrusionDepth: 1.0)
textNode.geometry = textGeometry
textNode.position = SCNVector3(x: 0, y: 0.1, z: -0.5)
textNode.constraints = [SCNBillboardConstraint()]
sceneView.scene.rootNode.addChildNode(textNode)

Метод 4: использование основного текста
Если вам нужны более продвинутые возможности рендеринга текста, вы можете использовать основной текст. Этот метод позволяет создавать строки с атрибутами, используя собственные шрифты, цвета и стили.

let text = NSAttributedString(string: "Hello, ARKit!",
                               attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 24),
                                            NSAttributedString.Key.foregroundColor: UIColor.white])
let textNode = SCNNode()
let textGeometry = SCNText(string: text.string, extrusionDepth: 1.0)
textGeometry.font = CTFontCreateWithName("Arial" as CFString, 24, nil)
textGeometry.firstMaterial?.diffuse.contents = UIColor.white
textNode.geometry = textGeometry
sceneView.scene.rootNode.addChildNode(textNode)

Метод 5. Использование SCNShape
SCNShape позволяет создавать 2D- или 3D-фигуры с настраиваемыми путями, которые можно использовать в качестве основы для рендеринга текста.

let textShape = SCNShape(path: UIBezierPath(rect: CGRect(x: 0, y: 0, width: 2, height: 0.5)), extrusionDepth: 0.1)
textShape.firstMaterial?.diffuse.contents = UIColor.white
let textNode = SCNNode(geometry: textShape)
textNode.position = SCNVector3(x: 0, y: 0.1, z: -0.5)
sceneView.scene.rootNode.addChildNode(textNode)

Метод 6: использование 3D-текстовых моделей.
Вы также можете импортировать 3D-текстовые модели, созданные с помощью внешнего программного обеспечения, такого как Blender или Maya, в свой проект ARKit.

let textNode = SCNNode()
let textScene = SCNScene(named: "TextModel.scn")
let textModelNode = textScene?.rootNode.childNode(withName: "TextModel", recursively: true)
textNode.addChildNode(textModelNode!)
sceneView.scene.rootNode.addChildNode(textNode)

Метод 7. Использование ARTextAnnotation
Если вы ищете более специализированное решение, класс ARTextAnnotation, предоставляемый ARKit, можно использовать для добавления текстовых аннотаций, привязанных к конкретным реальным позициям.

let textAnnotation = ARTextAnnotation(text: "Hello, ARKit!", position: CGPoint(x: 0.5, y: 0.5))
sceneView.addAnnotation(textAnnotation)

В этой статье мы рассмотрели семь различных методов добавления текста над сущностями в ARKit с использованием Swift. Каждый метод имеет свои преимущества и может применяться в зависимости от ваших конкретных требований. Ищете ли вы простоту, расширенную настройку или специализированные аннотации, эти методы помогут вам добиться желаемого наложения текста в ARKit. Поэкспериментируйте с этими методами и выберите тот, который лучше всего соответствует потребностям вашего проекта.