📄 tutorial_17.htm
字号:
set=1; <font color="#ffffaa">// 设置其为1</font>
}
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td background="Tutorial_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">现在我们选择字体纹理。我们这么做是防止在我们决定往屏幕上输出东西时选择了不同的纹理。 </td>
<td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_files/r.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<font color="#aaffaa" size="3">
<pre> glBindTexture(GL_TEXTURE_2D, texture[0]); <font color="#ffffaa">// 绑定为字体纹理</font>
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td background="Tutorial_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">现在我们禁用深度测试。我这么做是因为混合的效果会更好。如果你不禁用深度测试,文字可能会被什么东西挡住,或得不到正确的混合效果。如果你不打算混合文字(那样文字周围的黑色区域就不会显示)你可以启用深度测试。
</td>
<td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_files/r.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<font color="#aaffaa" size="3">
<pre> glDisable(GL_DEPTH_TEST); <font color="#ffffaa">// 禁止深度测试</font>
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td background="Tutorial_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">下面几行十分重要!我们选择投影矩阵。之后使用一个叫做glPushMatrix()的命令。glPushMatrix存储当前矩阵(投影)。有些像计算器的存储按钮。</td>
<td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_files/r.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<font color="#aaffaa" size="3">
<pre> glMatrixMode(GL_PROJECTION); <font color="#ffffaa">// 选择投影矩阵</font>
glPushMatrix(); <font color="#ffffaa">// 保存当前的投影矩阵</font>
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td background="Tutorial_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">现
在我们保存了投影矩阵,重置矩阵并设置正交投影屏幕。第一和第三个数字(0)表示屏幕的底边和左边。如果愿意我们可以将屏幕的左边设为-640,但如果不
需要我们为什么要设负数呢。第二和第四个数字表示屏幕的上边和右边。将这些值设为你当前使用的分辨率是明智的做法。我们不需要用到深度,所以我们将z值设
为-1与1。</td>
<td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_files/r.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<font color="#aaffaa" size="3">
<pre> glLoadIdentity(); <font color="#ffffaa">// 重置投影矩阵</font>
glOrtho(0,640,0,480,-1,1); <font color="#ffffaa">// 设置正投影的可视区域</font>
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td background="Tutorial_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">现在我们选择模型视点矩阵,用glPushMatrix()保存当前设置。然后我们重置模型视点矩阵以便在正交投影视点下工作。
</td>
<td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_files/r.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<font color="#aaffaa" size="3">
<pre> glMatrixMode(GL_MODELVIEW); <font color="#ffffaa">// 选择模型变换矩阵</font>
glPushMatrix(); <font color="#ffffaa">// 保存当前的模型变换矩阵</font>
glLoadIdentity(); <font color="#ffffaa"> // 重置模型变换矩阵</font>
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td background="Tutorial_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">在保存了透视参数,设置了正交投影屏幕后,现在我们可以绘制文字了。我们从移动到绘制文字的位置开始。我们使用
glTranslated()而不是glTranslatef()因为我们处理的是像素,所以浮点值并不重要。毕竟,你不可能用半个像素:) </td>
<td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_files/r.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<font color="#aaffaa" size="3">
<pre> glTranslated(x,y,0); <font color="#ffffaa">// 把字符原点移动到(x,y)位置 </font>
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td background="Tutorial_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">下面这行选择我们要使用的字符集。如果我们想使用第二个字符集,我们在当前的显示列表基数上加上128(128时我们256个字符的一半)。通过加上128,我们跳过了头128个字符。</td>
<td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_files/r.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<font color="#aaffaa" size="3">
</font><pre><font color="#aaffaa" size="3"> glListBase(base-32+(128*set)); <font color="#ffffaa">// 选择字符集</font>
</font></pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td background="Tutorial_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">现
在剩下的就是在屏幕上绘制文字了。我们同其它字体教程一样来完成这步。我们使用glCallLists()。strlen(string)是字符串的长度
(我们想绘制多少字符),GL_UNSIGNED_BYTE意味着每个字符被表示为一个无符号字节(一个字节是一个从0到255的值)。最后,字符串保存
我们想打印的文字。 </td>
<td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_files/r.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td><img src="Tutorial_17_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
</tr>
</tbody></table>
<font color="#aaffaa" size="3">
<pre> glCallLists(strlen(string),GL_BYTE,string); <font color="#ffffaa">// 把字符串写入到屏幕 </font>
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -