函式功能:使得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的用法請先理解函式glCall lists(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'在顯示列表中對應的位置。