📄 tutorial_15.htm
字号:
<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> "Wingdings"); <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%">剩下几行代码没有变化</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> SelectObject(hDC, font); <font color="#ffffaa"> // 选择创建的字体</font>
wglUseFontOutlines( hDC, <font color="#ffffaa">// 设置当前窗口设备描述表的句柄</font>
0, <font color="#ffffaa">// 用于创建显示列表字体的第一个字符的ASCII值</font>
255, <font color="#ffffaa">// 字符数</font>
base, <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%">我们允许有更多的误差,这意味着GL不会严格的遵守字体的轮廓线。如果你把误差设置为0.0f,你就会发现严格地在曲面上贴图存在一些问题。但是如果你允许一定的误差,很多问题都可以避免。<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> 0.1f, <font color="#ffffaa">// 字体的光滑度,越小越光滑,0.0为最光滑的状态</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%">下面三行代码还是相同的</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> 0.2f, <font color="#ffffaa">// 在z方向突出的距离</font>
WGL_FONT_POLYGONS, <font color="#ffffaa"> // 使用多边形来生成字符,每个顶点具有独立的法线</font>
gmf); <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%">在ReSizeGLScene()函数之前,我们要加上下面一段代码来读取纹理。你可能会认得这些前几课中的代码。我们创建一个保存位图的地方,读取位图,告诉Windows生成一个纹理,并把它保存在texture[0]中。
<p>我们创建一种细化纹理(mipmapped texture),这样会看起来好些。纹理的名字叫做lights.bmp。</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">
<pre>if (TextureImage[0]=LoadBMP("Data/Lights.bmp")) <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%">下
面四行代码将为我们绘制在屏幕上的任何物体自动生成纹理坐标。函数glTexGen非常强大,而且复杂,如果要完全讲清楚它的数学原理需要再写一篇教程。
不过,你只要知道GL_S和GL_T是纹理坐标就可以了。默认状态下,它被设置为提取物体此刻在屏幕上的x坐标和y坐标,并把它们转换为顶点坐标。你会发
现到物体在z平面没有纹理,只显示一些斑纹。正面和反面都被赋予了纹理,这些都是由glTexGen函数产生的。(X(GL_S)用于从左到右映射纹理,
Y(GL_T)用于从上到下映射纹理。 <p>GL_TEXTURE_GEN_MODE允许我们选择我们想在S和T纹理坐标上使用的纹理映射模式。你有3种选择:</p>
<p>GL_EYE_LINEAR - 纹理会固定在屏幕上。它永远不会移动。物体将被赋予处于它通过的地区的那一块纹理。</p>
<p>GL_OBJECT_LINEAR - 这种就是我们使用的模式。纹理被固定于在屏幕上运动的物体上。<br>
GL_SPHERE_MAP - 每个人都喜欢。创建一种有金属质感的物体。<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">
<pre> <font color="#ffffaa">// 设置纹理映射模式</font>
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glEnable(GL_TEXTURE_GEN_S); <font color="#ffffaa">// 使用自动生成纹理</font>
glEnable(GL_TEXTURE_GEN_T); </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%">在InitGL()的最后有几行新代码。BuildFont()被放到了读取纹理的代码之后。glEnable(GL_COLOR_MATERIAL)
这行被删掉了,如果你想使用glColor3f(r,g,b)来改变纹理的颜色,那么就把glEnable(GL_COLOR_MATERIAL)这行重新加到这部分代码中。</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>int InitGL(GLvoid) <font color="#ffffaa">// 此处开始对OpenGL进行所有设置</font>
{
if (!LoadGLTextures()) <font color="#ffffaa">// 载入纹理</font>
{
return FALSE; <font color="#ffffaa">// 失败则返回</font>
}
BuildFont(); <font color="#ffffaa">// 创建字体显示列表</font>
glShadeModel(GL_SMOOTH); <font color="#ffffaa">// 启用阴影平滑</font>
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); <font color="#ffffaa">// 黑色背景</font>
glClearDepth(1.0f); <font color="#ffffaa">// 设置深度缓存</font>
glEnable(GL_DEPTH_TEST); <font color="#ffffaa"> // 启用深度测试</font>
glDepthFunc(GL_LEQUAL); <font color="#ffffaa">// 所作深度测试的类型</font>
glEnable(GL_LIGHT0); <font color="#ffffaa">// 使用第0号灯</font>
glEnable(GL_LIGHTING); <font color="#ffffaa">// 使用光照</font>
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); <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%">启动2D纹理映射,并选择第一个纹理。这样就把第一个纹理映射到我们绘制在屏幕上的3D物体上了。如果你想加入更多的操作,可以按自己的意愿启动或禁用纹理映射。</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">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -