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

📄 tutorial_17.htm

📁 如果你相信它就好好学学吧,同样这里也只是个入门
💻 HTM
📖 第 1 页 / 共 5 页
字号:
 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody><tr>
    <td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_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_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
    <td valign="top" width="100%">下面的几行代码检查我们读取的位图数据是否在内存里。如果是,释放内存。注意我们还要检查并释放rgb图像记录。如果我们使用了3个不同的图像来创建纹理,我们要检查并释放3个rgb图像记录。</td>
    <td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_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_17_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody></table>
<font color="#aaffaa" size="3"> 
<pre>	for (loop=0; loop&lt;2; loop++)
		{
	        if (TextureImage[loop])						<font color="#ffffaa">// 纹理是否存在</font>
			{
				if (TextureImage[loop]-&gt;data)			<font color="#ffffaa">// 纹理图像是否存在</font>
				{
					free(TextureImage[loop]-&gt;data);		<font color="#ffffaa">// 释放纹理图像占用的内存</font>
				}
				free(TextureImage[loop]);				<font color="#ffffaa">// 释放图像结构</font>
			}
		}
	return Status;								<font color="#ffffaa">// 返回 Status</font>
}
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody><tr>
    <td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_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_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
    <td valign="top" width="100%">现在我们将创建字体。我将以同样的细节来解释这段代码。这并没那么复杂,但是有些数学要了解,我知道不是每个人都喜欢数学。</td>
    <td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_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_17_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody></table>
<font color="#aaffaa" size="3">

<pre>GLvoid BuildFont(GLvoid)								<font color="#ffffaa">// 创建我们的字符显示列表</font>
{
</pre>
</font>

<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody><tr>
    <td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_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_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
    <td valign="top" width="100%">下面两个变量将用来保存字体纹理中每个字的位置。cx将用来保存纹理中水平方向的位置,cy将用来保存纹理中竖直方向的位置。<br></td>
    <td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_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_17_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody></table>
<font color="#aaffaa" size="3"> 
</font><pre><font color="#aaffaa" size="3">float	cx;									<font color="#ffffaa">// 字符的X坐标</font>
	float	cy;								<font color="#ffffaa">// </font><font color="#aaffaa" size="3"><font color="#ffffaa">字符的</font><font color="#aaffaa" size="3"><font color="#ffffaa">Y</font></font><font color="#ffffaa">坐标</font></font></font></pre>
 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody><tr>
    <td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_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_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
    <td valign="top" width="100%">接着我们告诉OpenGL我们要建立256个显示列表。变量base将指向第一个显示列表的位置。第二个显示列表将是base+1,第三个是base+2,以此类推。
      <p>下面的第二行代码选择我们的字体纹理(texture[0])。</p></td>
    <td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_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_17_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody></table>
<font color="#aaffaa" size="3">

<pre>	base=glGenLists(256);							<font color="#ffffaa">// 创建256个显示列表</font>
	glBindTexture(GL_TEXTURE_2D, texture[0]);					<font color="#ffffaa">// 选择字符图象</font>
</pre>
</font>

<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody><tr>
    <td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_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_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
    <td valign="top" width="100%">现在我们开始循环。循环间创建所有的256个字符,每个存在它自己的显示列表里。 </td>
    <td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_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_17_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody></table>
<font color="#aaffaa" size="3">

<pre>	for (loop=0; loop&lt;256; loop++)						<font color="#ffffaa">// 循环256个显示列表</font>
	{
</pre>
</font>

<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody><tr>
    <td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_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_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
    <td valign="top" width="100%"><p>下面的第一行或许看上去让人有点困惑。%符号表示loop除以16的余数。cx将我们通过字体纹理从左至右移动。你将注意到在后面的代码中我们用1减去cy从而从上到下而不是从下到上移动我们。%符号很难解释,但我将尝试去解释。</p>
      <p>我
们真正关心的是(loop%16)。/16只是将结果转化为纹理坐标。所以如果loop等于16,cx将等于16/16的余数也就是0。但cy将等于
16/16也就是1。所以我们将下移一个字符的高度,且我们将不往右移。如果loop等于17,cx将等于17/16也就是1.0625。余数0.625
也等于1/16。意味着我们将右移一个字符。cy将仍是1因为我们只关心小数点左边的数字。18/16将右移2个字符,但仍下移一个字符。如果loop是
32,cx将再次等于0,因为32除以16没有余数,但cy将等于2。因为小数点左边的数字现在是2,将下移2个字符。这么讲清楚吗? </p></td>
    <td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_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_17_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody></table>
<font color="#aaffaa" size="3"> 
<pre>		cx=float(loop%16)/16.0f;					<font color="#ffffaa">// 当前字符的X坐标</font>
		cy=float(loop/16)/16.0f;					<font color="#ffffaa">// 当前字符的Y坐标</font>
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody><tr>
    <td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_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_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
    <td valign="top" width="100%">Ok。
现在我们通过从字体纹理中依据cx和cy的值选择一个单独的字符创建了2D字体。在下面的行里我们给base的值加上loop,若不这么做,每个字都将建
在第一个显示列表里。我们当然不想要那样的事发生,所以通过给base加上loop,我们创建的每个字都被存在下个可用的显示列表里。</td>
    <td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_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_17_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody></table>
<font color="#aaffaa" size="3">

<pre>		glNewList(base+loop,GL_COMPILE);				<font color="#ffffaa">//开始创建显示列表</font>
</pre>
</font>

<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tbody><tr>
    <td><img src="Tutorial_17_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_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_17_files/l.gif"><img src="Tutorial_17_files/l.gif" height="28" width="28"></td>
    <td valign="top" width="100%">现在我们已选择了我们要创建的显示列表,我们创建字符。这是通过绘制四边形,然后给他贴上字体纹理中的单个字符的纹理来完成的。</td>
    <td background="Tutorial_17_files/r.gif"><img src="Tutorial_17_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_17_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_17_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_17_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody></table>
<font color="#aaffaa" size="3">

<pre>			glBegin(GL_QUADS);					<font color="#ffffaa">// 使用四边形显示每一个字符</font>
</pre>
</font>

<table border="0" cellpadding="0" cellspacing="0" width="100%">

⌨️ 快捷键说明

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