📄 tutorial_06.htm
字号:
</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 (File) <font color="#ffffaa">// 文件存在么?</font>
{
fclose(File); <font color="#ffffaa">// 关闭句柄</font>
return auxDIBImageLoad(Filename); <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%">如果我们不能打开文件,我们将返回NULL。这意味着文件无法载入。程序在后面将检查文件是否已载入。如果没有,我们将退出程序并弹出错误消息。</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 NULL; <font color="#ffffaa">// 如果载入失败,返回 NULL</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%">下一部分代码载入位图(调用上面的代码)并转换成纹理。</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 LoadGLTextures() <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%">然后设置一个叫做 Status 的变量。我们使用它来跟踪是否能够载入位图以及能否创建纹理。
Status 缺省设为 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> int Status=FALSE; <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%">现在我们创建存储位图的图像记录。次记录包含位图的宽度、高度和数据。</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> AUX_RGBImageRec *TextureImage[1]; <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%">清除图像记录,确保其内容为空</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> memset(TextureImage,0,sizeof(void *)*1); <font color="#ffffaa">// 将指针设为 NULL</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]=LoadBMP("Data/NeHe.bmp")
调用 LoadBMP() 的代码。载入 Data 目录下的 NeHe.bmp 位图文件。如果一切正常,图像数据将存放在 TextureImage[0]
中, Status 被设为 TRUE ,然后我们开始创建纹理。</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>
if (TextureImage[0]=LoadBMP("Data/NeHe.bmp"))
{
Status=TRUE; <font color="#ffffaa">// 将 Status 设为 TRUE</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] 的数据创建纹理。第一行 glGenTextures(1,
&texture[0]) 告诉OpenGL我们想生成一个纹理名字(如果您想载入多个纹理,加大数字)。值得注意的是,开始我们使用 GLuint
texture[1] 来创建一个纹理的存储空间,您也许会认为第一个纹理就是存放在 &texture[1] 中的,但这是错的。正确的地址应该是
&texture[0] 。同样如果使用 GLuint texture[2] 的话,第二个纹理存放在 texture[1] 中。『译者注:学C的,在这里应该没有障碍,数组就是从零开始的嘛。』
<p>第二行 glBindTexture(GL_TEXTURE_2D, texture[0]) 告诉OpenGL将纹理名字 texture[0]
绑定到纹理目标上。2D纹理只有高度(在 Y 轴上)和宽度(在 X 轴上)。主函数将纹理名字指派给纹理数据。本例中我们告知OpenGL,
&texture[0] 处的内存已经可用。我们创建的纹理将存储在 &texture[0] 的 指向的内存区域。</p></td>
<td background="Tutorial_06_files/r.gif"><img src="Tutorial_06_files/r.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -