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

📄 tutorial_24.htm

📁 如果你相信它就好好学学吧,同样这里也只是个入门
💻 HTM
📖 第 1 页 / 共 4 页
字号:
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);		<font color="#ffffaa">// 设置过滤器为线性过滤</font>
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);		</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_24_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_24_files/l.png"><img src="Tutorial_24_files/l.png"></td>
    <td valign="top" width="100%">判断图像的位数是否为24,如果是则设置类型为GL_RGB</td>
    <td background="Tutorial_24_files/r.png"><img src="Tutorial_24_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_24_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>	if (texture[0].bpp==24)								<font color="#ffffaa">// 是否为24位图像?</font>
	{
		type=GL_RGB;								<font color="#ffffaa">// 如果是设置类型为GL_RGB</font>
	}
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_24_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_24_files/l.png"><img src="Tutorial_24_files/l.png"></td>
    <td valign="top" width="100%">下面的代码在OpenGL中创建一个纹理</td>
    <td background="Tutorial_24_files/r.png"><img src="Tutorial_24_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_24_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3"><pre>	glTexImage2D(GL_TEXTURE_2D, 0, type, texture[0].width, texture[0].height, 0, type, GL_UNSIGNED_BYTE, texture[0].imageData);

	return true;									<font color="#ffffaa">// 纹理绑定完成,成功返回</font>
}
</pre></font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_24_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_24_files/l.png"><img src="Tutorial_24_files/l.png"></td>
    <td valign="top" width="100%">下面的代码是从图像创建字体的典型的方法,这些代码将包含在后面的课程中,以显示文字。<br>
      只有一个不同的地方,纹理0用来保存字符图像。</td>
    <td background="Tutorial_24_files/r.png"><img src="Tutorial_24_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_24_files/br.png" height="28" width="28"></td></tr></tbody></table>
<font color="#aaffaa" size="3"> 
</font><pre><font color="#aaffaa" size="3">GLvoid BuildFont(GLvoid)								<font color="#ffffaa">// 创建字体显示列表</font>
{
	base=glGenLists(256);							<font color="#ffffaa">// 创建256个显示列表</font>
	glBindTexture(GL_TEXTURE_2D, textures[0].texID);				<font color="#ffffaa">// 绑定纹理</font>
	for (int loop1=0; loop1&lt;256; loop1++)					<font color="#ffffaa">// 循环创建256个显示列表</font>
	{
		float cx=float(loop1%16)/16.0f;					<font color="#ffffaa">// 当前字符的X位置</font>
		float cy=float(loop1/16)/16.0f;					<font color="#ffffaa">// 当前字符的Y位置</font>

		glNewList(base+loop1,GL_COMPILE);					<font color="#ffffaa">// 开始创建显示列表</font>
			glBegin(GL_QUADS);						<font color="#ffffaa">// 创建一个四边形用来包含字符图像</font>
				glTexCoord2f(cx,1.0f-cy-0.0625f);			<font color="#ffffaa">// 左下方纹理坐标</font>
				glVertex2d(0,16);					<font color="#ffffaa">// </font><font color="#aaffaa" size="3"><font color="#ffffaa">左下方坐标</font></font>
				glTexCoord2f(cx+0.0625f,1.0f-cy-0.0625f);		<font color="#ffffaa">// </font><font color="#aaffaa" size="3"><font color="#ffffaa">右下方纹理坐标</font></font>
				glVertex2i(16,16);					<font color="#ffffaa">// </font><font color="#aaffaa" size="3"><font color="#aaffaa" size="3"><font color="#ffffaa">右下方坐标</font></font></font>
				glTexCoord2f(cx+0.0625f,1.0f-cy-0.001f);		<font color="#ffffaa">// </font><font color="#aaffaa" size="3"><font color="#ffffaa">右上方纹理坐标</font></font>
				glVertex2i(16,0);					<font color="#ffffaa">// </font><font color="#aaffaa" size="3"><font color="#aaffaa" size="3"><font color="#ffffaa">右上方坐标</font></font></font>
				glTexCoord2f(cx,1.0f-cy-0.001f);			<font color="#ffffaa">// </font><font color="#aaffaa" size="3"><font color="#ffffaa">左上方纹理坐标</font></font>
				glVertex2i(0,0);					<font color="#ffffaa">// </font><font color="#aaffaa" size="3"><font color="#aaffaa" size="3"><font color="#ffffaa">左上方坐标</font></font></font>
			glEnd();							<font color="#ffffaa">// 四边形创建完毕</font>
			glTranslated(14,0,0);					<font color="#ffffaa">// 向右移动14个单位</font>
		glEndList();							<font color="#ffffaa">// 结束创建显示列表</font>
	}									
}
</font></pre>
 
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_24_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_24_files/l.png"><img src="Tutorial_24_files/l.png"></td>
    <td valign="top" width="100%">下面的函数用来删除显示字符的显示列表</td>
    <td background="Tutorial_24_files/r.png"><img src="Tutorial_24_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_24_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>GLvoid KillFont(GLvoid)
{
	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_24_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_24_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_24_files/l.png"><img src="Tutorial_24_files/l.png"></td>
    <td valign="top" width="100%">glPrint函数只有一点变化,我们在Y轴方向把字符拉长一倍</td>
    <td background="Tutorial_24_files/r.png"><img src="Tutorial_24_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_24_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>GLvoid glPrint(GLint x, GLint y, int set, const char *fmt, ...)
{
	char	text[1024];						<font color="#ffffaa">	// 保存我们的字符</font>
	va_list	ap;								<font color="#ffffaa">// 指向第一个参数</font>

	if (fmt == NULL)								<font color="#ffffaa">// 如果要显示的字符为空则返回</font>
		return;									

	va_start(ap, fmt);								<font color="#ffffaa">// 开始分析参数,并把结果写入到text中</font>
	    vsprintf(text, fmt, ap);							
	va_end(ap);									

	if (set&gt;1)								<font color="#ffffaa">// 如果字符集大于1则使用第二个字符集</font>
	{
		set=1;									
	}

	glEnable(GL_TEXTURE_2D);							<font color="#ffffaa">// 使用纹理映射</font>
	glLoadIdentity();								<font color="#ffffaa">// 重置视口矩阵</font>
	glTranslated(x,y,0);							<font color="#ffffaa">// 平移到(x,y,0)处</font>
	glListBase(base-32+(128*set));						<font color="#ffffaa">// 选择字符集</font>

	glScalef(1.0f,2.0f,1.0f);							<font color="#ffffaa">// 沿Y轴放大一倍</font>

	glCallLists(strlen(text),GL_UNSIGNED_BYTE, text);				<font color="#ffffaa">// 把字符写入到屏幕</font>
	glDisable(GL_TEXTURE_2D);							<font color="#ffffaa">// 禁止纹理映射 </font>
}
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_24_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_24_files/l.png"><img src="Tutorial_24_files/l.png"></td>
    <td valign="top" width="100%">窗口改变大小的函数使用正投影,把视口范围设置为(0,0)-(640,480)</td>
    <td background="Tutorial_24_files/r.png"><img src="Tutorial_24_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_24_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>GLvoid ReSizeGLScene(GLsizei width, GLsizei height)
{
	swidth=width;									<font color="#ffffaa">// 设置剪切矩形为窗口大小</font>
	sheight=height;									
	if (height==0)									<font color="#ffffaa">// 防止高度为0时,被0除</font>
	{
		height=1;								
	}
	glViewport(0,0,width,height);							<font color="#ffffaa">// 设置窗口可见区</font>
	glMatrixMode(GL_PROJECTION);							
	glLoadIdentity();								
	glOrtho(0.0f,640,480,0.0f,-1.0f,1.0f);						<font color="#ffffaa">// 设置视口大小为640x480</font>
	glMatrixMode(GL_MODELVIEW);							
	glLoadIdentity();						
}
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_24_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_24_files/l.png"><img src="Tutorial_24_files/l.png"></td>
    <td valign="top" width="100%">初始化操作非常简单,我们载入字体纹理,并创建字符显示列表,如果顺利,则成功返回。</td>
    <td background="Tutorial_24_files/r.png"><img src="Tutorial_24_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_24_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>int InitGL(GLvoid)				
{
	if (!LoadTGA(&amp;textures[0],"Data/Font.TGA"))						<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">// 设置深度缓存中的值为1</font>
	glBindTexture(GL_TEXTURE_2D, textures[0].texID);					<font color="#ffffaa">// 绑定字体纹理</font>

	return TRUE;									<font color="#ffffaa">// 成功返回</font>
}
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_24_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_24_files/l.png"><img src="Tutorial_24_files/l.png"></td>
    <td valign="top" width="100%">绘制代码几乎是全新的:),token为一个指向字符串的指针,它将保存OpenGL扩展的全部字符串,cnt纪录扩展的个数。<br>
      接下来清楚背景,并显示OpenGL的销售商,实现它的公司和当前的版本。</td>
    <td background="Tutorial_24_files/r.png"><img src="Tutorial_24_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_24_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>int DrawGLScene(GLvoid)			
{
	char	*token;									<font color="#ffffaa">// 保存扩展字符串</font>
	int	cnt=0;									<font color="#ffffaa">// 纪录扩展字符串的个数</font>

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);				<font color="#ffffaa">	// 清楚背景和深度缓存</font>

	glColor3f(1.0f,0.5f,0.5f);							<font color="#ffffaa">	// 设置为红色</font>
	glPrint(50,16,1,"Renderer");							
	glPrint(80,48,1,"Vendor");						
	glPrint(66,80,1,"Version");						</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_24_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_24_files/l.png"><img src="Tutorial_24_files/l.png"></td>
    <td valign="top" width="100%">下面的代码显示OpenGL实现方面的相关信息,完成之后我们用蓝色在屏幕的下方写上“NeHe Productions”,当然你可以使用任何你想使用的字符,比如"DancingWind 
      Translate"。</td>
    <td background="Tutorial_24_files/r.png"><img src="Tutorial_24_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_24_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_24_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_24_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>	glColor3f(1.0f,0.7f,0.4f);							<font color="#ffffaa">// 设置为橘黄色</font>
	glPrint(200,16,1,(char *)glGetString(GL_RENDERER));				<font color="#ffffaa">// 显示OpenGL的实现组织</font>
	glPrint(200,48,1,(char *)glGetString(GL_VENDOR));				<font color="#ffffaa">// 显示销售商</font>
	glPrint(200,80,1,(char *)glGetString(GL_VERSION));				<font color="#ffffaa">// 显示当前版本</font>

	glColor3f(0.5f,0.5f,1.0f);							<font color="#ffffaa">// 设置为蓝色</font>

⌨️ 快捷键说明

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