📄 tutorial_26.htm
字号:
<!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_26_files/logo.png" height="130" width="326"></td>
<td align="center" valign="middle" width="75%"><font color="#ffccaa" size="+3"><b><i>第26课</i></b></font></td>
</tr></tbody></table>
<!-- 上边框-->
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_26_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_26_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_26_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_26_files/l.gif"><img src="Tutorial_26_files/l.gif" height="28" width="28"></td>
<!-- 中部文字部分-->
<td valign="top" width="100%">
<table border="0" width="100%">
<tbody><tr>
<td width="31%"><img src="Tutorial_26_files/lesson26.jpg" height="180" width="240"></td>
<td width="69%"><p><font class="head">剪裁平面,蒙板缓存和反射:</font></p>
<p><font size="3">在这一课中你将学会如何创建镜面显示效果,它使用剪裁平面,蒙板缓存等OpenGL中一些高级的技巧。</font></p></td>
</tr>
</tbody></table>
</td>
<!-- 中部右边框-->
<td background="Tutorial_26_files/r.gif"><img src="Tutorial_26_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_26_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_26_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_26_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_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_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_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
<td valign="top" width="100%">欢迎来到另一个激动人心的课程,这课的代码是Banu Cosmin所写,当然教程还是我自己写的。在这课里,我将教你创建真正的反射,基于物理的。<br>
由于它将用到蒙板缓存,所以需要耗费一些资源。当然随着显卡和CPU的发展,这些都不是问题了,好了让我们开始吧!<br></td><td background="Tutorial_26_files/r.png"><img src="Tutorial_26_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/br.png" height="28" width="28"></td></tr></tbody></table>
<font color="#aaffaa" size="3"> </font> <font color="#aaffaa" size="3"> </font>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_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_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
<td valign="top" width="100%">下面我们设置光源的参数</td>
<td background="Tutorial_26_files/r.png"><img src="Tutorial_26_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>static GLfloat LightAmb[] = {0.7f, 0.7f, 0.7f, 1.0f}; <font color="#ffffaa">// 环境光</font>
static GLfloat LightDif[] = {1.0f, 1.0f, 1.0f, 1.0f}; <font color="#ffffaa">// 漫射光</font>
static GLfloat LightPos[] = {4.0f, 4.0f, 6.0f, 1.0f}; <font color="#ffffaa">// 灯光的位置</font></pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_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_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
<td valign="top" width="100%">下面用二次几何体创建一个球,并设置纹理</td>
<td background="Tutorial_26_files/r.png"><img src="Tutorial_26_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
</font><pre><font color="#aaffaa" size="3">GLUquadricObj *q; <font color="#ffffaa">// 使用二次几何体创建球</font>
GLfloat xrot = 0.0f; <font color="#ffffaa"> // X方向的旋转角度</font>
GLfloat yrot = 0.0f; <font color="#ffffaa">// Y方向的旋转角的</font>
GLfloat xrotspeed = 0.0f; <font color="#ffffaa"> // X方向的旋转速度</font>
GLfloat yrotspeed = 0.0f; <font color="#ffffaa">// Y方向的旋转速度</font>
GLfloat zoom = -7.0f; <font color="#ffffaa">// 移入屏幕7个单位</font>
GLfloat height = 2.0f; <font color="#ffffaa">// 球离开地板的高度</font>
GLuint texture[3]; <font color="#ffffaa">// 使用三个纹理</font></font></pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_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_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
<td valign="top" width="100%">ReSizeGLScene() 和LoadBMP() 没有变化</td>
<td background="Tutorial_26_files/r.png"><img src="Tutorial_26_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3"><pre>GLvoid ReSizeGLScene(GLsizei width, GLsizei height)
AUX_RGBImageRec *LoadBMP(char *Filename)
</pre></font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_26_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_26_files/l.png"><img src="Tutorial_26_files/l.png"></td>
<td valign="top" width="100%"><font color="#ffffff">下面的代码载入纹理</font></td>
<td background="Tutorial_26_files/r.png"><img src="Tutorial_26_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_26_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_26_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_26_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>int LoadGLTextures() <font color="#ffffaa">// 载入*.bmp文件,并转化为纹理</font>
{
int Status=FALSE;
AUX_RGBImageRec *TextureImage[3]; <font color="#ffffaa">// 创建三个图象</font>
memset(TextureImage,0,sizeof(void *)*3);
if ((TextureImage[0]=LoadBMP("Data/EnvWall.bmp")) && <font color="#ffffaa">// 载入地板图像</font>
(TextureImage[1]=LoadBMP("Data/Ball.bmp")) && <font color="#ffffaa">// 载入球图像</font>
(TextureImage[2]=LoadBMP("Data/EnvRoll.bmp"))) <font color="#ffffaa">// 载入强的图像</font>
{
Status=TRUE;
glGenTextures(3, &texture[0]); <font color="#ffffaa">// 创建纹理</font>
for (int loop=0; loop<3; loop++) <font color="#ffffaa"> // 循环设置三个纹理参数</font>
{
glBindTexture(GL_TEXTURE_2D, texture[loop]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]->sizeX, TextureImage[loop]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
}
for (loop=0; loop<3; loop++)
{
if (TextureImage[loop])
{
if (TextureImage[loop]->data)
{
free(TextureImage[loop]->data);
}
free(TextureImage[loop]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -