在我深入讨论我遇到的问题之前,需要更多的背景信息。我写了一个FontRenderer
类来渲染文本。它是这样工作的:在运行时,如果我要显示一个字符串ABC,GameObject
将生成一个具有 3 个四边形的 a,每个四边形都有从 atlas 纹理中查找的每个字形的 UV 坐标。
很简单。这允许在使用相同材质的情况下进行一次绘制调用。
但是,如果要添加功能,例如更改特定字形的前景,我将如何解决这个问题?我计划这样的\c
转义序列:\c[A-F]{2}[A-F]{2}[A-F]{2}
.
例如,如果我要将ABC中的A着色为红色,字符串的其余部分为白色,我会将以下字符串传递给: 。FontRenderer
"\cFF0000A\cFFFFFFBC"
我的第一个想法是利用 atlas 纹理。这背后的想法是用新的前景色绘制一个新的字形,并在 atlas 纹理中分配一个精灵。但是,这可能会变得相当复杂。
我的下一个想法是使用顶点/片段着色器,但我不确定这是否可能。另一个问题是,如果可能的话,每个渲染的字符串都需要使用我的着色器的材质实例,这会增加绘制调用的数量。
还有什么办法可以做到?