📄 tutorial_20.htm
字号:
glTexCoord2f(roll+4.0f, 4.0f); glVertex3f( 1.1f, 1.1f, 0.0f);
glTexCoord2f(roll+0.0f, 4.0f); glVertex3f(-1.1f, 1.1f, 0.0f);
glEnd();
}
</pre></font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_20_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_20_files/l.png"><img src="Tutorial_20_files/l.png"></td>
<td valign="top" width="100%">当我们把“掩模”绘制到屏幕上后,接着我们变换混合系数。这次我们告诉OpenGL把任何黑色部分对应的像素复制到屏幕,这样看起来纹理就像被镂空一样帖子屏幕上。
<p>注意,我们在变换了混合模式后在选择的纹理。</p>
<p>如果我们没有使用“掩模”,我们的图像将与屏幕颜色混合。</p></td><td background="Tutorial_20_files/r.png"><img src="Tutorial_20_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_20_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre> glBlendFunc(GL_ONE, GL_ONE); <font color="#ffffaa">// 把纹理1复制到屏幕</font>
glBindTexture(GL_TEXTURE_2D, texture[2]); <font color="#ffffaa">// 选择第一个纹理</font>
glBegin(GL_QUADS); <font color="#ffffaa">// 开始绘制四边形</font>
glTexCoord2f(roll+0.0f, 0.0f); glVertex3f(-1.1f, -1.1f, 0.0f);
glTexCoord2f(roll+4.0f, 0.0f); glVertex3f( 1.1f, -1.1f, 0.0f);
glTexCoord2f(roll+4.0f, 4.0f); glVertex3f( 1.1f, 1.1f, 0.0f);
glTexCoord2f(roll+0.0f, 4.0f); glVertex3f(-1.1f, 1.1f, 0.0f);
glEnd();
}
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_20_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_20_files/l.png"><img src="Tutorial_20_files/l.png"></td>
<td valign="top" width="100%">接下来启用深度测试,禁用混合。</td>
<td background="Tutorial_20_files/r.png"><img src="Tutorial_20_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_20_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3"><pre> glEnable(GL_DEPTH_TEST); <font color="#ffffaa">// 启用深度测试</font>
glDisable(GL_BLEND); <font color="#ffffaa">// 禁用混合</font>
</pre></font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_20_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_20_files/l.png"><img src="Tutorial_20_files/l.png"></td>
<td valign="top" width="100%">最后增加roll变量,如果大于1,把它的值减1。</td>
<td background="Tutorial_20_files/r.png"><img src="Tutorial_20_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_20_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre> roll+=0.002f; <font color="#ffffaa">// 增加纹理滚动变量</font>
if (roll>1.0f) <font color="#ffffaa">// 大于1则减1</font>
{
roll-=1.0f;
}
return TRUE; <font color="#ffffaa">// 成功返回</font>
}
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_20_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_20_files/l.png"><img src="Tutorial_20_files/l.png"></td>
<td valign="top" width="100%">函数KillGLWindow(), CreateGLWindow() 和 WndProc() 没有改变。
<p></p></td><td background="Tutorial_20_files/r.png"><img src="Tutorial_20_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_20_files/br.png" height="28" width="28"></td></tr></tbody></table>
<font color="#aaffaa" size="3"> </font>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_20_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_20_files/l.png"><img src="Tutorial_20_files/l.png"></td>
<td valign="top" width="100%">接下来在wWinMain,我们添加键盘控制函数。我们检查空格是否按下,如果是则设置sp变量为TRUE,sp变量用来切换场景。</td>
<td background="Tutorial_20_files/r.png"><img src="Tutorial_20_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_20_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3"><pre> if (keys[' '] && !sp) <font color="#ffffaa">// 空格键是否被按下?</font>
{
sp=TRUE;
scene=!scene; <font color="#ffffaa">// 是则切换场景</font>
}
</pre></font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_20_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_20_files/l.png"><img src="Tutorial_20_files/l.png"></td>
<td valign="top" width="100%">如果空格键释放,记录下来</td>
<td background="Tutorial_20_files/r.png"><img src="Tutorial_20_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_20_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
</font><pre><font color="#aaffaa" size="3"> if (!keys[' ']) <font color="#ffffaa">// 如果空格键释放,记录下来</font>
{
sp=FALSE;
}
</font></pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_20_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_20_files/l.png"><img src="Tutorial_20_files/l.png"></td>
<td valign="top" width="100%">我们检查M键是否按下,如果是则设置mp变量为TRUE,sp变量用来切换是否使用“掩模”</td>
<td background="Tutorial_20_files/r.png"><img src="Tutorial_20_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_20_files/br.png" height="28" width="28"></td></tr></tbody></table>
<font color="#aaffaa" size="3">
<pre> if (keys['M'] && !mp) <font color="#ffffaa">// M键是否被按下</font>
{
mp=TRUE;
masking=!masking; <font color="#ffffaa"> // </font><font color="#aaffaa" size="3"><font color="#ffffaa">是则切换“掩模”</font></font>
}
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_20_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_20_files/l.png"><img src="Tutorial_20_files/l.png"></td>
<td valign="top" width="100%">如果M键释放,记录下来</td>
<td background="Tutorial_20_files/r.png"><img src="Tutorial_20_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_20_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre> if (!keys['M']) <font color="#ffffaa">// 如果M键释放,记录下来</font>
{
mp=FALSE;
}
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_20_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_20_files/l.png"><img src="Tutorial_20_files/l.png"></td>
<td valign="top" width="100%"><font face="Tahoma,Verdana,sans-serif">Eric Desrosiers指出,你也可以在载入的时候测试*.bmp图像中的每一个像素,如果你你想要透明的结果,你可以把颜色的alpha设置为0。对于其他的颜色,你可以把alpha设置为1。这个方法也能达到同样的效果,但需要一些额外的代码。</font>
<p>在这课里,我们给你演示了一个简单的例子,它能高效的绘制一部分纹理而不使用alpha值。</p>
<p>谢谢Rob Santa的想法和例子程序,我从没想到过这种方法。</p>
<p>我希望你喜欢这个教程,如果你在理解上有任何问题或找到了任何错误,请我知道,我想做最好的教程,你的反馈是非常重要的。</p>
<table border="1" width="100%">
<tbody><tr>
<td width="27%"><img src="Tutorial_20_files/logo%25203.jpg" align="middle" height="200" width="209"></td>
<td width="73%">版权与使用声明:<br>
我是个对学习和生活充满激情的普通男孩,在网络上我以DancingWind为昵称,我的联系方式是zhouwei02@mails.tsinghua.edu.cn,如果你有任何问题,都可以联系我。
<p>引子<br>
网络是一个共享的资源,但我在自己的学习生涯中浪费大量的时间去搜索可用的资料,在现实生活中花费了大量的金钱和时间在书店中寻找资料,于是我给自己起了
个昵称DancingWind,其意义是想风一样从各个知识的站点中吸取成长的养料。在飘荡了多年之后,我决定把自己收集的资料整理为一个统一的资源库。</p>
<p>版权声明<br>
所有DancingWind发表的内容,大多都来自共享的资源,所以我没有资格把它们据为己有,或声称自己为这些资源作出了一点贡献。故任何人都可以复
制,修改,重新发表,甚至以自己的名义发表,我都不会追究,但你在做以上事情的时候必须保证内容的完整性,给后来的人一个完整的教程。最后,任何人不能以
这些资料的任何部分,谋取任何形式的报酬。</p>
<p>发展计划<br>
在国外,很多资料都是很多人花费几年的时间慢慢积累起来的。如果任何人有兴趣与别人共享你的知识,我很欢迎你与我联系,但你必须同意我上面的声明。</p>
<p>感谢<br>
感谢我的母亲一直以来对我的支持和在生活上的照顾。<br>
感谢我深爱的女友田芹,一直以来默默的在精神上和生活中对我的支持,她甚至把买衣服的钱都用来给我买书了,她真的是我见过的最好的女孩,希望我能带给她幸福。</p>
<p>资源下载: <br>
文档 <a href="http://www.owlei.com/DancingWind/Res/mht/NeHe%20OpenGL%20Chinese%20Course%2020.mht">网页格式</a>
<a href="http://www.owlei.com/DancingWind/Res/pdf/OpenGL_Nehe_Course_Tutorial_20.pdf">PDF格式</a><br>
源码 <a href="http://www.owlei.com/DancingWind/Res/Src/20_TransparentTexture.rar">RAR格式</a></p></td>
</tr>
</tbody></table>
<font face="Tahoma,Verdana,sans-serif" size="-1">
<table border="0" width="100%">
<tbody><tr><td align="left" width="50%"><b><font size="-1"><a href="http://www.owlei.com/DancingWind/Course/Tutorial_19.htm"><
<font face="Tahoma,Verdana,sans-serif">第</font>19<font face="Tahoma,Verdana,sans-serif">课</font></a></font></b></td>
<td align="right" width="50%"><b><font size="-1"><a href="http://www.owlei.com/DancingWind/Course/Tutorial_21.htm"><font face="Tahoma,Verdana,sans-serif">第</font>21<font face="Tahoma,Verdana,sans-serif">课</font>
></a></font></b></td>
</tr></tbody></table>
</font></td>
<td background="Tutorial_20_files/r.png"><img src="Tutorial_20_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_20_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_20_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_20_files/br.png" height="28" width="28"></td></tr></tbody></table>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -