係游戲渲染文本,『點陣字體』係遠古技術, 係位圖繪畫ASCII字符, 哎『位圖字符glyph』,標准ASCII字符128,有96拉丁字母可渲染,從32到126.『32』係『吉格』.
位圖每行16字符. 位圖寬高符合2n.位圖『256256』每字符『1616』像素, 位圖『512512』每字符『3232』像素.
定義位圖字符
typedef struct FONT_TYP{ |
|
TEXTURE_PTR texture; |
字庫紋理 |
DWORD flag; |
頂點標記 |
TEXTURE_REGION region[96]; |
紋理區域 |
}FONT, * FONT_PTR; |
|
- 拉丁字母
for(int index = 0; index < 96; ++index){ |
- 生成ASCII字符UV 紋理坐標,『width, height』字符寬高,
- 移動X坐標
- 換行
if(x >= offsetX + width * row){
x = offsetX;
y = y + height;} |
渲染位圖字庫
- 2D頂點座標數組
VECTOR2D vertex_array[6 * 1024] ; |
- UV紋理座標數組
VECTOR2D texCoord_array[6 * 1024] ; |
- 啟用2D紋理映射
- 禁用法線
- 啓用透明測試
- 指定透明色
glAlphaFunc(GL_GREATER, 0); |
- 綁定紋理
TEXTURE_PTR texture = font->texture;
glBindTexture(GL_TEXTURE_2D, texture->ID); |
- 啟用頂點座標數組
glEnableClientState(GL_VERTEX_ARRAY); |
- 啟用紋理座標數組
glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
因為OpenGL『2D相機』原點『0,0』係『左下角』, 返䡛Y軸.
y = Font_frustum_height – y – height; |
- 逐字渲染『ASCII碼』
for(int index = 0; index < length; ++index ){ |
- 『ASCII碼』轉『紋理索引』, 首ASCII碼係『吉格』,
int c = text[index] – ‘ ‘; |
- 可渲染拉丁字母96, 『紋理索引』小於0大於96皆唔渲染.
if(c < 0 || c > 96) continue; |
- 得到紋理坐標
TEXTURE_REGION_PTR region = &font->region[c]; |
- 計算2D頂點坐標, 雙『三角形』.
Init_VECTOR2D(&vertex_array[0 * 3 + 0], x, y + height);
Init_VECTOR2D(&vertex_array[0 * 3 + 1], x + width, y + height);
Init_VECTOR2D(&vertex_array[0 * 3 + 2], x + width, y);
Init_VECTOR2D(&vertex_array[1 * 3 + 0], x, y + height);
Init_VECTOR2D(&vertex_array[1 * 3 + 1], x + width, y);
Init_VECTOR2D(&vertex_array[1 * 3 + 2], x, y); |
- 計算UV紋理坐標, 雙『三角形』.
Init_VECTOR2D(&texCoord_array[0 * 3 + 0], region->u1, region->v2);
Init_VECTOR2D(&texCoord_array[0 * 3 + 1], region->u2, region->v2);
Init_VECTOR2D(&texCoord_array[0 * 3 + 2], region->u2, region->v1);
Init_VECTOR2D(&texCoord_array[1 * 3 + 0], region->u1, region->v2);
Init_VECTOR2D(&texCoord_array[1 * 3 + 1], region->u2, region->v1);
Init_VECTOR2D(&texCoord_array[1 * 3 + 2], region->u1, region->v1); |
- 指定頂點數組
glVertexPointer(2, GL_FLOAT, 0, vertex_array); |
- 指定紋理座標
glTexCoordPointer(2, GL_FLOAT, 0, texCoord_array); |
- 繪畫頂點數組,雙『三角形』.
glDrawArrays(GL_TRIANGLES, 0, 2 * 3 ); |
- 移動下壹渲染位, 分『橫排』同『縱排』
if(VH == FONT_HORIZONTAL)
x = x + width;
else
if(VH == FONT_VERTICAL)
y = y + height;} |
- 禁用透明測試
glDisable(GL_ALPHA_TEST); |
- 當前矩陣堆棧出棧
ASCII數字 |
字符 |
0–31 |
控制字元,用于控制印表機等周邊設備 |
32-126 |
鍵盤字符 |
127 |
DELETE 命令 |
48-57 |
0-9 |
65-90 |
A-Z |
97-122 |
a-z |
128-255 |
擴展ASCII,增加特殊符號字符, 歐語字母和圖形符號 |
Photoshop位圖字符glyph |
|
Pixel |
32*32 |
Font |
Terminal Regular |
Size |
4pt |
|
mid |
Aa |
|
十進制(DEC) |
十六進制(HEX) |
ASCII字符 |
簡介 |
0 |
0x00 |
|
空格NUL(null) |
1 |
0x01 |
|
標題開始 SOH(start of headling) |
2 |
0x02 |
|
正文開始 STX (start of text) |
3 |
0x03 |
|
正文結束 ETX (end of text) |
4 |
0x04 |
|
傳輸結束 EOT (end of transmission) |
5 |
0x05 |
|
請求 ENQ (enquiry) |
6 |
0x06 |
|
收到通知 ACK (acknowledge) |
7 |
0x07 |
|
響鈴 BEL (bell) |
8 |
0x08 |
|
退格 BS (backspace) |
9 |
0x09 |
|
水準跳位字元 HT (horizontal tab) |
10 |
0x0A |
|
換行鍵 LF (NL line feed, new line) |
11 |
0x0B |
|
垂直跳位字元 VT (vertical tab) |
12 |
0x0C |
|
換頁鍵 FF (NP form feed, new page) |
13 |
0x0D |
|
回車鍵 CR (carriage return) |
14 |
0x0E |
|
不用切換 SO (shift out) |
15 |
0x0F |
|
啟用切換 SI (shift in) |
16 |
0x10 |
|
資料連結轉義DLE (data link escape) |
17 |
0x11 |
|
設備控制1 DC1 (device control 1) |
18 |
0x12 |
|
設備控制2 DC2 (device control 2) |
19 |
0x13 |
|
設備控制3 DC3 (device control 3) |
20 |
0x14 |
|
設備控制4 DC4 (device control 4) |
21 |
0x15 |
|
拒絕接收 NAK (negative acknowledge) |
22 |
0x16 |
|
同步空閒 SYN (synchronous idle) |
23 |
0x17 |
|
傳輸塊結束 ETB (end of trans. block) |
24 |
0x18 |
|
取消 CAN (cancel) |
25 |
0x19 |
|
EM (end of medium) |
26 |
0x1A |
|
替補 SUB (substitute) |
27 |
0x1B |
|
溢出 ESC (escape) |
28 |
0x1C |
|
檔分割符 FS (file separator) |
29 |
0x1D |
|
分組符 GS (group separator) |
30 |
0x1E |
|
記錄分離符 RS (record separator) |
31 |
0x1F |
|
單元分隔符號 US (unit separator) |
32 |
0x20 |
|
空格 (space) |
33 |
0x21 |
! |
嘆號 |
34 |
0x22 |
“ |
雙引號 |
35 |
0x23 |
# |
井號 |
36 |
0x24 |
$ |
美元符 |
37 |
0x25 |
% |
百分號 |
38 |
0x26 |
& |
和號 |
39 |
0x27 |
‘ |
閉單引號 |
40 |
0x28 |
( |
開括弧 |
41 |
0x29 |
) |
閉括弧 |
42 |
0x2A |
* |
星號 |
43 |
0x2B |
+ |
加號 |
44 |
0x2C |
, |
逗號 |
45 |
0x2D |
– |
減號/破折號 |
46 |
0x2E |
. |
句號 |
47 |
0x2F |
/ |
斜杠 |
48 |
0x30 |
0 |
|
49 |
0x31 |
1 |
|
50 |
0x32 |
2 |
|
51 |
0x33 |
3 |
|
52 |
0x34 |
4 |
|
53 |
0x35 |
5 |
|
54 |
0x36 |
6 |
|
55 |
0x37 |
7 |
|
56 |
0x38 |
8 |
|
57 |
0x39 |
9 |
|
58 |
0x3A |
: |
冒號 |
59 |
0x3B |
; |
分號 |
60 |
0x3C |
< |
小於 |
61 |
0x3D |
= |
等號 |
62 |
0x3E |
> |
大於 |
63 |
0x3F |
? |
問號 |
64 |
0x40 |
@ |
電子郵件符號 |
65 |
0x41 |
A |
|
66 |
0x42 |
B |
|
67 |
0x43 |
C |
|
68 |
0x44 |
D |
|
69 |
0x45 |
E |
|
70 |
0x46 |
F |
|
71 |
0x47 |
G |
|
72 |
0x48 |
H |
|
73 |
0x49 |
I |
|
74 |
0x4A |
J |
|
75 |
0x4B |
K |
|
76 |
0x4C |
L |
|
77 |
0x4D |
M |
|
78 |
0x4E |
N |
|
79 |
0x4F |
O |
|
80 |
0x50 |
P |
|
81 |
0x51 |
Q |
|
82 |
0x52 |
R |
|
83 |
0x53 |
S |
|
84 |
0x54 |
T |
|
85 |
0x55 |
U |
|
86 |
0x56 |
V |
|
87 |
0x57 |
W |
|
88 |
0x58 |
X |
|
89 |
0x59 |
Y |
|
90 |
0x5A |
Z |
|
91 |
0x5B |
[ |
開方括號 |
92 |
0x5C |
\ |
反斜杠 |
93 |
0x5D |
] |
閉方括號 |
94 |
0x5E |
^ |
脫字元 |
95 |
0x5F |
_ |
下劃線 |
96 |
0x60 |
` |
開單引號 |
97 |
0x61 |
a |
|
98 |
0x62 |
b |
|
99 |
0x63 |
c |
|
100 |
0x64 |
d |
|
101 |
0x65 |
e |
|
102 |
0x66 |
f |
|
103 |
0x67 |
g |
|
104 |
0x68 |
h |
|
105 |
0x69 |
i |
|
106 |
0x6A |
j |
|
107 |
0x6B |
k |
|
108 |
0x6C |
l |
|
109 |
0x6D |
m |
|
110 |
0x6E |
n |
|
111 |
0x6F |
o |
|
112 |
0x70 |
p |
|
113 |
0x71 |
q |
|
114 |
0x72 |
r |
|
115 |
0x73 |
s |
|
116 |
0x74 |
t |
|
117 |
0x75 |
u |
|
118 |
0x76 |
v |
|
119 |
0x77 |
w |
|
120 |
0x78 |
x |
|
121 |
0x79 |
y |
|
122 |
0x7A |
z |
|
123 |
0x7B |
{ |
開花括弧 |
124 |
0x7C |
| |
垂線 |
125 |
0x7D |
} |
閉花括弧 |
126 |
0x7E |
~ |
波浪號 |
127 |
0x7F |
|
刪除DEL(DELETE) |
128 |
0x80 |
Ç |
Ccedil |
129 |
0x81 |
ü |
uuml |
130 |
0x82 |
é |
eacute |
131 |
0x83 |
â |
circ |
132 |
0x84 |
ä |
auml |
133 |
0x85 |
à |
agrave |
134 |
0x86 |
å |
aring |
135 |
0x87 |
ç |
ccedil |
136 |
0x88 |
ê |
ecirc |
137 |
0x89 |
ë |
euml |
138 |
0x8A |
è |
egrave |
139 |
0x8B |
ï |
iuml |
140 |
0x8C |
î |
icirc |
141 |
0x8D |
ì |
igrave |
142 |
0x8E |
Ä |
Auml |
143 |
0x8F |
Å |
ring |
144 |
0x90 |
É |
Eacute |
145 |
0x91 |
æ |
aelig |
146 |
0x92 |
Æ |
AElig |
147 |
0x93 |
ô |
ocirc |
148 |
0x94 |
ö |
ouml |
149 |
0x95 |
ò |
ograve |
150 |
0x96 |
û |
ucirc |
151 |
0x97 |
ù |
ugrave |
152 |
0x98 |
ÿ |
yuml |
153 |
0x99 |
Ö |
Ouml |
154 |
0x9A |
Ü |
Uuml |
155 |
0x9B |
¢ |
美分(cent) |
156 |
0x9C |
£ |
英磅(pound) |
157 |
0x9D |
¥ |
日元(yen) |
158 |
0x9E |
₧ |
|
159 |
0x9F |
ƒ |
|
160 |
0xA0 |
á |
aacute |
161 |
0xA1 |
í |
iacute |
162 |
0xA2 |
ó |
oacute |
163 |
0xA3 |
ú |
uacute |
164 |
0xA4 |
ñ |
ntilde |
165 |
0xA5 |
Ñ |
Ntilde |
166 |
0xA6 |
ª |
|
167 |
0xA7 |
º |
|
168 |
0xA8 |
¿ |
|
169 |
0xA9 |
⌐ |
|
170 |
0xAA |
¬ |
|
171 |
0xAB |
½ |
|
172 |
0xAC |
¼ |
|
173 |
0xAD |
¡ |
|
174 |
0xAE |
« |
|
175 |
0xAF |
» |
|
176 |
0xB0 |
░ |
|
177 |
0xB1 |
▒ |
|
178 |
0xB2 |
▓ |
|
179 |
0xB3 |
│ |
|
180 |
0xB4 |
┤ |
|
181 |
0xB5 |
╡ |
|
182 |
0xB6 |
╢ |
|
183 |
0xB7 |
╖ |
|
184 |
0xB8 |
╕ |
|
185 |
0xB9 |
╣ |
|
186 |
0xBA |
║ |
|
187 |
0xBB |
╗ |
|
188 |
0xBC |
╝ |
|
189 |
0xBD |
╜ |
|
190 |
0xBE |
╛ |
|
191 |
0xBF |
┐ |
|
192 |
0xC0 |
└ |
|
193 |
0xC1 |
┴ |
|
194 |
0xC2 |
┬ |
|
195 |
0xC3 |
├ |
|
196 |
0xC4 |
─ |
|
197 |
0xC5 |
┼ |
|
198 |
0xC6 |
╞ |
|
199 |
0xC7 |
╟ |
|
200 |
0xC8 |
╚ |
|
201 |
0xC9 |
╔ |
|
202 |
0xCA |
╩ |
|
203 |
0xCB |
╦ |
|
204 |
0xCC |
╠ |
|
205 |
0xCD |
═ |
|
206 |
0xCE |
╬ |
|
207 |
0xCF |
╧ |
|
208 |
0xD0 |
╨ |
|
209 |
0xD1 |
╤ |
|
210 |
0xD2 |
╥ |
|
211 |
0xD3 |
╙ |
|
212 |
0xD4 |
Ô |
|
213 |
0xD5 |
╒ |
|
214 |
0xD6 |
╓ |
|
215 |
0xD7 |
╫ |
|
216 |
0xD8 |
╪ |
|
217 |
0xD9 |
┘ |
|
218 |
0xDA |
┌ |
|
219 |
0xDB |
█ |
|
220 |
0xDC |
▄ |
|
221 |
0xDD |
▌ |
|
222 |
0xDE |
▐ |
|
223 |
0xDF |
▀ |
|
224 |
0xE0 |
α |
阿爾法(Alpha) |
225 |
0xE1 |
ß |
貝塔(beta) |
226 |
0xE2 |
Γ |
Gamma |
227 |
0xE3 |
π |
圓周率(pi) |
228 |
0xE4 |
Σ |
sigma |
229 |
0xE5 |
σ |
sigma |
230 |
0xE6 |
µ |
mu |
231 |
0xE7 |
τ |
tau |
232 |
0xE8 |
Φ |
PHi |
233 |
0xE9 |
Θ |
Theta |
234 |
0xEA |
Ω |
歐米伽(Omega) |
235 |
0xEB |
δ |
Delta |
236 |
0xEC |
∞ |
無窮 |
237 |
0xED |
φ |
phi |
238 |
0xEE |
ε |
epsilon |
239 |
0xEF |
∩ |
|
240 |
0xF0 |
≡ |
|
241 |
0xF1 |
± |
|
242 |
0xF2 |
≥ |
|
243 |
0xF3 |
≤ |
|
244 |
0xF4 |
⌠ |
|
245 |
0xF5 |
⌡ |
|
246 |
0xF6 |
÷ |
|
247 |
0xF7 |
≈ |
|
248 |
0xF8 |
≈ |
|
249 |
0xF9 |
∙ |
|
250 |
0xFA |
· |
|
251 |
0xFB |
√ |
|
252 |
0xFC |
ⁿ |
|
253 |
0xFD |
² |
|
254 |
0xFE |
■ |
|
255 |
0xFF |
ÿ |
|