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

📄 tutorial_15.htm

📁 如果你相信它就好好学学吧,同样这里也只是个入门
💻 HTM
📖 第 1 页 / 共 3 页
字号:

<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_15_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>				"Wingdings");			<font color="#ffffaa">// 字体名称</font>
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_15_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_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_15_files/l.gif"><img src="Tutorial_15_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">剩下几行代码没有变化</td>
    <td background="Tutorial_15_files/r.gif"><img src="Tutorial_15_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_15_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>	SelectObject(hDC, font);				<font color="#ffffaa">	// 选择创建的字体</font>

	wglUseFontOutlines(	hDC,				<font color="#ffffaa">// 设置当前窗口设备描述表的句柄</font>
				0,				<font color="#ffffaa">// 用于创建显示列表字体的第一个字符的ASCII值</font>
				255,				<font color="#ffffaa">// 字符数</font>
				base,				<font color="#ffffaa">// 第一个显示列表的名称</font>
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_15_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_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_15_files/l.gif"><img src="Tutorial_15_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">我们允许有更多的误差,这意味着GL不会严格的遵守字体的轮廓线。如果你把误差设置为0.0f,你就会发现严格地在曲面上贴图存在一些问题。但是如果你允许一定的误差,很多问题都可以避免。<br></td>
    <td background="Tutorial_15_files/r.gif"><img src="Tutorial_15_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_15_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>				0.1f,				<font color="#ffffaa">// 字体的光滑度,越小越光滑,0.0为最光滑的状态</font>
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_15_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_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_15_files/l.gif"><img src="Tutorial_15_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">下面三行代码还是相同的</td>
    <td background="Tutorial_15_files/r.gif"><img src="Tutorial_15_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_15_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>				0.2f,				<font color="#ffffaa">// 在z方向突出的距离</font>
				WGL_FONT_POLYGONS,		<font color="#ffffaa">	// 使用多边形来生成字符,每个顶点具有独立的法线</font>
				gmf);				<font color="#ffffaa">// 一个接收字形度量数据的数组的地址,每个数组元素用它对应的显示列表字符的数据填充</font>
}
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_15_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_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_15_files/l.gif"><img src="Tutorial_15_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">在ReSizeGLScene()函数之前,我们要加上下面一段代码来读取纹理。你可能会认得这些前几课中的代码。我们创建一个保存位图的地方,读取位图,告诉Windows生成一个纹理,并把它保存在texture[0]中。
        <p>我们创建一种细化纹理(mipmapped texture),这样会看起来好些。纹理的名字叫做lights.bmp。</p></td>
    <td background="Tutorial_15_files/r.gif"><img src="Tutorial_15_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_15_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>if (TextureImage[0]=LoadBMP("Data/Lights.bmp"))			<font color="#ffffaa">// 载入位图</font>
</pre>
</font>

<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_15_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_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_15_files/l.gif"><img src="Tutorial_15_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">下
面四行代码将为我们绘制在屏幕上的任何物体自动生成纹理坐标。函数glTexGen非常强大,而且复杂,如果要完全讲清楚它的数学原理需要再写一篇教程。
不过,你只要知道GL_S和GL_T是纹理坐标就可以了。默认状态下,它被设置为提取物体此刻在屏幕上的x坐标和y坐标,并把它们转换为顶点坐标。你会发
现到物体在z平面没有纹理,只显示一些斑纹。正面和反面都被赋予了纹理,这些都是由glTexGen函数产生的。(X(GL_S)用于从左到右映射纹理,
Y(GL_T)用于从上到下映射纹理。 <p>GL_TEXTURE_GEN_MODE允许我们选择我们想在S和T纹理坐标上使用的纹理映射模式。你有3种选择:</p>
        <p>GL_EYE_LINEAR - 纹理会固定在屏幕上。它永远不会移动。物体将被赋予处于它通过的地区的那一块纹理。</p>
        <p>GL_OBJECT_LINEAR - 这种就是我们使用的模式。纹理被固定于在屏幕上运动的物体上。<br>
          GL_SPHERE_MAP - 每个人都喜欢。创建一种有金属质感的物体。<br>
        </p></td>
    <td background="Tutorial_15_files/r.gif"><img src="Tutorial_15_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_15_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3">

<pre>		<font color="#ffffaa">// 设置纹理映射模式</font>
		glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
		glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
		glEnable(GL_TEXTURE_GEN_S);				<font color="#ffffaa">// 使用自动生成纹理</font>
		glEnable(GL_TEXTURE_GEN_T);		</pre>
</font>

<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_15_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_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_15_files/l.gif"><img src="Tutorial_15_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">在InitGL()的最后有几行新代码。BuildFont()被放到了读取纹理的代码之后。glEnable(GL_COLOR_MATERIAL) 
        这行被删掉了,如果你想使用glColor3f(r,g,b)来改变纹理的颜色,那么就把glEnable(GL_COLOR_MATERIAL)这行重新加到这部分代码中。</td>
    <td background="Tutorial_15_files/r.gif"><img src="Tutorial_15_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_15_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3"> 
<pre>int InitGL(GLvoid)							<font color="#ffffaa">// 此处开始对OpenGL进行所有设置</font>
{
	if (!LoadGLTextures())					<font color="#ffffaa">// 载入纹理</font>
	{
		return FALSE;					<font color="#ffffaa">// 失败则返回</font>
	}
	BuildFont();						<font color="#ffffaa">// 创建字体显示列表</font>

	glShadeModel(GL_SMOOTH);					<font color="#ffffaa">// 启用阴影平滑</font>
	glClearColor(0.0f, 0.0f, 0.0f, 0.5f);			<font color="#ffffaa">// 黑色背景</font>
	glClearDepth(1.0f);					<font color="#ffffaa">// 设置深度缓存</font>
	glEnable(GL_DEPTH_TEST);				<font color="#ffffaa">	// 启用深度测试</font>
	glDepthFunc(GL_LEQUAL);					<font color="#ffffaa">// 所作深度测试的类型</font>
	glEnable(GL_LIGHT0);					<font color="#ffffaa">// 使用第0号灯</font>
	glEnable(GL_LIGHTING);					<font color="#ffffaa">// 使用光照</font>
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);		<font color="#ffffaa">// 告诉系统对透视进行修正</font>
</pre>
</font> 
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
  <tr>
    <td><img src="Tutorial_15_files/tl.jpg" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/tc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_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_15_files/l.gif"><img src="Tutorial_15_files/l.gif" height="28" width="28"></td>
      <td valign="top" width="100%">启动2D纹理映射,并选择第一个纹理。这样就把第一个纹理映射到我们绘制在屏幕上的3D物体上了。如果你想加入更多的操作,可以按自己的意愿启动或禁用纹理映射。</td>
    <td background="Tutorial_15_files/r.gif"><img src="Tutorial_15_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_15_files/bl.gif" height="28" width="28"></td>
    <td width="100%"><img src="Tutorial_15_files/bc.gif" height="28" width="100%"></td>
    <td><img src="Tutorial_15_files/br.gif" height="28" width="28"></td>
  </tr>
</tbody>
</table>
<font color="#aaffaa" size="3">

⌨️ 快捷键说明

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