關於OPENGL中字型顯示

2021-05-11 13:53:51 字數 1173 閱讀 9546

最近在做opengl顯示方面的工作,很簡單的一些處理,只涉及到二維的處理。其中有關於文字顯示方面的工作,在此與大家分享我的體會,希望大家互相交流一下。

字型檔生成後以檔案的形式存在pc機硬碟上,具體檔案格式得看具體工具怎麼設計。我用的工具以二進位制方式儲存,對ascii碼,每個編碼占用(fontheight*((fongwidth/2 +7)/8))個位元組,因為對於ascii碼通常採用漢字一半的寬度進行顯示,例如24×24的字型,其fontheight=fontwidth=24,一半寬度為12個點,即點陣每行顯示12個畫素,這樣需占用(12+7)/8=2個位元組儲存一行的點陣,整個ascii碼需要24×2=48個位元組進行儲存。對於漢字每個占用(fontheight*((fongwidth+7)/8))個位元組,即為ascii碼的2倍空間。上述公式均為c語言表達方式。

字型檔生成後可能需要按自己的需求進行轉換。例如平台如果不支援檔案系統的話,可以把字型檔轉成c語言方式,對每個字元的點陣以unsigned char陣列方式儲存,並設計一種方式進行索引。這樣可以把生成的檔案加到工程中進行編譯鏈結,通過引用對應的陣列獲取字元的點陣資訊。這部分工作就需要對工具生成的字型檔儲存的格式相當清楚,工具一般按標準做成,如國標gb2312,big5等,所以要求掌握標準的基本內容。之後要明確自己需要的字符集,對工具生成的字型檔進行裁剪,如只取一級漢字型檔,只取字目數字,看個人需求而定。這需要自己設計做程式實現。

接下來說一下點陣字型顯示的方式。我現在知道有三種方式:

1.利用glvertex打點,方法簡單,就是按點陣逐行打點;

2.利用glbitmap,這種方式最常用,但是opengl對位圖的解釋是從左下角開始解析的,而後向上逐行按從左至右的方式解析,所以如果直接按方法1中用到的點陣資料進行位圖顯示,看到的效果是乙個顛倒的文字;由於windows上opengl實現中的bug,其使用位圖必須32位對齊,如果要在windows平台上試驗位圖方式顯示文字,可以選擇32,64,128位寬度的點陣字型,或者對非32位對齊的字型,對字元的每行進行補零,使其32對齊,如果有更好的方法請告知。

3.利用紋理貼圖的方式。原理是對每個文字生成乙個紋理,顯示文字的時候,首先畫乙個矩形,並把要顯示的文字的紋理貼到矩形上即可。這種方式可以實現文字的縮放,我們只需要一種大小的點陣字型檔,通過控制矩形大小可以實現文字的任意縮放,當然效果得看選取的點陣及縮放的比例。

如果大家有更好的方法,希望共同交流。

整理實現**後繼續。.........

matplotlib中字型顯示

from matplotlib.font manager import fontproperties 字型管理器 font fontproperties fname r c windows fonts simsun.ttc size 15 設定中文標籤 plt.title u 測試 fontprop...

opengl顯示文字

wglusefontbitmaps 函式顯示文字 使用wglusefontbitmaps 將ascii字元裝入顯示列表,然後使用glcalllists 函式利用顯示列表序列顯示文字。wglusefontbitmaps有四個引數,分別是當前使用的dc 從第幾個ascii字元起始裝入列表 裝入列表的as...

OpenGL 顯示列表

原 文 lesson 12 display lists 譯 者 marhoo 這次我將教你如何使用顯示列表,顯示列表將加快程式的速度,而且可以減少 的長度。當你在製作遊戲裡的小行星場景時,每一層上至少需要兩個行星,你可以用opengl中的多邊形來構造每乙個行星。聰明點的做法是做乙個迴圈,每個迴圈畫出...