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

📄 tutorial_06.htm

📁 如果你相信它就好好学学吧,同样这里也只是个入门
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_06_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_06_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_06_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>		glGenTextures(1, &amp;texture[0]);					<font color="#ffffaa">// 创建纹理</font>

		<font color="#ffffaa">// 使用来自位图数据生成 的典型纹理</font>
		glBindTexture(GL_TEXTURE_2D, texture[0]);
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_06_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_06_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_06_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_06_files/l.gif"><img src="Tutorial_06_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">下来我们创建真正的纹理。下面一行告诉OpenGL此纹理是一个2D纹理 ( GL_TEXTURE_2D 
        )。参数“0”代表图像的详细程度,通常就由它为零去了。参数三是数据的成分数。因为图像是由红色数据,绿色数据,蓝色数据三种组分组成。 TextureImage[0]-&gt;sizeX 
        是纹理的宽度。如果您知道宽度,您可以在这里填入,但计算机可以很容易的为您指出此值。 TextureImage[0]-&gt;sizey 是纹理的高度。参数零是边框的值,一般就是“0”。 
        GL_RGB 告诉OpenGL图像数据由红、绿、蓝三色数据组成。<br>
        GL_UNSIGNED_BYTE 意味着组成图像的数据是无符号字节类型的。最后... TextureImage[0]-&gt;data 告诉OpenGL纹理数据的来源。此例中指向存放在 
        TextureImage[0] 记录中的数据。</td>
    <td background="Tutorial_06_files/r.gif"><img src="Tutorial_06_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_06_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_06_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_06_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>		<font color="#ffffaa">// 生成纹理</font>
		glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]-&gt;sizeX, TextureImage[0]-&gt;sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]-&gt;data);
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_06_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_06_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_06_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_06_files/l.gif"><img src="Tutorial_06_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">下面的两行告诉OpenGL在显示图像时,当它比放大得原始的纹理大 ( GL_TEXTURE_MAG_FILTER 
        )或缩小得比原始得纹理小( GL_TEXTURE_MIN_FILTER )时OpenGL采用的滤波方式。通常这两种情况下我都采用 GL_LINEAR 
        。这使得纹理从很远处到离屏幕很近时都平滑显示。使用 GL_LINEAR 需要CPU和显卡做更多的运算。如果您的机器很慢,您也许应该采用 GL_NEAREST 
        。过滤的纹理在放大的时候,看起来斑驳的很『译者注:马赛克啦』。您也可以结合这两种滤波方式。在近处时使用 GL_LINEAR ,远处时 GL_NEAREST 
        。</td>
    <td background="Tutorial_06_files/r.gif"><img src="Tutorial_06_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_06_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_06_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_06_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);	<font color="#ffffaa">// 线形滤波</font>
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);	<font color="#ffffaa">// 线形滤波</font>
	}
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_06_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_06_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_06_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_06_files/l.gif"><img src="Tutorial_06_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">现在我们释放前面用来存放位图数据的内存。我们先查看位图数据是否存放在处。如果是的话,再查看数据是否已经存储。如果已经存储的话,删了它。接着再释放 
        TextureImage[0] 图像结构以保证所有的内存都能释放。</td>
    <td background="Tutorial_06_files/r.gif"><img src="Tutorial_06_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_06_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_06_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_06_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>	if (TextureImage[0])							<font color="#ffffaa">// 纹理是否存在</font>
	{
		if (TextureImage[0]-&gt;data)					<font color="#ffffaa">// 纹理图像是否存在</font>
		{
			free(TextureImage[0]-&gt;data);				<font color="#ffffaa">// 释放纹理图像占用的内存</font>
		}

		free(TextureImage[0]);						<font color="#ffffaa">// 释放图像结构</font>
	}
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_06_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_06_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_06_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_06_files/l.gif"><img src="Tutorial_06_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">最后返回状态变量。如果一切OK,变量 Status 的值为 TRUE 。否则为 FALSE 
        。</td>
    <td background="Tutorial_06_files/r.gif"><img src="Tutorial_06_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_06_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_06_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_06_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>	return Status;								<font color="#ffffaa">// 返回 Status</font>
}
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_06_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_06_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_06_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_06_files/l.gif"><img src="Tutorial_06_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">我只在 InitGL 中增加很少的几行代码。但为了方便您查看增加了哪几行,我这段代码全部重贴一遍。 
        if (!LoadGLTextures()) 这行代码调用上面讲的子例程载入位图并生成纹理。如果因为任何原因 LoadGLTextures() 
        调用失败,接着的一行返回FALSE。如果一切OK,并且纹理创建好了,我们启用2D纹理映射。如果您忘记启用的话,您的对象看起来永远都是纯白色,这一定不是什么好事。</td>
    <td background="Tutorial_06_files/r.gif"><img src="Tutorial_06_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_06_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_06_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_06_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">// 如果未能载入,返回FALSE</font>
	}

	glEnable(GL_TEXTURE_2D);						<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>
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);			<font color="#ffffaa">// 真正精细的透视修正</font>
	return TRUE;								<font color="#ffffaa">// 初始化 OK</font>
}
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_06_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_06_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_06_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_06_files/l.gif"><img src="Tutorial_06_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">现在我们绘制贴图『译者注:其实贴图就是纹理映射。将术语换来换去不好,我想少打俩字。^_^』过的立方体。这段代码被狂注释了一把,应该很好懂。开始两行代码 
        glClear() 和 glLoadIdentity() 是第一课中就有的代码。 glClear(GL_COLOR_BUFFER_BIT | 
        GL_DEPTH_BUFFER_BIT) 清除屏幕并设为我们在 InitGL() 中选定的颜色,本例中是黑色。深度缓存也被清除。模型观察矩阵也使用glLoadIdentity()重置。</td>
    <td background="Tutorial_06_files/r.gif"><img src="Tutorial_06_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_06_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_06_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_06_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>

⌨️ 快捷键说明

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