gpt4 book ai didi

opengl - 使用单一字体纹理渲染文本(SDL + OpenGL)

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

我一直在搜索和测试使用 OpenGL 渲染文本、使用 SDL 加载其纹理的新方法,但我测试的每项技术似乎都既昂贵又缓慢。

考虑到这一点,我意识到实现它的最佳方法可能是加载包含每个所需字符的纹理(就像 spritesheet),获取相关数据(宽度、高度、前进、跳行...... ) 并且在渲染它时(基本上我们会在场景中的所有其他渲染之后进行渲染),我们只需要一个 glBindTexture() 来打印屏幕上需要的每个字符串。

我在这里假设其中昂贵的部分是纹理创建和绑定(bind),对吗?我测试的每个代码似乎都对每个字形或每个字符串使用单独的纹理。

你们如何渲染文本?这是渲染它的好方法吗?如果是这样,是否有任何库已经做到了?

最佳答案

通过使用“spritesheet like”纹理渲染文本,每个字母都在上面,这肯定会起作用,并且是一种非常常见的实现方式。

虽然不知道有任何库可以像这样呈现文本(但我相信有),但您自己编写代码确实不应该太困难。如果您想编写自己的代码来完成它,您将需要一些方法来生成包含您需要的每个字母的纹理。 BMFont是一个可以生成这种纹理的程序。此外,BMFont 会生成一个附带的“.fnt”文件,指示每个字母在纹理中的位置。

这是 BMFont 生成的纹理的样子:

BMFont texture for size 22 Times New Roman

和 .fnt 文件:

info face="Times New Roman" size=-22 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 outline=0
common lineHeight=25 base=20 scaleW=256 scaleH=256 pages=1 packed=0 alphaChnl=0 redChnl=4 greenChnl=4 blueChnl=4
page id=0 file="Times22.png"
chars count=191
char id=32 x=253 y=37 width=1 height=1 xoffset=0 yoffset=20 xadvance=6 page=0 chnl=15
char id=33 x=253 y=21 width=2 height=15 xoffset=2 yoffset=5 xadvance=6 page=0 chnl=15
char id=34 x=195 y=118 width=6 height=6 xoffset=2 yoffset=5 xadvance=9 page=0 chnl=15
char id=35 x=72 y=42 width=11 height=16 xoffset=0 yoffset=4 xadvance=11 page=0 chnl=15
char id=36 x=17 y=43 width=9 height=17 xoffset=1 yoffset=4 xadvance=11 page=0 chnl=15
...

关于opengl - 使用单一字体纹理渲染文本(SDL + OpenGL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12077741/

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