1. 程式人生 > >計算機圖形學(二)輸出圖元_16_字元函式

計算機圖形學(二)輸出圖元_16_字元函式

OpenGL 字元函式  OpenGL基本庫僅為顯示單個字元和文字串提供了基本的支援。我們可以定義圖3.61中的點陣圖字元,並將一個位圖集作為字型檔儲存。一個文字串通過將從字型檔中選擇的點陣圖序列對映到幀快取的

相鄰位置來顯示。


但是,OpenGL實用函式工具包(GLUT)中有一些預定義的字型檔。因此我們不用建立自己的點陣圖字型庫,除非需要顯示GLUT中沒有的字型。GLUT子程式可顯示點陣圖和輪廓字型。GLUT點陣圖字型由OpenGL的glBitmap函式來繪製,而輪廓字型由折線邊界(GL_LINE_STRIP)生成。
       使用下面的函式可顯示GLUT點陣圖字元:

glutBitmapCharacter (font, character);
這裡引數font用GLUT符號常量賦值,用來指定一特定字型集,引數character賦以ASCII編碼或其他要顯示的字元。這樣,要顯示大寫的"A",可以使用ASCII編碼65或指定為‘A’。同樣,編碼66與‘B’等效,編碼97與小寫字元‘a’等效,編碼98與‘b’等效,依次類推。固定寬度或比例間隔字型都可以使用。可用GLUT_BITMAP_8_Y_13GLUT_BITMAP_9_BY_15來選擇一種固定寬度字型並確定其引數。也可GLUT_BITMAP_TIMES_ROMAN_10GLUT_BITMAP_HELVETICA_10來選擇10磅的比例間隔字型。12磅的Times-Roman字型和12磅及18磅的Helvetica
字型都可以選擇。
       利用glutBitmapCharacter顯示的字元以當前光柵位置作為其點陣圖原點(左下角)。在字元點陣圖裝入重新整理快取後,當前光柵位置的x座標獲得一個字元寬度的增量。例如,我們可以使用下列程式顯示一個包括36個位圖字元的文字串。

glRasterPosition2i (x, y);
for (k = 0; k < 36; k++)
    glutBitmapCharacter (GLUT_BITMAP_9_BY_15, text [k]);
該字串用執行glutBitmapCharacter函式前指定的顏色來顯示。使用下面的函式可以顯示一個輪廓字元。
glutStrokeCharacter (font, character);
        在這個函式中,我們可為引數font賦值GLUT_STROKE_ROMAN來顯示比例空間的字型,或賦值GLUT_STROKE_MONO_ROMAN來顯示常量間隔的字型。字元的大小和位置通過在執行glutStrokeCharacter子程式前指定變換操作來控制。每個字元顯示後,自動實施座標位移,從而使下一字元在當前字元的右邊顯示。輪廓字元生成的文字串是二維或三維場景的一部分,因為它們用線段構成。這樣,它們可從各種方向來觀察,並在對它們進行縮放時不會變形,還可以通過其他方式對它們進行變換。但與點陣圖字元相比,繪製速度比較慢。