我用C++擼了一個MineCraft高清字體材質生成器
04-20
(都不知道有沒有人看。。。)
推薦閱讀:
Minecraft 渲染 Unicode 文字的思路是把0x0000到0xFFFF(20161008更正數字。。。。0xFFFFFFFF可沒這麼點。。。)的每個文字都做成材質貼圖,按照高 16 位進行分割,形成assets/minectaft/textures/font/unicode_page_ff.png這樣的圖片,每個文字都是方格的;
然後為了解決文字寬度不同的問題,設置了一個文件(assets/minecraft/font/glyph_sizes.bin)來保存對應圖像的水平坐標區間,採用一個位元組來保存(高 4 位保存 xMin ,低 4 位保存 xMax ,當然精度方面也就只有 4 位了,但是考慮到 mc 的馬賽克性質,確實足夠用了),這些位元組直接按照 Unicode 值作為文件中位置。
我做的這個生成器就是利用上面的原理,生成了對應的unicode_page_(00-ff).png文件和glyph_sizes.bin文件。特性列表:
- 生成配對的glyoh_sizes.bin文件,以支持非標準字體(指的是和mc原版字體測量屬性不同的字體)。
- 支持多進程同時生成(-t 參數指定的是產生的子進程,所以是總進程數-1 )。
- 支持 3 種渲染模式(MONO模式(無抗鋸齒,對於一些字體有好的效果),LIGHT 模式和標準模式,名字來源於 FreeType2 的渲染參數。)
源代碼用C++寫成,需要C++14的支持,目前只能支持Linux系統,Bash On Windows也是可以的。
源碼倉庫地址
歡迎star和提issues~
------------
理論上支持PE,改個名字插apk里是可以的,但是作為資源包暫時沒有成功過,正在嘗試解決
推薦閱讀:
※iostream 是 C++ 的缺陷嗎,為什麼?
※C++為什麼允許s1+s2="D";這種語句?
※數據結構課本中的「生命遊戲」有哪些奇葩的玩法?
※C++中if(a!=b)和if(a^b)哪個效率更高?
※這個程序哪裡錯了,還是G++出了問題?