📄 tutorial_44.htm
字号:
pt = vLightSourceToIntersect * (Length * 0.175f); <br>
pt += m_LightSourcePos; <br>
RenderHalo(0.9f, 0.2f, 0.1f, 0.5f, pt, 0.83f); </p>
<p> <span class="theme">//绘制到光晕结束位置的0.285处的光晕</span><br>
pt = vLightSourceToIntersect * (Length * 0.285f); <br>
pt += m_LightSourcePos; <br>
RenderHalo(0.7f, 0.7f, 0.4f, 0.5f, pt, 1.6f); <br>
<br>
<span class="theme">//绘制到光晕结束位置的0.2755处的光晕</span><br>
pt = vLightSourceToIntersect * (Length * 0.2755f); <br>
pt += m_LightSourcePos; <br>
RenderGlow(0.9f, 0.9f, 0.2f, 0.5f, pt, 0.8f); </p>
<p> <span class="theme">//绘制到光晕结束位置的0.4755处的光晕</span><br>
pt = vLightSourceToIntersect * (Length * 0.4775f); <br>
pt += m_LightSourcePos; <br>
RenderGlow(0.93f, 0.82f, 0.73f, 0.5f, pt, 1.0f); <br>
<br>
<span class="theme">//绘制到光晕结束位置的0.49处的光晕</span><br>
pt = vLightSourceToIntersect * (Length * 0.49f); <br>
pt += m_LightSourcePos; <br>
RenderHalo(0.7f, 0.6f, 0.5f, 0.5f, pt, 1.4f); </p>
<p> <span class="theme">//绘制到光晕结束位置的0.65处的光晕</span><br>
pt = vLightSourceToIntersect * (Length * 0.65f); <br>
pt += m_LightSourcePos; <br>
RenderGlow(0.7f, 0.8f, 0.3f, 0.5f, pt, 1.8f); <br>
<br>
<span class="theme">//绘制到光晕结束位置的0.63处的光晕</span><br>
pt = vLightSourceToIntersect * (Length * 0.63f); <br>
pt += m_LightSourcePos; <br>
RenderGlow(0.4f, 0.3f, 0.2f, 0.5f, pt, 1.4f); </p>
<p> <span class="theme">//绘制到光晕结束位置的0.8处的光晕</span><br>
pt = vLightSourceToIntersect * (Length * 0.8f); <br>
pt += m_LightSourcePos; <br>
RenderHalo(0.7f, 0.5f, 0.5f, 0.5f, pt, 1.4f); <br>
<br>
<span class="theme">//绘制到光晕结束位置的0.7825处的光晕</span><br>
pt = vLightSourceToIntersect * (Length * 0.7825f); <br>
pt += m_LightSourcePos; <br>
RenderGlow(0.8f, 0.5f, 0.1f, 0.5f, pt, 0.6f); </p>
<p> <span class="theme">//绘制到光晕结束位置的1.0处的光晕</span><br>
pt = vLightSourceToIntersect * (Length * 1.0f); <br>
pt += m_LightSourcePos; <br>
RenderHalo(0.5f, 0.5f, 0.7f, 0.5f, pt, 1.7f); <br>
<br>
<span class="theme">//绘制到光晕结束位置的0.975处的光晕</span><br>
pt = vLightSourceToIntersect * (Length * 0.975f); <br>
pt += m_LightSourcePos; <br>
RenderGlow(0.4f, 0.1f, 0.9f, 0.5f, pt, 2.0f); </p>
<p> }<br>
glDisable(GL_BLEND ); <br>
glEnable(GL_DEPTH_TEST); <br>
glDisable(GL_TEXTURE_2D); <br>
}<br>
}</p>
<p></p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="28"></td>
<td class="tc" width="100%"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="100%"></td>
<td class="tr"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="28"></td>
<td class="back3" valign="top" width="100%">好了,下面的函数用来绘制四种不同的光晕</td>
<td class="r"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="28"></td>
<td class="bc" width="100%"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="28"></td>
<td class="br"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<pre><span class="theme">//绘制Halo形的光晕</span><br>void glCamera::RenderHalo(GLfloat r, GLfloat g, GLfloat b, GLfloat a, glPoint p, GLfloat scale)<br>{<br> glPoint q[4];<br> <br> q[0].x = (p.x - scale); <br> q[0].y = (p.y - scale); <br> <br> q[1].x = (p.x - scale); <br> q[1].y = (p.y + scale); <br> <br> q[2].x = (p.x + scale); <br> q[2].y = (p.y - scale); <br> <br> q[3].x = (p.x + scale); <br> q[3].y = (p.y + scale); <br> <br> glPushMatrix(); <br> glTranslatef(p.x, p.y, p.z); <br> glRotatef(-m_HeadingDegrees, 0.0f, 1.0f, 0.0f);<br> glRotatef(-m_PitchDegrees, 1.0f, 0.0f, 0.0f);<br> glBindTexture(GL_TEXTURE_2D, m_HaloTexture); <br> glColor4f(r, g, b, a); <br> <br> glBegin(GL_TRIANGLE_STRIP); <br> glTexCoord2f(0.0f, 0.0f); <br> glVertex2f(q[0].x, q[0].y);<br> glTexCoord2f(0.0f, 1.0f);<br> glVertex2f(q[1].x, q[1].y);<br> glTexCoord2f(1.0f, 0.0f);<br> glVertex2f(q[2].x, q[2].y);<br> glTexCoord2f(1.0f, 1.0f);<br> glVertex2f(q[3].x, q[3].y);<br> glEnd(); <br> glPopMatrix(); <br>}</pre>
<p><span class="theme">//绘制Gloew形的光晕</span><br>
void glCamera::RenderGlow(GLfloat r, GLfloat g, GLfloat b, GLfloat a, glPoint
p, GLfloat scale)<br>
{<br>
glPoint q[4];<br>
<br>
q[0].x = (p.x - scale); <br>
q[0].y = (p.y - scale); </p>
<p> q[1].x = (p.x - scale); <br>
q[1].y = (p.y + scale); <br>
<br>
q[2].x = (p.x + scale); <br>
q[2].y = (p.y - scale); <br>
<br>
q[3].x = (p.x + scale); <br>
q[3].y = (p.y + scale); <br>
<br>
glPushMatrix(); <br>
glTranslatef(p.x, p.y, p.z); <br>
glRotatef(-m_HeadingDegrees, 0.0f, 1.0f, 0.0f);<br>
glRotatef(-m_PitchDegrees, 1.0f, 0.0f, 0.0f);<br>
glBindTexture(GL_TEXTURE_2D, m_GlowTexture); <br>
glColor4f(r, g, b, a); <br>
<br>
glBegin(GL_TRIANGLE_STRIP); <br>
glTexCoord2f(0.0f, 0.0f); <br>
glVertex2f(q[0].x, q[0].y);<br>
glTexCoord2f(0.0f, 1.0f);<br>
glVertex2f(q[1].x, q[1].y);<br>
glTexCoord2f(1.0f, 0.0f);<br>
glVertex2f(q[2].x, q[2].y);<br>
glTexCoord2f(1.0f, 1.0f);<br>
glVertex2f(q[3].x, q[3].y);<br>
glEnd(); <br>
glPopMatrix(); <br>
}</p>
<p><span class="theme">//绘制BigGlow形的光晕</span><br>
void glCamera::RenderBigGlow(GLfloat r, GLfloat g, GLfloat b, GLfloat a, glPoint
p, GLfloat scale)<br>
{<br>
glPoint q[4];<br>
<br>
q[0].x = (p.x - scale); <br>
q[0].y = (p.y - scale); <br>
<br>
q[1].x = (p.x - scale); <br>
q[1].y = (p.y + scale); <br>
<br>
q[2].x = (p.x + scale); <br>
q[2].y = (p.y - scale); <br>
<br>
q[3].x = (p.x + scale); <br>
q[3].y = (p.y + scale); <br>
<br>
glPushMatrix(); <br>
glTranslatef(p.x, p.y, p.z); <br>
glRotatef(-m_HeadingDegrees, 0.0f, 1.0f, 0.0f);<br>
glRotatef(-m_PitchDegrees, 1.0f, 0.0f, 0.0f);<br>
glBindTexture(GL_TEXTURE_2D, m_BigGlowTexture); <br>
glColor4f(r, g, b, a); <br>
<br>
glBegin(GL_TRIANGLE_STRIP); <br>
glTexCoord2f(0.0f, 0.0f); <br>
glVertex2f(q[0].x, q[0].y);<br>
glTexCoord2f(0.0f, 1.0f);<br>
glVertex2f(q[1].x, q[1].y);<br>
glTexCoord2f(1.0f, 0.0f);<br>
glVertex2f(q[2].x, q[2].y);<br>
glTexCoord2f(1.0f, 1.0f);<br>
glVertex2f(q[3].x, q[3].y);<br>
glEnd(); <br>
glPopMatrix(); <br>
}</p>
<p><span class="theme">//绘制Streaks形的光晕</span><br>
void glCamera::RenderStreaks(GLfloat r, GLfloat g, GLfloat b, GLfloat a, glPoint
p, GLfloat scale)<br>
{<br>
glPoint q[4];<br>
<br>
q[0].x = (p.x - scale); <br>
q[0].y = (p.y - scale); <br>
<br>
q[1].x = (p.x - scale); <br>
q[1].y = (p.y + scale); <br>
<br>
q[2].x = (p.x + scale); <br>
q[2].y = (p.y - scale); <br>
<br>
q[3].x = (p.x + scale); <br>
q[3].y = (p.y + scale); <br>
<br>
glPushMatrix(); <br>
glTranslatef(p.x, p.y, p.z); <br>
glRotatef(-m_HeadingDegrees, 0.0f, 1.0f, 0.0f);<br>
glRotatef(-m_PitchDegrees, 1.0f, 0.0f, 0.0f);<br>
glBindTexture(GL_TEXTURE_2D, m_StreakTexture); <br>
glColor4f(r, g, b, a); <br>
<br>
glBegin(GL_TRIANGLE_STRIP); <br>
glTexCoord2f(0.0f, 0.0f); <br>
glVertex2f(q[0].x, q[0].y);<br>
glTexCoord2f(0.0f, 1.0f);<br>
glVertex2f(q[1].x, q[1].y);<br>
glTexCoord2f(1.0f, 0.0f);<br>
glVertex2f(q[2].x, q[2].y);<br>
glTexCoord2f(1.0f, 1.0f);<br>
glVertex2f(q[3].x, q[3].y);<br>
glEnd(); <br>
glPopMatrix(); <br>
}<br>
</p>
<p></p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="28"></td>
<td class="tc" width="100%"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="100%"></td>
<td class="tr"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="28"></td>
<td class="back3" valign="top" width="100%"><p>你可以使用w,s,a,d变换摄像机的方向,1,2显示/关闭各种信息参数。C给摄像机一个固定的速度,X停止它。</p>
<p>上面就是这个教程的全部了,所有的问题,评论和抱怨都欢迎。当然我不是第一个作这个效果的人,下面是其他方面相关的文章:<br>
<a href="http://www.gamedev.net/reference/articles/article874.asp">http://www.gamedev.net/reference/articles/article874.asp</a><br>
<a href="http://www.gamedev.net/reference/articles/article813.asp">http://www.gamedev.net/reference/articles/article813.asp</a><br>
<a href="http://www.opengl.org/developers/code/mjktips/lensflare/">http://www.opengl.org/developers/code/mjktips/lensflare/</a><br>
<a href="http://www.markmorley.com/opengl/frustumculling.html">http://www.markmorley.com/opengl/frustumculling.html</a><br>
<a href="http://oss.sgi.com/projects/ogl-sample/registry/HP/occlusion_test.txt">http://oss.sgi.com/projects/ogl-sample/registry/HP/occlusion_test.txt</a><br>
<a href="http://oss.sgi.com/projects/ogl-sample/registry/NV/occlusion_query.txt">http://oss.sgi.com/projects/ogl-sample/registry/NV/occlusion_query.txt</a>
</p>
<table border="1" width="100%">
<tbody><tr>
<td width="27%"><img src="Tutorial_44_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%2044.mht">网页格式</a>
<a href="http://www.owlei.com/DancingWind/Res/pdf/OpenGL_Nehe_Course_Tutorial_44.pdf">PDF格式</a><br>
源码 <a href="http://www.owlei.com/DancingWind/Res/Src/44_Flare.rar">RAR格式</a></p></td>
</tr>
</tbody></table>
<font class="text">
<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_43.htm">< 第43课</a></font></b></td>
<td align="right" width="50%"><b><font size="-1"><a href="http://www.owlei.com/DancingWind/Course/Tutorial_45.htm">第45课 > </a></font></b></td>
</tr>
</tbody>
</table>
</font> </td>
<td class="r"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="28"></td>
<td class="bc" width="100%"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="28"></td>
<td class="br"><img alt="" src="Tutorial_44_files/blank1.gif" height="28" width="28"></td></tr></tbody></table>
<pre> </pre>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -