📄 tutorial_15.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><!-- 这篇文章由Dancingwind翻译,作者的联系方式zhouwei02@mails.tsinghua.edu.cn --><title>NeHe OpenGL教程第十五课,DancingWind翻译</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">A:link {
COLOR: #ccaaff; TEXT-DECORATION: none
}
A:visited {
COLOR: #ccaaff; TEXT-DECORATION: none
}
A:active {
COLOR: #ccaaff; TEXT-DECORATION: none
}
A:hover {
COLOR: #ffccaa; TEXT-DECORATION: none
}
</style>
<meta content="Microsoft FrontPage 3.0" name="GENERATOR"></head><body bgcolor="#000000" text="#ffffff">
<center><br>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td height="130" width="326"><img src="Tutorial_15_files/logo.png" height="130" width="326"></td>
<td align="center" valign="center" width="75%"><div align="center"><font color="#ffccaa" size="+3"><b><i>第15课</i></b></font></div></td>
</tr>
</tbody>
</table>
<!-- 上边框-->
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_15_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_15_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_15_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_15_files/l.gif"><img src="Tutorial_15_files/l.gif" height="28" width="28"></td>
<!-- 中部文字部分-->
<td valign="top" width="100%">
<table border="0" width="100%">
<tbody><tr>
<td width="29%"><img src="Tutorial_15_files/lesson15.jpg" height="180" width="240"></td>
<td width="71%"><p><font class="head">图形字体的纹理映射:</font></p>
<p><font size="3">这一课,我们将在上一课的基础上创建带有纹理的字体,它真的很简单。</font></p></td>
</tr>
</tbody></table>
</td>
<!-- 中部右边框-->
<td background="Tutorial_15_files/r.gif"><img src="Tutorial_15_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_15_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_15_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_15_files/br.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_15_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_15_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_15_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_15_files/l.gif"><img src="Tutorial_15_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">在发布了前两篇关于位图字体和轮廓字体的教程以后,我收到很多邮件,很多读者都想知道如何才能给字体赋予纹理贴图。你可以使用自动纹理坐标生成器。它会为字体上的每一个多边形生成纹理坐标。
<p>一
个小注释,这段代码是专门针对Windows写的,它使用了Windows的wgl函数来创建字体,显然,Apple机系统有agl,X系统有glx来支
持做同样事情的,不幸的是,我不能保证这些代码也是容易使用的。如果哪位有能在屏幕上显示文字且独立于平台的代码,请告诉我,我将重写一个有关字体的教
程。</p>
<p>我们将使用第14课的代码来创作纹理字体的演示。如果程序中哪部分的代码有变化,我会重写那部分的所有代码以便看出我做的改动。<br>
</p></td>
<td background="Tutorial_15_files/r.gif"><img src="Tutorial_15_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_15_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_15_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_15_files/br.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> </font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_15_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_15_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_15_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_15_files/l.gif"><img src="Tutorial_15_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">我们还要添加一个叫做texture[]的整型变量。它用于保存纹理。后面3行是第14课中的代码,本课不做改动。<br></td>
<td background="Tutorial_15_files/r.gif"><img src="Tutorial_15_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_15_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_15_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_15_files/br.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> </font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_15_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_15_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_15_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_15_files/l.gif"><img src="Tutorial_15_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">下面的部分做了一些小改动。我打算在这课使用wingdings字体来显示一个海盗旗(骷髅头和十字骨头)的标志。如果你想显示文字的话,就不用改动第14课中的代码了,也可以选择另一种字体。
<p>有
些人想知道如何使用wingdings字体,这也是我不用标准字体的一个原因。wingdings是一种符号字体,使用它时需要做一些改动。告诉
Windows使用wingdings字体并不太简单。如果你把字体的名字改为wingdings,你会注意到字体其实并没有选到。你必须告诉
Windows这种字体是一种符号字体而不是一种标准字符字体。后面会继续解释。<br>
</p></td>
<td background="Tutorial_15_files/r.gif"><img src="Tutorial_15_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_15_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_15_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_15_files/br.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<font color="#aaffaa" size="3">
</font><pre><font color="#aaffaa" size="3">GLvoid BuildFont(GLvoid) <font color="#ffffaa"> // 创建位图字体</font>
{
GLYPHMETRICSFLOAT gmf[256]; <font color="#ffffaa">// 记录256个字符的信息</font>
HFONT font; <font color="#ffffaa">// 字体句柄</font>
base = glGenLists(256); <font color="#ffffaa">// 创建256个显示列表</font>
font = CreateFont( -12, <font color="#ffffaa"> // 字体高度</font>
0, <font color="#ffffaa">// 字体宽度</font>
0, <font color="#ffffaa">// 字体的旋转角度 Angle Of Escapement</font>
0, <font color="#ffffaa">// 字体底线的旋转角度Orientation Angle</font>
FW_BOLD, <font color="#ffffaa">// 字体的重量</font>
FALSE, <font color="#ffffaa">// 是否使用斜体</font>
FALSE, <font color="#ffffaa">// 是否使用下划线</font>
FALSE, <font color="#ffffaa">// 是否使用删除线</font>
</font></pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_15_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_15_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_15_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_15_files/l.gif"><img src="Tutorial_15_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">这
就是有魔力的那一行!不使用第14课中的ANSI_CHARSET,我们将使用SYMBOL_CHARSET。这会告诉Windows我们创建的字体并不
是由标准字符组成的典型字体。所谓符号字体通常是由一些小图片(符号)组成的。如果你忘了改变这行,wingdings,webdings以及你想用的其
它符号字体就不会工作。<br></td>
<td background="Tutorial_15_files/r.gif"><img src="Tutorial_15_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_15_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_15_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_15_files/br.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<font color="#aaffaa" size="3">
<pre> SYMBOL_CHARSET, <font color="#ffffaa">// 设置字符集</font>
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_15_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_15_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_15_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_15_files/l.gif"><img src="Tutorial_15_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">下面几行没有变化。<br></td>
<td background="Tutorial_15_files/r.gif"><img src="Tutorial_15_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_15_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_15_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_15_files/br.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<font color="#aaffaa" size="3">
</font><pre><font color="#aaffaa" size="3"> OUT_TT_PRECIS, <font color="#ffffaa">// 输出精度</font>
CLIP_DEFAULT_PRECIS, <font color="#ffffaa">// 裁剪精度</font>
ANTIALIASED_QUALITY, <font color="#ffffaa">// 输出质量</font>
FF_DONTCARE|DEFAULT_PITCH, <font color="#ffffaa"> // Family And Pitch</font>
</font></pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_15_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_15_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_15_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_15_files/l.gif"><img src="Tutorial_15_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">既然我们已经选择了符号字符集标识符,我们就可以选择wingdings字体了</td>
<td background="Tutorial_15_files/r.gif"><img src="Tutorial_15_files/r.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -