gpt4 book ai didi

metal - Metal 文本渲染

转载 作者:行者123 更新时间:2023-12-01 13:18:38 28 4
gpt4 key购买 nike

我正在尝试在 Mac 上的 Apple metal 中开发我自己的迷你游戏引擎,但我被困在我想在 GPU 上渲染文本的地方。我没有太多的图形编程经验,因此我不知道该怎么做。我偶然发现了 Warren more 使用符号距离场写的一篇文章。但我不知道它是如何工作的,我无法完全理解它(缺乏我的图形知识)来自己实现它。博客文章有一个用 obj-c 编写的代码示例,但不幸的是我不知道 obj-c。它有一些快速版本吗?或者有人可以解释/指出如何在 Metal 中渲染文本?

最佳答案

我以前一直在这条路上。我认为如果您追求 3D 文本,您可能会发现 SceneKit 很有用。

如果您同意使用 SceneKit 来驱动渲染:SCNTextSCNView .

如果您有自己的命令缓冲区,并且可以将文本混合到其余图形的顶部:您仍然可以使用 SCNText ,通过使用 render() SCNRenderer的方法渲染以将场景的渲染命令编码到命令缓冲区中。

如果你想避免 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()!)

这个 MTKMesh 将有三个顶点缓冲区;第一个 (0) 是 packed_float3 中的位置列表格式,第二个 (1) 法线列表 packed_float3格式,第三(2)个纹理坐标列表 packed_float2格式。只要确保在你的顶点着色器中反射(reflect)出来。它将有 1-5 个带有自己索引缓冲区的子网格,我相信对应于前、后、前倒角、后倒角和挤压侧。

现在,如果您要处理 2D 文本,您可以使用上面的这种方法,使挤压深度接近于零,或者您可以利用 CoreText直接进行字体度量并使用评论者建议的字体图集纹理渲染纹理四边形。

理解 Objective-C 的能力当然也很有用,但您可能不需要专门针对这个问题。我试图简要说明我的解释,因为我不知道您对这个问题的确切目标是什么,但我可以根据要求提供有关任何这些方法的更多详细信息。

关于metal - Metal 文本渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52210831/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com