⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tutorial_07.htm

📁 如果你相信它就好好学学吧,同样这里也只是个入门
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<tbody>
  <tr>
    <td><img src="Tutorial_07_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_07_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_07_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>	glEnable(GL_LIGHT1);							<font color="#ffffaa">// 启用一号光源</font>
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_07_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_07_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_07_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_07_files/l.gif"><img src="Tutorial_07_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">下一段代码绘制贴图立方体。我只对新增的代码进行注解。如果您对没有注解的代码有疑问,回头看看第六课。</td>
    <td background="Tutorial_07_files/r.gif"><img src="Tutorial_07_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_07_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_07_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_07_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_07_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_07_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_07_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_07_files/l.gif"><img src="Tutorial_07_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">下
三行代码放置并旋转贴图立方体。glTranslatef(0.0f,0.0f,z)将立方体沿着Z轴移动Z单位。glRotatef(xrot,
1.0f,0.0f,0.0f)将立方体绕X轴旋转xrot。glRotatef(yrot,0.0f,1.0f,0.0f)将立方体绕Y轴旋转
yrot。</td>
    <td background="Tutorial_07_files/r.gif"><img src="Tutorial_07_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_07_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_07_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_07_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>	glTranslatef(0.0f,0.0f,z);						<font color="#ffffaa">// 移入/移出屏幕 z 个单位</font>

	glRotatef(xrot,1.0f,0.0f,0.0f);						<font color="#ffffaa">// 绕X轴旋转</font>
	glRotatef(yrot,0.0f,1.0f,0.0f);						<font color="#ffffaa">// 绕Y轴旋转</font>
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_07_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_07_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_07_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_07_files/l.gif"><img src="Tutorial_07_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">下一行与我们在第六课中的类似。有所不同的是,这次我们绑定的纹理是texture[filter],而不是上一课中的texture[0]。任何时候,我们按下F键,filter 
        的值就会增加。如果这个数值大于2,变量filter 将被重置为0。程序初始时,变量filter 的值也将设为0。使用变量filter 我们就可以选择三种纹理中的任意一种。</td>
    <td background="Tutorial_07_files/r.gif"><img src="Tutorial_07_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_07_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_07_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_07_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>	glBindTexture(GL_TEXTURE_2D, texture[filter]);				<font color="#ffffaa">// 选择由filter决定的纹理</font>

	glBegin(GL_QUADS);							<font color="#ffffaa">// 开始绘制四边形</font>
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_07_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_07_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_07_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_07_files/l.gif"><img src="Tutorial_07_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%"><p>glNormal3f
是这一课的新东西。Normal就是法线的意思,所谓法线是指经过面(多边形)上的一点且垂直于这个面(多边形)的直线。使用光源的时候必须指定一条法
线。法线告诉OpenGL这个多边形的朝向,并指明多边形的正面和背面。如果没有指定法线,什么怪事情都可能发生:不该照亮的面被照亮了,多边形的背面也
被照亮....。对了,法线应该指向多边形的外侧。 </p>
        <p>看着木箱的前面您会注意到法线与Z轴正向同向。这意味着法线正指向观察者-您自己。这正是我们所
希望的。对于木箱的背面,也正如我们所要的,法线背对着观察者。如果立方体沿着X或Y轴转个180度的话,前侧面的法线仍然朝着观察者,背面的法线也还是
背对着观察者。换句话说,不管是哪个面,只要它朝着观察者这个面的法线就指向观察者。由于光源紧邻观察者,任何时候法线对着观察者时,这个面就会被照亮。
并且法线越朝着光源,就显得越亮一些。如果您把观察点放到立方体内部,你就会法线里面一片漆黑。因为法线是向外指的。如果立方体内部没有光源的话,当然是
一片漆黑。<br>
        </p></td>
    <td background="Tutorial_07_files/r.gif"><img src="Tutorial_07_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_07_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_07_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_07_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
</font><pre><font color="#aaffaa" size="3">		<font color="#ffffaa">// 前侧面</font>
		glNormal3f( 0.0f, 0.0f, 1.0f);					<font color="#ffffaa">// 法线指向观察者</font>
		glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);	
		glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);	
		glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);	
		glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);	
		<font color="#ffffaa">// 后侧面</font>
		glNormal3f( 0.0f, 0.0f,-1.0f);					<font color="#ffffaa">// 法线背向观察者</font>
		glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);	
		glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);	
		glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);	
		glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);	
		<font color="#ffffaa">// 顶面</font>
		glNormal3f( 0.0f, 1.0f, 0.0f);					<font color="#ffffaa">// 法线向上</font>
		glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);	
		glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f);	
		glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f);	
		glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);	
		<font color="#ffffaa">// 底面</font>
		glNormal3f( 0.0f,-1.0f, 0.0f);					<font color="#ffffaa">// 法线朝下</font>
		glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);	
		glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);	
		glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);	
		glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);	
		<font color="#ffffaa">// 右侧面</font>
		glNormal3f( 1.0f, 0.0f, 0.0f);					<font color="#ffffaa">// 法线朝右</font>
		glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);	
		glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);	
		glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);	
		glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);	
		<font color="#ffffaa">// 左侧面</font>
		glNormal3f(-1.0f, 0.0f, 0.0f);					<font color="#ffffaa">// 法线朝左</font>
		glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);	
		glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);	
		glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);	
		glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);	
	glEnd();								<font color="#ffffaa">// 四边形绘制结束</font>
</font></pre>
 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_07_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_07_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_07_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_07_files/l.gif"><img src="Tutorial_07_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">下两行代码将xot和yrot的旋转值分别增加xspeed和yspeed个单位。xspeed和yspeed的值越大,立方体转得就越快。</td>
    <td background="Tutorial_07_files/r.gif"><img src="Tutorial_07_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_07_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_07_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_07_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>	xrot+=xspeed;								<font color="#ffffaa">// xrot 增加 xspeed 单位</font>
	yrot+=yspeed;								<font color="#ffffaa">// yrot 增加 yspeed 单位</font>
	return TRUE;	
}
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_07_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_07_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_07_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_07_files/l.gif"><img src="Tutorial_07_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">现在转入WinMain()主函数。我们将在这里增加开关光源、旋转木箱、切换过滤方式以及将木箱移近移远的控制代码。在接近WinMain()函数结束的地方你会看到SwapBuffers(hDC)这行代码。然后就在这一行后面添加如下的代码。<br>
        代码将检查L键是否按下过。如果L键已按下,但lp的值不是false的话,意味着L键还没有松开,这时什么都不会发生。</td>
    <td background="Tutorial_07_files/r.gif"><img src="Tutorial_07_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_07_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_07_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_07_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
</font><pre><font color="#aaffaa" size="3">				SwapBuffers(hDC);				<font color="#ffffaa">// 交换缓存</font>
				if (keys['L'] &amp;&amp; !lp)				<font color="#ffffaa">// L 键已按下并且松开了?</font>
				{
</font></pre>
 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_07_files/tl.jpg" height="28" width="28"></td>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -