文档章节

OpenGL文字渲染

chunquedong
 chunquedong
发布于 2017/02/15 19:38
字数 429
阅读 232
收藏 1

基本思路

  1. 通过FreeType库渲染单个文字的单通道纹理。
  2. 多个文字纹理打包在一个纹理集中。 结果像这样: texture

纹理打包算法

  1. 插入新字符到纹理
  • 1.1 判断纹理是否存在,如果存在则返回。
  • 1.2 在最后一个纹理缓冲区的可用矩形区域逐个调用方法2,直到插入成功。
  • 1.3 如果没有插入成功则新建纹理缓冲区,将自己的区域加入到可用区域。调用方法1.2
  1. 在矩形区域插入字符
  • 2.1. 如果字符和矩形区域大小相同则写入纹理,返回成功。如果小于字符大小则返回空。
  • 2.2. 则将字符纹理写入到左上角。需要留一像素缓冲空白。
  • 2.3. 如果b>a则将剩余的矩形分成左右两部分,否则分为上下两部分。将这两部分加入可用区域。

image

可用区域列表可以按照生成的关系构建成二叉树结构,这样先序遍历的方式插入能保证新字符都尽量集中在右上角,减少空间碎片。

文字渲染过程

文本中的每个文字逐个渲染

  1. 获取字符对应的纹理所在的纹理集和纹理坐标等信息,如果不存在则使用上面的纹理打包算法新增。
  2. 绑定所在的纹理
  3. 设置shader颜色等。

字体描边

描边效果的字体需要单独存储字符纹理和加粗字符纹理。渲染时先绘制一层加粗字体,再居中对齐下绘制一次正常字体。

© 著作权归作者所有

共有 人打赏支持
下一篇: B+Tree实现
chunquedong

chunquedong

粉丝 46
博文 132
码字总数 37030
作品 4
海淀
高级程序员
私信 提问
多平台游戏渲染开发

多平台游戏渲染开发 跨平台移动应用开发的渲染解决方案综述 在移动设备上做应用/游戏开发,实现跨平台是主流。对于应用/游戏的逻辑功能和核心算法部分,如果是用C++进行开发的,因为iOS/And...

失足处男的倒霉孩子
2013/12/25
1K
0
OpenGL基础概念(学习记录)

各平台渲染标准: win32 : OpenGL ,DirectX android: Skia/Canvas (安卓SDK,2d) , OpenGL ES +NDK mac/ios :Quartz2D,OpenGL ES Linux: OpenGL wp7:DirectX win8/wp8 : DirectX 游戏引擎基于......

Frank_何益明
2018/11/26
0
0
Metal入门教程(八)Metal与OpenGL ES交互

前言 Metal入门教程(一)图片绘制 Metal入门教程(二)三维变换 Metal入门教程(三)摄像头采集渲染 Metal入门教程(四)灰度计算 Metal入门教程(五)视频渲染 Metal入门教程(六)边界检测...

落影loyinglin
2018/08/10
0
0
轻量级高品质视频播放器 MPV 0.27.0 发布

MPV 0.27.0 已发布,MPV 是一款基于 mplayer2 和 MPlayer 的轻量级高品质视频播放器。MPV 基于 OpenGL 视频输出,支持视频缩放、高质量算法、色彩管理、帧定时、插值、HDR 等功能。同时,利用...

王练
2017/09/16
1K
2
OpenGL ES Programming Guide for iOS 第二章

第二章 iOS上的OpenGL ES OpenGL ES提供程序接口原函数以透过图形加速硬件管线绘制。OpenGL消耗图形命令产生影像用以显示给用户,或进一步处理OpenGL ES以外的检索。 OpenGL ES规范明确声明了...

长平狐
2012/10/08
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux iptables之mangle表使用案例

mangle表的用途 mangle表的主要功能是根据规则修改数据包的一些标志位,以便其他规则或程序可以利用这种标志对数据包进行过滤或策略路由。 mangel表使用示例 示例1-策略路由1 内网的客户机通...

月下狼
今天
3
0
OSChina 周日乱弹 —— 兼职我想去学学布偶戏

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @clouddyy : 《火炎 - 女王蜂》 《火炎 - 女王蜂》 手机党少年们想听歌,请使劲儿戳(这里) @小鱼丁 :还在睡觉突然接到一个小哥哥电话“x...

小小编辑
今天
113
7
租房软件隐私保护如同虚设

近日,苏州市民赵先生向江苏新闻广播新闻热线025-84658888反映,他在“安居客”手机应用软件上浏览二手房信息,并且使用该软件自动生成的虚拟号码向当地一家中介公司进行咨询。可电话刚挂不久...

linux-tao
今天
4
0
分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
6
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部