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

📄 tutorial_23.htm

📁 如果你相信它就好好学学吧,同样这里也只是个入门
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!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></head><body bgcolor="#000000" text="#ffffff"><br><br>

<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td height="130" width="326"><img src="Tutorial_23_files/logo.png" height="130" width="326"></td>
    <td align="center" valign="middle" width="75%"><font color="#ffccaa" size="+3"><b><i>第23课</i></b></font></td>
  </tr></tbody></table>
  <!-- 上边框-->
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_23_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_23_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_23_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_23_files/l.gif"><img src="Tutorial_23_files/l.gif" height="28" width="28"></td>
	<!-- 中部文字部分-->
    <td valign="top" width="100%">
	<table border="0" width="100%">
          <tbody><tr>
            <td width="30%"><img src="Tutorial_23_files/lesson23.jpg" height="180" width="240"></td>
            <td width="70%"><p><font class="head">球面映射:</font></p>
              <p><font size="3">这一个将教会你如何把环境纹理包裹在你的3D模型上,让它看起来象反射了周围的场景一样。</font></p></td>
          </tr>
     </tbody></table>
      </td>
	<!-- 中部右边框-->
    <td background="Tutorial_23_files/r.gif"><img src="Tutorial_23_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_23_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_23_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_23_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_23_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_23_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_23_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_23_files/l.png"><img src="Tutorial_23_files/l.png"></td>
    <td valign="top" width="100%">球体环境映射是一个创建快速金属反射效果的方法,但它并不像真实世界里那么精确!我们从18课的代码开始来创建这个教程,教你如何创建这种效果。
      <p>在我们开始之间,看一下红宝书中的介绍。它定义球体环境映射为一幅位于无限远的图像,把它映射到球面上。 </p>
      <p>在Photoshop中创建一幅球体环境映射图。</p>
      <p>首先,你需要一幅球体环境映射图,用来把它映射到球体上。在Photoshop中打开一幅图并选择所有的像素,创建它的一个复制。<br>
        接着,我们把图像变为2的幂次方大小,一般为128x128或256x256。<br>
        最后使用扭曲(distort)滤镜,并应用球体效果。然后把它保存为*.bmp文件。</p>
      <p>我们并没有添加任何全局变量,只是把纹理组的大小变为6,以保存6幅纹理。<br>
      </p></td><td background="Tutorial_23_files/r.png"><img src="Tutorial_23_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_23_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_23_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_23_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3"><pre>GLuint	texture[6];								<font color="#ffffaa">// 保存6幅纹理 </font>
</pre></font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_23_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_23_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_23_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_23_files/l.png"><img src="Tutorial_23_files/l.png"></td>
    <td valign="top" width="100%">下面我们要做的就是载入这些纹理</td>
    <td background="Tutorial_23_files/r.png"><img src="Tutorial_23_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_23_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_23_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_23_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>int LoadGLTextures()								<font color="#ffffaa"></font>
{
	int Status=FALSE;							<font color="#ffffaa"></font>

	AUX_RGBImageRec *TextureImage[2];						<font color="#ffffaa">// 创建纹理的保存空间</font>

	memset(TextureImage,0,sizeof(void *)*2);  		         	<font color="#ffffaa">		// 清空为0</font>

	<font color="#ffffaa">// 载入*.bmp图像</font>
	if ((TextureImage[0]=LoadBMP("Data/BG.bmp")) &amp;&amp;				<font color="#ffffaa">// 背景图</font>
		(TextureImage[1]=LoadBMP("Data/Reflect.bmp")))			<font color="#ffffaa">// 反射图(球形纹理图)</font>
	{
		Status=TRUE;							

		glGenTextures(6, &amp;texture[0]);					<font color="#ffffaa">// 创建6个纹理</font>

		for (int loop=0; loop&lt;=1; loop++)
		{
			<font color="#ffffaa">// 创建临近点过滤纹理图</font>
			glBindTexture(GL_TEXTURE_2D, texture[loop]);		<font color="#ffffaa">	// 创建纹理0和1</font>
			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
			glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]-&gt;sizeX, TextureImage[loop]-&gt;sizeY,
				0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]-&gt;data);

			<font color="#ffffaa">// 创建线形过滤纹理图</font>
			glBindTexture(GL_TEXTURE_2D, texture[loop+2]);		<font color="#ffffaa">// 创建纹理2,3</font>
			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
			glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]-&gt;sizeX, TextureImage[loop]-&gt;sizeY,
				0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]-&gt;data);

			<font color="#ffffaa">// 创建线形Mipmap纹理图</font>
			glBindTexture(GL_TEXTURE_2D, texture[loop+4]);		<font color="#ffffaa">// 创建纹理4,5</font>
			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
			gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[loop]-&gt;sizeX, TextureImage[loop]-&gt;sizeY,
				GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]-&gt;data);
		}
		for (loop=0; loop&lt;=1; loop++)
		{
	        if (TextureImage[loop])						<font color="#ffffaa">// 如果图像存在则清除</font>
		    {
			        if (TextureImage[loop]-&gt;data)			
				    {
					        free(TextureImage[loop]-&gt;data);	
					}
					free(TextureImage[loop]);		
			}
		}
	}

	return Status;				
}
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_23_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_23_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_23_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_23_files/l.png"><img src="Tutorial_23_files/l.png"></td>
    <td valign="top" width="100%">我们对立方体的绘制代码做了一些小的改动,把法线的范围从[-1,1]缩放到[-0.5,0.5]。如果法向量太大的话,会产生一些块状效果,影响视觉效果。</td>
    <td background="Tutorial_23_files/r.png"><img src="Tutorial_23_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_23_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_23_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_23_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>GLvoid glDrawCube()
{
		glBegin(GL_QUADS);
		<font color="#ffffaa">// 前面</font>
		glNormal3f( 0.0f, 0.0f, 0.5f);

⌨️ 快捷键说明

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