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

📄 tutorial_26.htm

📁 如果你相信它就好好学学吧,同样这里也只是个入门
💻 HTM
📖 第 1 页 / 共 4 页
字号:
			}
		}
	}
	return Status;								<font color="#ffffaa">// 成功返回</font>
}
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
    <td valign="top" width="100%">一个新的函数glClearStencil被加入到初始化代码中,它用来设置清空操作后蒙板缓存中的值。其他的操作保持不变。</td>
    <td background="Tutorial_26_files/r.png"><img src="Tutorial_26_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
	
</font><pre><font color="#aaffaa" size="3">int InitGL(GLvoid)								<font color="#ffffaa">// 初始化OpenGL</font>
{
	if (!LoadGLTextures())					<font color="#ffffaa">	// 载入纹理</font>
	{
		return FALSE;							
	}
	glShadeModel(GL_SMOOTH);						
	glClearColor(0.2f, 0.5f, 1.0f, 1.0f);					
	glClearDepth(1.0f);							
	glClearStencil(0);						<font color="#ffffaa">	// 设置蒙板值</font>
	glEnable(GL_DEPTH_TEST);						
	glDepthFunc(GL_LEQUAL);						
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);			
	glEnable(GL_TEXTURE_2D);						<font color="#ffffaa">// 使用2D纹理</font></font></pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
    <td valign="top" width="100%">下面的代码用来启用光照</td>
    <td background="Tutorial_26_files/r.png"><img src="Tutorial_26_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
	
<pre>	glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmb);			
	glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDif);				
	glLightfv(GL_LIGHT0, GL_POSITION, LightPos);			
	glEnable(GL_LIGHT0);	
	glEnable(GL_LIGHTING);
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
    <td valign="top" width="100%">下面的代码使用二次几何体创建一个球体,在前面的教程中都已经详纤,这里不再重复。</td>
    <td background="Tutorial_26_files/r.png"><img src="Tutorial_26_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
	
<pre>	q = gluNewQuadric();							<font color="#ffffaa">// 创建一个二次几何体</font>
	gluQuadricNormals(q, GL_SMOOTH);					<font color="#ffffaa">	// 使用平滑法线</font>
	gluQuadricTexture(q, GL_TRUE);						<font color="#ffffaa">// 使用纹理</font>

	glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);				<font color="#ffffaa">// 设置球纹理映射</font>
	glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);			

	return TRUE;								<font color="#ffffaa">// 初始化完成,成功返回</font>
}
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
    <td valign="top" width="100%">下面的代码绘制我们的球</td>
    <td background="Tutorial_26_files/r.png"><img src="Tutorial_26_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>void DrawObject()								<font color="#ffffaa">// 绘制我们的球</font>
{
	glColor3f(1.0f, 1.0f, 1.0f);					<font color="#ffffaa">// 设置为白色</font>
	glBindTexture(GL_TEXTURE_2D, texture[1]);				<font color="#ffffaa">// 设置为球的纹理</font>
	gluSphere(q, 0.35f, 32, 16);					<font color="#ffffaa">// 绘制球</font></pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
    <td valign="top" width="100%">绘制完一个白色的球后,我们使用环境贴图来绘制另一个球,把这两个球按alpha混合起来。</td>
    <td background="Tutorial_26_files/r.png"><img src="Tutorial_26_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>	glBindTexture(GL_TEXTURE_2D, texture[2]);				<font color="#ffffaa">// 设置为环境纹理</font>
	glColor4f(1.0f, 1.0f, 1.0f, 0.4f);					<font color="#ffffaa">// 使用alpha为40%的白色</font>
	glEnable(GL_BLEND);						<font color="#ffffaa">// 启用混合</font>
	glBlendFunc(GL_SRC_ALPHA, GL_ONE);					<font color="#ffffaa">// 把原颜色的40%与目标颜色混合</font>
	glEnable(GL_TEXTURE_GEN_S);						<font color="#ffffaa">// 使用球映射</font>
	glEnable(GL_TEXTURE_GEN_T);						

	gluSphere(q, 0.35f, 32, 16);					<font color="#ffffaa">// 绘制球体,并混合</font>

	glDisable(GL_TEXTURE_GEN_S);					<font color="#ffffaa">// 让OpenGL回到默认的属性</font>
	glDisable(GL_TEXTURE_GEN_T);						
	glDisable(GL_BLEND);							
}
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
    <td valign="top" width="100%">绘制地板</td>
    <td background="Tutorial_26_files/r.png"><img src="Tutorial_26_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>void DrawFloor()			
{
	glBindTexture(GL_TEXTURE_2D, texture[0]);				<font color="#ffffaa">// 选择地板纹理,地板由一个长方形组成</font>
	glBegin(GL_QUADS);							
		glNormal3f(0.0, 1.0, 0.0);					
		glTexCoord2f(0.0f, 1.0f);					<font color="#ffffaa">// 左下</font>
		glVertex3f(-2.0, 0.0, 2.0);					

		glTexCoord2f(0.0f, 0.0f);					<font color="#ffffaa">// 左上</font>
		glVertex3f(-2.0, 0.0,-2.0);					

		glTexCoord2f(1.0f, 0.0f);					<font color="#ffffaa">// 右上</font>
		glVertex3f( 2.0, 0.0,-2.0);					

		glTexCoord2f(1.0f, 1.0f);					<font color="#ffffaa">// 右下</font>
		glVertex3f( 2.0, 0.0, 2.0);				
	glEnd();								
}
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
    <td valign="top" width="100%">现在到了我们绘制函数的地方,我们将把所有的模型结合起来创建一个反射的场景。<br>
      向往常一样先把各个缓存清空,接着定义我们的剪切平面,它用来剪切我们的图像。这个平面的方程为equ[]={0,-1,0,0},向你所看到的它的法线是指向-y轴的,这告诉我们你只能看到y轴坐标小于0的像素,如果你启用剪切功能的话。<br>
      关于剪切平面,我们在后面会做更多的讨论。继续吧:)</td>
    <td background="Tutorial_26_files/r.png"><img src="Tutorial_26_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/br.png" 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 | GL_STENCIL_BUFFER_BIT);

	<font color="#ffffaa">// 设置剪切平面</font>
	double eqr[] = {0.0f,-1.0f, 0.0f, 0.0f};				</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
    <td valign="top" width="100%">下面我们把地面向下平移0.6个单位,因为我们的眼睛在y=0的平面,如果不平移的话,那么看上去平面就会变为一条线,为了看起来更真实,我们平移了它。</td>
    <td background="Tutorial_26_files/r.png"><img src="Tutorial_26_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>	glLoadIdentity();							
	glTranslatef(0.0f, -0.6f, zoom);					<font color="#ffffaa">// 平移和缩放地面</font>
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
    <td valign="top" width="100%">下面我们设置了颜色掩码,在默认情况下所有的颜色都可以写入,即在函数glColorMask中,所有的参数都被设为GL_TRUE,如果设为零表示这部分颜色不可写入。现在我们不希望在屏幕上绘制任何东西,所以把参数设为0。</td>
    <td background="Tutorial_26_files/r.png"><img src="Tutorial_26_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3"><pre>	glColorMask(0,0,0,0);
</pre></font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
    <td valign="top" width="100%"><p>下面来设置蒙板缓存和蒙板测试。<br>
        首先我们启用蒙板测试,这样就可以修改蒙板缓存中的值。</p>
      <p>下面我们来解释蒙板测试函数的含义:<br>

⌨️ 快捷键说明

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