
前言上一篇介绍了整体架构和六个类的职责划分。本篇深入三个核心问题:Texture Atlas 的详细实现:一张纹理如何动态容纳所有字符,空间怎么分配,tileSize 变大时怎么处理为什么文字始终面向观察者:代码里没有写 Billboard,但效果等同于 Billboard,原因在哪里Shader 逐块解析:VS、GS、FS 每一块代码为什么这样写一、Texture Atlas 详细实现1.1 问题的起点最直接的做法是:每个字符一个 GPU 纹理对象,渲染时逐字符切换纹理。这在字符数量少时没问题,但每次glBindTexture都会强制 GPU 管线刷新,字符数量一多,性能急剧下降。Texture Atlas 的思路是:把所有字符位图打包进一张大纹理,渲染时永远只绑定这一张,通过 UV 坐标区分不同字符。Atlas 纹理(示意): ┌──────┬──────┬──────┬──────┬──────┐ │ A │ B │ C │ D │ E │ ← 行 0 ├──────┼──────┼────