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

📄 tutorial_14.htm

📁 如果你相信它就好好学学吧,同样这里也只是个入门
💻 HTM
📖 第 1 页 / 共 3 页
字号:
    <td background="Tutorial_14_files/l.gif"><img src="Tutorial_14_files/l.gif" height="28" width="28"></td>
    <td valign="top" width="100%"><font face="arial" size="-1">The following code is pretty
    simple. It deletes the 256 display lists from memory starting at the first list specified
    by base. I'm not sure if Windows would do this for you, but it's better to be safe than
    sorry :) </font></td>
    <td background="Tutorial_14_files/r.gif"><img src="Tutorial_14_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_14_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>GLvoid KillFont(GLvoid)						<font color="#ffffaa">// 删除显示列表</font>
{
 	glDeleteLists(base, 256);				<font color="#ffffaa">	// 删除256个显示列表</font>
}
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_14_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_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_14_files/l.gif"><img src="Tutorial_14_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">下面就是我优异的GL文字程序了。你可以通过调用glPrint(“需要写的文字”)来调用这段代码。文字被存储在字符串text[]中。</td>
    <td background="Tutorial_14_files/r.gif"><img src="Tutorial_14_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_14_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>GLvoid glPrint(const char *fmt, ...)				<font color="#ffffaa">	// 自定义GL输出字体函数</font>
{
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_14_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_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_14_files/l.gif"><img src="Tutorial_14_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">下
面的第一行定义了一个叫做length的变量。我们使用这个变量来查询字符串的长度。第二行创建了一个大小为256个字符的字符数组,里面保存我们想要的
文字串。第三行创建了一个指向一个变量列表的指针,我们在传递字符串的同时也传递了这个变量列表。如果我们传递文字时也传递了变量,这个指针将指向它们。</td>
    <td background="Tutorial_14_files/r.gif"><img src="Tutorial_14_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_14_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>	float		length=0;				<font color="#ffffaa">	// 查询字符串的长度</font>
	char		text[256];				<font color="#ffffaa">// 保存我们想要的文字串</font>
	va_list		ap;					<font color="#ffffaa">// 指向一个变量列表的指针</font>
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_14_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_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_14_files/l.gif"><img src="Tutorial_14_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">下面两行代码检查是否有需要显示的内容,如果什么也没有,屏幕上也就什么都没有。<br></td>
    <td background="Tutorial_14_files/r.gif"><img src="Tutorial_14_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_14_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>	if (fmt == NULL)						<font color="#ffffaa">// 如果无输入则返回</font>
		return;					</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_14_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_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_14_files/l.gif"><img src="Tutorial_14_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">接下来三行代码将文字中的所有符号转换为它们的字符编号。最后,文字和转换的符号被存储在一个叫做“text”的字符串中。以后我会多解释一些有关字符的细节。</td>
    <td background="Tutorial_14_files/r.gif"><img src="Tutorial_14_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_14_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>	va_start(ap, fmt);						<font color="#ffffaa">// 分析可变参数</font>
	    vsprintf(text, fmt, ap);				<font color="#ffffaa">// 把参数值写入字符串</font>
	va_end(ap);						<font color="#ffffaa">// 结束分析</font>
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_14_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_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_14_files/l.gif"><img src="Tutorial_14_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">感谢Jim Williams对下面一段代码的建议。以前我是用手工将文字置于中心的,而他的办法要好的多。
        <p>我
们从一个循环开始,它将逐个检查文本中的字符。我们通过strlen(text)得到文本的长度。设置好了循环以后,我们将通过加上每个字符的长度来增加
length的值。当循环结束以后,被保存在length中的值就是整个字符串的长度。所以,如果我们要写的是“hello”,假设每个字符的长度都为
10个单位,我们先给length的值加上第一个字母的长度10。然后,我们检查第二个字母的长度,它的长度也是10,所以length就变成10 +
10(20)。当我们检查完所有5个字母以后,length的值就会等于50(5 *10)。</p>
        <p>给
出我们每个字符的长度的代码是gmf[text[loop]].gmfCellIncX。记住,gmf存储了我们每个显示列表的信息。如果loop等于
0,text[loop]就是我们的字符串中的第一个字符。如果loop等于1,text[loop]就是我们的字符串中的第二个字符。
gmfCellIncX告诉我们被选择的字符的长度。GmfCellIncX表示显示位置从已绘制上的上一个字符向右移动的真正距离,这样,字符之间就不
会重叠在一起。同时,这个距离就是我们想得到的字符的宽度。你还可以通过gmfCelllncY命令来得到字符的高度。如果你是在垂直方向绘制文本而不是
在水平方向时,这会很方便。<br>
        </p></td>
    <td background="Tutorial_14_files/r.gif"><img src="Tutorial_14_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_14_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3">

<pre>	for (unsigned int loop=0;loop&lt;(strlen(text));loop++)	<font color="#ffffaa">// 查找整个字符串的长度</font>
	{
		length+=gmf[text[loop]].gmfCellIncX;		
	}
</pre>
</font>

<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_14_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_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_14_files/l.gif"><img src="Tutorial_14_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">最后我们取出计算后得到的length,并把它变成负数(因为我们要将文本从屏幕中心左移从而把整个文本置于屏幕中间)。然后我们把length除以2。我们并不想移动整个文本的长度,只需要一半!</td>
    <td background="Tutorial_14_files/r.gif"><img src="Tutorial_14_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_14_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3">

<pre>	glTranslatef(-length/2,0.0f,0.0f);			<font color="#ffffaa">// 把字符串置于最左边</font>
</pre>
</font>

<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_14_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_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_14_files/l.gif"><img src="Tutorial_14_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">然后我们将GL_LIST_BIT压入属性堆栈,它会防止glListBase影响到我们的程序中的其它显示列表</td>
    <td background="Tutorial_14_files/r.gif"><img src="Tutorial_14_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_14_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_14_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_14_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>	glPushAttrib(GL_LIST_BIT);				<font color="#ffffaa">// 把显示列表属性压入属性堆栈</font>
	glListBase(base);					<font color="#ffffaa">// 设置显示列表的基础值为0</font>
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">

⌨️ 快捷键说明

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