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

📄 tutorial_24.htm

📁 如果你相信它就好好学学吧,同样这里也只是个入门
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<!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_24_files/logo.png" height="130" width="326"></td>
    <td align="center" valign="middle" width="75%"><font color="#ffccaa" size="+3"><b><i>第24课</i></b></font></td>
  </tr></tbody></table>
  <!-- 上边框-->
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_24_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_24_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_24_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_24_files/l.gif"><img src="Tutorial_24_files/l.gif" height="28" width="28"></td>
	<!-- 中部文字部分-->
    <td valign="top" width="100%">
	<table border="0" width="100%">
          <tbody><tr>
            <td width="29%"><img src="Tutorial_24_files/lesson24.jpg" height="180" width="240"></td>
            <td width="71%"><p><font class="head">扩展,剪裁和TGA图像文件的加载:</font></p>
              <p><font size="3">在这一课里,你将学会如何读取你显卡支持的OpenGL的扩展,并在你指定的剪裁区域把它显示出来。</font></p></td>
          </tr>
     </tbody></table>
      </td>
	<!-- 中部右边框-->
    <td background="Tutorial_24_files/r.gif"><img src="Tutorial_24_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_24_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_24_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_24_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_24_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_24_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_24_files/l.png"><img src="Tutorial_24_files/l.png"></td>
    <td valign="top" width="100%">这个教程有一些难度,但它会让你学到很多东西。我听到很多朋友问我扩展方面的内容和怎样找到它们。这个教程将交给你这<br>
      一切。<br>
      我将教会你怎样滚动屏幕的一部分和怎样绘制直线,最重要的是从这一课起,我们将不使用AUX库,以及*.bmp文件。我将告诉你如何使用Targa(TGA)图像文件。因为它简单并且支持alpha通道,它可以使你更容易的创建酷的效果。
      <p>接下来我们要做的第一件事就是不包含glaux.h头文件和glaux.lib库。另外,在使用glaux库时,经常会发生一些可疑的警告,现在我们可以测定告别它了。</p></td><td background="Tutorial_24_files/r.png"><img src="Tutorial_24_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_24_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>#include	&lt;stdarg.h&gt;								<font color="#ffffaa">// 处理可变参数的函数的头文件</font>
#include	&lt;string.h&gt;								<font color="#ffffaa">// 处理字符串的头文件</font>
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_24_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_24_files/l.png"><img src="Tutorial_24_files/l.png"></td>
    <td valign="top" width="100%">接下来我们添加一些变量,第一个为滚动参数。第二给变量记录扩展的个数,swidth和sheight记录剪切矩形的大小。base为字体显示列表的开始值。</td>
    <td background="Tutorial_24_files/r.png"><img src="Tutorial_24_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_24_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
	
<pre>int		scroll;									<font color="#ffffaa">// 用来滚动屏幕</font>
int		maxtokens;								<font color="#ffffaa">// 保存扩展的个数</font>
int		swidth;									<font color="#ffffaa">// 剪裁宽度</font>
int		sheight;								<font color="#ffffaa">	// 剪裁高度</font>

GLuint		base;									<font color="#ffffaa">// 字符显示列表的开始值</font>
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_24_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_24_files/l.png"><img src="Tutorial_24_files/l.png"></td>
    <td valign="top" width="100%">现在我们创建一个数据结构用来保存TGA文件,接着我们使用这个结构来加载纹理。</td>
    <td background="Tutorial_24_files/r.png"><img src="Tutorial_24_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_24_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>typedef	struct										<font color="#ffffaa">// 创建加载TGA图像文件结构</font>
{
	GLubyte	*imageData;								<font color="#ffffaa">// 图像数据指针</font>
	GLuint	bpp;									<font color="#ffffaa">// 每个数据所占的位数(必须为24或32)</font>
	GLuint	width;									<font color="#ffffaa">// 图像宽度</font>
	GLuint	height;									<font color="#ffffaa">// 图像高度</font>
	GLuint	texID;									<font color="#ffffaa">// 纹理的ID值</font>
} TextureImage;										<font color="#ffffaa">// 结构名称</font>

TextureImage	textures[1];								<font color="#ffffaa">// 保存一个纹理</font>
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_24_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_24_files/l.png"><img src="Tutorial_24_files/l.png"></td>
    <td valign="top" width="100%">这个部分的代码将要加载一个TGA文件并把它转换为纹理。必须注意的是这部分代码只能加载24/32位的不压缩的TGA文件。<br>
      这个函数包含两个参数,一个保存载入的图像,一个为将载入的文件名。<br>
      TGA文件包含一个12个字节的文件头,载入图像后,我们用type来设置图像中像素格式在OpenGL中的对应。如果是24位的图像我们使用GL_RGB,如果是32位的图像我们使用GL_RGBA。</td>
    <td background="Tutorial_24_files/r.png"><img src="Tutorial_24_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_24_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>bool LoadTGA(TextureImage *texture, char *filename)					<font color="#ffffaa">// 把TGA文件加载入内存</font>
{
	GLubyte		TGAheader[12]={0,0,2,0,0,0,0,0,0,0,0,0};			<font color="#ffffaa">// 无压缩的TGA文件头</font>
	GLubyte		TGAcompare[12];						<font color="#ffffaa">// 保存读入的文件头信息</font>
	GLubyte		header[6];						<font color="#ffffaa">// 保存最有用的图像信息,宽,高,位深</font>
	GLuint		bytesPerPixel;						<font color="#ffffaa">// 记录每个颜色所占用的字节数</font>
	GLuint		imageSize;						<font color="#ffffaa">// 记录文件大小</font>
	GLuint		temp;							<font color="#ffffaa">// 临时变量</font>
	GLuint		type=GL_RGBA;						<font color="#ffffaa">// 设置默认的格式为GL_RGBA,即32位图像</font>
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_24_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_24_files/l.png"><img src="Tutorial_24_files/l.png"></td>
    <td valign="top" width="100%"><p>下面这个函数读取TGA文件,并记录文件信息。TGA文件格式如下所示: </p>
      <p>Tga图像格式<br>
        无颜色表 rgb 图像 </p>
      <table border="1" width="100%">
        <tbody><tr> 
          <td width="6%">偏移</td>
          <td width="9%">长度</td>
          <td width="62%">描述</td>
          <td width="21%">32位常用图像文件各个字节的值</td>
        </tr>
        <tr> 
          <td>0</td>
          <td>1</td>
          <td>指出图像信息字段的长度,其取值范围是 0 到 255 ,当它为 0 时表示没有图像的信息字段。</td>
          <td>0</td>
        </tr>
        <tr> 
          <td>1</td>
          <td>1</td>
          <td>是否使用颜色表,0 表示没有颜色表,1 表示颜色表存在</td>
          <td>0</td>
        </tr>
        <tr> 
          <td>2</td>
          <td>1</td>
          <td>该字段总为 2。图像类型码,tga一共有6种格式,2表示无颜色表 rgb 图像</td>
          <td>2</td>
        </tr>
        <tr> 
          <td>3</td>
          <td rowspan="5">5</td>
          <td rowspan="5">颜色表规格,总为0。</td>
          <td>0</td>
        </tr>
        <tr> 
          <td>4</td>
          <td>0</td>
        </tr>
        <tr> 
          <td>5</td>

⌨️ 快捷键说明

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