词条 | 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条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。