SCNText, containerFrame, упаковка и ARKit

Кому-нибудь удалось правильно получить перенос строки SCNText внутри контейнера в ARKit?

Я попробовал, но линии, кажется, накладываются друг на друга, а не визуализируются вертикально в последовательности. Если бы проблема была в том, что размер containerFrame слишком мал, я бы ожидал, что строка будет просто обрезана. Не имеет значения, какой режим усечения я использую (...end / ...none / ..middle) и т. Д.

https://www.dropbox.com/s/hfe01fm2bfvuvs0/IMG_1E372152586C-1.jpeg?dl=0

Это код из моего подкласса SCNNode, создающий вытянутый текст в методе init. Один и тот же код прекрасно работает (очевидно, с разными размерами) для создания обернутого выдавленного текста в стандартном представлении SceneKit

    let extrudedText = SCNText(string: definition.text, extrusionDepth: 0.1)
    extrudedText.font = UIFont(name: definition.fontname, size: 0.2)!

    extrudedText.containerFrame = CGRect(origin: .zero, size: CGSize(width: 1.8, height: 1.5))
    extrudedText.truncationMode = kCATruncationMiddle
    extrudedText.isWrapped = true
    extrudedText.alignmentMode = kCAAlignmentLeft


    let material = SCNMaterial.material(named: "rustediron-streaks")
    extrudedText.materials = [material]
    geometry = extrudedText

    // Update pivot of object to its center
    // https://stackru.com/questions/44828764/arkit-placing-an-scntext-at-a-particular-point-in-front-of-the-camera
    let (min, max) = boundingBox
    let dx = min.x + 0.5 * (max.x - min.x)
    let dy = min.y + 0.5 * (max.y - min.y)
    let dz = min.z + 0.5 * (max.z - min.z)
    pivot = SCNMatrix4MakeTranslation(dx, dy, dz)

1 ответ

Решение

Ответ от Apple: мой размер шрифта был слишком маленьким. Если я использую "нормальный" размер шрифта и содержащую рамку для объекта SCNText, а затем устанавливаю масштаб на узле, который его содержит, все переносится, как и ожидалось. Что-то вроде:

extrudedText.font = UIFont(name: definition.fontname, size: 20)!  
extrudedText.containerFrame = CGRect(origin: .zero, size: CGSize(width: 100.0, height: 500.0))
...
scale = SCNVector3Make(0.01, 0.01, 0.01)
Другие вопросы по тегам