我以前一直在这条路上。我认为如果您追求 3D 文本,您可能会发现 SceneKit 很有用。
如果您可以使用 SceneKit 来驱动渲染:SCNText with a SCNView.
如果您有自己的命令缓冲区,并且可以在其余图形的 TOP 上混合文本:您仍然可以使用SCNText, 通过使用render()a SCNRendererto render的方法将场景的渲染命令编码到命令缓冲区。
如果你想避免 SceneKit 的渲染过程,我建议你这样做:在 SCNTransaction 中创建一个 SCNText 像这样:
import SceneKit
SCNTransaction.begin()
let sceneText = SCNText(string: text, extrusionDepth: extrusionDepth)
SCNTransaction.commit()
let mdlMesh = MDLMesh(scnGeometry: sceneText, bufferAllocator: yourBufferAllocator)
let mesh = try MTKMesh(mesh: mdlMesh, device: MTLCreateSystemDefaultDevice()!)
Run Code Online (Sandbox Code Playgroud)
这个 MTKMesh 将有三个顶点缓冲区;第一个 (0) 是packed_float3格式中的位置列表,第二个 (1)packed_float3格式中的法线列表,第三个 (2)packed_float2格式中的纹理坐标列表。只要确保在你的顶点着色器中反映出来。它将有 1-5 个带有自己索引缓冲区的子网格,我相信对应于前、后、前倒角、后倒角和挤压侧。
现在,如果您要处理 2D 文本,您可以使用上面的这个方法,使挤压深度接近于零,或者您可以CoreText直接利用字体度量并使用评论者建议的字体图集纹理渲染纹理四边形。
理解 Objective-C 的能力当然也很有用,但您可能不需要专门针对这个问题。我试图简要说明我的解释,因为我不知道您对这个问题的确切目标是什么,但我可以根据要求提供有关任何这些方法的更多详细信息。
| 归档时间: |
|
| 查看次数: |
1575 次 |
| 最近记录: |