请输入您要查询的百科知识:

 

词条 glListBase
释义

函数原型:void glListBase(GLuintbase);

函数功能:使得OpengL可以找到绘制对应字符的显示列表的位置。

函数参数介绍:

GLuint base 这个参数表示显示列表的基质。

关于使用glListBase(GLuint base)进行字体创建有几点说明:

void glListBase(GLuint base)的用法让人容易误解,还有为什么会使用glListBase(ListBase - 32)的情况;

现在做一个解释:

1 通过ListBase = glGenList(96);创建96个显示列表,从ListBase索引的位置开始的96个显示列表。

2 wglUseFrontBitmaps(hDC,32,96,ListBase);根据hDC中的字体属性从ASCII码32开始创建96个显示列表,(ASCII:32到127)而且这96个显示列表依次对应于显示列表从ListBase到ListBase+96.注意例如'A'的ASCII值是65那么对应的显示列表中位于ListBase+65。

3 glListBase(ListBase - 32);因为OpengL如果要寻找‘A’那么它会首先根据ListBase值+65得到‘A’的位置。但是wglUseFrontBitmaps()使得ListBase的值与ASCII为32的一样,所以就需要将ListBase的值减32与OpengL的查询方式保持一致。

特别说明

glListBase(ListBase - 32) 的说明 在没有这段命令之前ListBase的值对应着ASCII为32的显示列表

如果使用glCallListBase()来显示字符时 如要显示‘A’ 那么他会从ListBase开始向后推进56位找到A

也就是找到ListBase+56对应位置的字符 但是ListBase对应着ASCII为32 所以ListBase+56就不是

A 所以 需要将ListBase-32 得到正确的基值。

关于glListBase(GLuint base)的补充:

1、如果想要正确理解glListBase的用法请先理解函数glCallLists(GLsizei n,GLenum type,const GLvoid *lists)的用法:此函数执行n个显示列表,执行数由n决定,所执行的列表索引是由当前显示列表基(由glListBase函数指定)指明的偏移量,加上由lists指向的数组中的有符号整数之和。

2、正如上面glGenList(96)和wglUseFrontBitmap用法,但有点小错误(个人认为),即‘A'所对应的的显示列表中的位置应是ListBase+65-32,即ListBase+33,而不是ListBase+65。

3、因为’A'的ASCII为65,而glListBase(GLuint base)中,base的默认值为0,所以如果不调用glListBase(ListBase - 32),而直接调用glCallLists(GLsizei n,GLenum type,const GLvoid *lists),么那它在想显示'A'时,调用的显示列表的索引应为base+65,即为65,这显然不是在'A'在显示列表中对应的位置ListBase+33,而当调用glListBase(ListBas - 32)后,则调用的显示列表的索引应为:ListBas - 32+65,即ListBase+33,正好便是字符'A'在显示列表中对应的位置。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/11/15 15:21:09