📄 tutorial_17.htm
字号:
<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%">现在我们所要做的是恢复透视视图。我们选择投影矩阵并用glPopMatrix()恢复我们先前用glPushMatrix()保存的设置。用相反的顺序恢复设置很重要。
<br></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>
glPopMatrix(); <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%">现在我们选择模型视点矩阵,做相同的工作。我们使用glPopMatrix()恢复模型视点矩阵到我们设置正交投影显示之前。
</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>
glPopMatrix(); <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> glEnable(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%">我们没有修改ReSizeGLScene(),所以我们直接跳到InitGL()。<br></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>int InitGL(GLvoid) <font color="#ffffaa">// 此处开始对OpenGL进行所有设置</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%">我们跳到创建纹理的代码。如果由于某种原因创建纹理失败了,我们返回FALSE。这将让我们的程序知道发生了一个错误从而关闭程序。</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> if (!LoadGLTextures()) <font color="#ffffaa">// 调用纹理载入子例程</font>
{
return FALSE; <font color="#ffffaa">// 如果未能载入,返回FALSE</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%">如果没有错,我们跳到创建字体的代码。在创建字体时不会出什么错所以我们省略了错误检查。 <br></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> BuildFont(); <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%">现在我们做通常的GL设置。我们将背景色设为黑色,将深度清为1.0。我们选择一个深度测试模式和一个混合模式。我们启用平滑着色,最后启用2维纹理映射。</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> glClearColor(0.0f, 0.0f, 0.0f, 0.0f); <font color="#ffffaa">// 黑色背景 </font>
glClearDepth(1.0); <font color="#ffffaa"> // 设置深度缓存</font>
glDepthFunc(GL_LEQUAL); <font color="#ffffaa">// 所作深度测试的类型</font>
glBlendFunc(GL_SRC_ALPHA,GL_ONE); <font color="#ffffaa">// 设置混合因子</font>
glShadeModel(GL_SMOOTH); <font color="#ffffaa">// 启用阴影平滑</font>
glEnable(GL_TEXTURE_2D); <font color="#ffffaa">// </font><font color="#aaffaa" size="3"><font color="#ffffaa">启用纹理映射</font></font>
return TRUE; <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%">下面这段代码将完成绘图。我们先绘制3D物体最后绘制文字,这样文字将显示在3D物体上面,而不会被3D物体遮住。我之所以加入一个3D物体是为了演示透视投影和正交投影可同时使用。</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>int DrawGLScene(GLvoid) <font color="#ffffaa">// 从这里开始进行所有的绘制</font>
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); <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>
</
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -