- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OpenGL入门学习之十六——在Windows系统中显示文字
OpenGL 入门学习之十六——在Windows 系统中显示文字
2009-01-07 13:34
本课我们来谈谈如何显示文字。
OpenGL 并没有直接提供显示文字的功能,并且,OpenGL 也没有自带专门的字库。因
此,要显示文字,就必须依赖操作系统所提供的功能了。
各种流行的图形操作系统,例如Windows 系统和Linux 系统,都提供了一些功能,以
便能够在OpenGL 程序中方便的显示文字。
最常见的方法就是,我们给出一个字符,给出一个显示列表编号,然后操作系统由把
绘制这个字符 OpenGL 命令装到指定的显示列表中。当需要绘制字符的时候,我们
只需要调用这个显示列表即可。
不过,Windows 系统和Linux 系统,产生这个显示列表的方法是不同的(虽然大同小
异)。作为我个人,只在Windows 系统中编程,没有使用Linux 系统的相关经验,所
以本课我们仅针对Windows 系统。
OpenGL 版 “Hello, World!”
写完了本课,我的感受是:显示文字很简单,显示文字很复杂。看似简单的功能,背
后却隐藏了深不可测的玄机。
呵呵,别一开始就被吓住了,让我们先从“Hello, World!”开始。
前面已经说过了,要显示字符,就需要通过操作系统,把绘制字符的动作装到显示列
表中,然后我们调用显示列表即可绘制字符。
假如我们要显示的文字全部是ASCII 字符,则总共只有0 到 127 这 128 种可能,因此
可以预先把所有的字符分别装到对应的显示列表中,然后在需要时调用这些显示列表。
Windows 系统中,可以使用wglUseFontBitmaps 函数来批量的产生显示字符用的显示列
表。函数有四个参数:
第一个参数是HDC ,学过Windows GDI 的朋友应该会熟悉这个。如果没有学过,那也
没关系,只要知道调用wglGetCurrentDC 函数,就可以得到一个HDC 了。具体的情况
可以看下面的代码。
第二个参数表示第一个要产生的字符,因为我们要产生0 到 127 的字符的显示列表,
所以这里填0 。
第三个参数表示要产生字符的总个数,因为我们要产生0 到 127 的字符的显示列表,
总共有128 个字符,所以这里填 128。
第四个参数表示第一个字符所对应显示列表的编号。假如这里填 1000,则第一个字符
的绘制命令将被装到第1000 号显示列表,第二个字符的绘制命令将被装到第 1001 号
显示列表,依次类推。我们可以先用glGenLists 申请128 个连续的显示列表编号,然
后把第一个显示列表编号填在这里。
还要说明一下,因为wglUseFontBitmaps 是Windows 系统特有的函数,所以在使用前需
要加入头文件:#include windows.h 。
现在让我们来看具体的代码:
#include windows.h
// ASCII 字符总共只有0 到 127,一共128 种字符
#define MAX_CHAR 128
void drawString(const char* str) {
static int isFirstCall = 1;
static GLuint lists;
if( isFirstCall ) { // 如果是第一次调用,执行初始化
// 为每一个ASCII 字符产生一个显示列表
isFirstCall = 0;
// 申请MAX_CHAR 个连续的显示列表编号
lists = glGenLists(MAX_CHAR);
// 把每个字符的绘制命令都装到对应的显示列表中
wglUseFontBitmaps(wglGetCurrentDC(), 0, MAX_CHAR, lists);
}
// 调用每个字符对应的显示列表,绘制每个字符
for(; *str!=\0; ++str)
glCallList(lists + *str);
}
显示列表一旦产生就一直存在(除非调用glDeleteLists 销毁),所以我们只需要在第
一次调用的时候初始化,以后就可以很方便的调用这些显示列表来绘制字符了。
绘制字符的时候,可以先用glColor*等指定颜色,然后用glRasterPos*指定位置,最后
调用显示列表来绘制。
void display(void) {
glClear(GL_COL
您可能关注的文档
- NetApp NDMP 技术介绍.pdf
- NetAnalyzer使用指导手册.pdf
- NetApp大数据时代敏捷存储数据架构.pdf
- netbackup 如何配置sybase 备份.pdf
- Netcat参数详解.pdf
- Netfilter分析.pdf
- NEC MCU在马达方面的应用.pdf
- newCh3 8086的寻址方式和指令系统quan.ppt
- NFS2-3030数据手册.pdf
- NH3浓度检测报警器.pdf
- 中考语文总复习语文知识及应用专题5仿写修辞含句子理解市赛课公开课一等奖省课获奖课件.pptx
- 湖南文艺版(2024)新教材一年级音乐下册第二课《藏猫猫》精品课件.pptx
- 湖南文艺版(2024)新教材一年级音乐下册第三课《我向国旗敬个礼》精品课件.pptx
- 高中生物第四章生物的变异本章知识体系构建全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 整数指数幂市公开课一等奖省赛课微课金奖课件.pptx
- 一年级音乐上册第二单元你早全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 八年级数学上册第二章实数27二次根式第四课时习题省公开课一等奖新课获奖课件.pptx
- 九年级物理全册11简单电路习题全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 八年级语文下册第五单元19邹忌讽齐王纳谏省公开课一等奖新课获奖课件.pptx
- 2024年秋季新人教PEP版3年级上册英语全册教学课件 (2).pptx
最近下载
- 学会理财益处多 中学心理健康 主题班会课件.pptx
- 2024年新疆中考历史+道德与法治试卷真题(含答案解析).docx
- 2024年山东理工职业学院单招职业技能考试试题及答案.docx
- 旅游消费者行为学.ppt VIP
- 人教版美术七年级下册第一单元第1课《辉煌成就》 课件.ppt
- 2024年济南工程职业技术学院高职单招职业技能测验历年参考题库(频考版)含答案解析.docx
- 第5课《认识情绪+管理情绪》第2框《成为情绪的主人》【中职专用】《心理健康与职业生涯》(高教版2023基础模块.pptx VIP
- 中外幼儿教育名著导读(第二版).pptx VIP
- 三年级班主任工作计划.docx VIP
- 智能财税实务.pptx VIP
文档评论(0)