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

📄 tutorial_29.htm

📁 如果你相信它就好好学学吧,同样这里也只是个入门
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<!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_29_files/logo.png" height="130" width="326"></td>
    <td align="center" valign="middle" width="75%"><font color="#ffccaa" size="+3"><b><i>第29课</i></b></font></td>
  </tr></tbody></table>
  <!-- 上边框-->
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_29_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_29_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_29_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_29_files/l.gif"><img src="Tutorial_29_files/l.gif" height="28" width="28"></td>
	<!-- 中部文字部分-->
    <td valign="top" width="100%">
	<table border="0" width="100%">
          <tbody><tr>
            <td width="26%"><img src="Tutorial_29_files/lesson29.jpg" height="180" width="240"></td>
            <td width="74%"><p><font class="head">Blitter 函数:</font></p>
              <p><font size="3">类似于DirectDraw的blit函数,过时的技术,我们有实现了它。它非常的简单,就是把一块纹理贴到另一块纹理上。</font></p></td>
          </tr>
     </tbody></table>
      </td>
	<!-- 中部右边框-->
    <td background="Tutorial_29_files/r.gif"><img src="Tutorial_29_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_29_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_29_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_29_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_29_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_29_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_29_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_29_files/l.png"><img src="Tutorial_29_files/l.png"></td>
    <td valign="top" width="100%">这篇文章是有Andreas Lffler所写的,它写了一份原始的教程。过了几天,Rob Fletcher发了封邮件给我,他重新改写了所有的代码,我在它的基础上把glut的框架变换为Win32的框架。 
      <p>现在让我们开始吧!</p></td><td background="Tutorial_29_files/r.png"><img src="Tutorial_29_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_29_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_29_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_29_files/br.png" height="28" width="28"></td></tr></tbody></table>
<font color="#aaffaa" size="3"> </font>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_29_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_29_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_29_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_29_files/l.png"><img src="Tutorial_29_files/l.png"></td>
    <td valign="top" width="100%">下面是一个保存图像数据的结构</td>
    <td background="Tutorial_29_files/r.png"><img src="Tutorial_29_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_29_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_29_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_29_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
</font><pre><font color="#aaffaa" size="3">typedef struct Texture_Image
{
	int width;									<font color="#ffffaa">// 宽</font>
	int height;									<font color="#ffffaa">// 高</font>
	int format;									<font color="#ffffaa">// 像素格式</font>
	unsigned char *data;								<font color="#ffffaa">// 纹理数据</font>
} TEXTURE_IMAGE;
</font></pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_29_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_29_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_29_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_29_files/l.png"><img src="Tutorial_29_files/l.png"></td>
    <td valign="top" width="100%">接下来定义了两个指向这个结构的指针</td>
    <td background="Tutorial_29_files/r.png"><img src="Tutorial_29_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_29_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_29_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_29_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>typedef TEXTURE_IMAGE *P_TEXTURE_IMAGE;							

P_TEXTURE_IMAGE t1;									<font color="#ffffaa">// 指向保存图像结构的指针</font>
P_TEXTURE_IMAGE t2;									<font color="#ffffaa">// 指向保存图像结构的指针</font>
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_29_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_29_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_29_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_29_files/l.png"><img src="Tutorial_29_files/l.png"></td>
    <td valign="top" width="100%">下面的函数为w*h的图像分配内存</td>
    <td background="Tutorial_29_files/r.png"><img src="Tutorial_29_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_29_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_29_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_29_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>P_TEXTURE_IMAGE AllocateTextureBuffer( GLint w, GLint h, GLint f)
{
	P_TEXTURE_IMAGE ti=NULL;							
	unsigned char *c=NULL;								</pre>
</font><font color="#aaffaa" size="3">
<pre>	ti = (P_TEXTURE_IMAGE)malloc(sizeof(TEXTURE_IMAGE));					<font color="#ffffaa">// 分配图像结构内存</font>

	if( ti != NULL ) {
		ti-&gt;width  = w;								<font color="#ffffaa">// 设置宽度</font>
		ti-&gt;height = h;								<font color="#ffffaa">// 设置高度</font>
		ti-&gt;format = f;								<font color="#ffffaa">// 设置格式</font>
		<font color="#ffffaa">// 分配w*h*f个字节</font>
		c = (unsigned char *)malloc( w * h * f); 
		if ( c != NULL ) {
			ti-&gt;data = c;
		}
		else {
			MessageBox(NULL,"内存不足","分配图像内存错误",MB_OK | MB_ICONINFORMATION);
			return NULL;
		}
	}
</pre>
</font><font color="#aaffaa" size="3"> 
</font><pre><font color="#aaffaa" size="3">	else
	{
		MessageBox(NULL,"内存不足","分配图像结构内存错误",MB_OK | MB_ICONINFORMATION);
		return NULL;
	}
	return ti;									<font color="#ffffaa">// 返回指向图像数据的指针</font>
}
</font></pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_29_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_29_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_29_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_29_files/l.png"><img src="Tutorial_29_files/l.png"></td>
    <td valign="top" width="100%">下面的函数释放分配的内存</td>
    <td background="Tutorial_29_files/r.png"><img src="Tutorial_29_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_29_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_29_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_29_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre><font color="#ffffaa">// 释放图像内存</font>
void DeallocateTexture( P_TEXTURE_IMAGE t )
{
	if(t)
	{
		if(t-&gt;data)
		{
			free(t-&gt;data);							<font color="#ffffaa">// 释放图像内存</font>
		}

		free(t);								<font color="#ffffaa">	// 释放图像结构内存</font>

⌨️ 快捷键说明

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