﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-C大调如歌的行板-随笔分类-图形学</title><link>http://www.cppblog.com/jedi-CY/category/11028.html</link><description>我也来发明山楂车轮</description><language>zh-cn</language><lastBuildDate>Thu, 06 Feb 2014 04:21:06 GMT</lastBuildDate><pubDate>Thu, 06 Feb 2014 04:21:06 GMT</pubDate><ttl>60</ttl><item><title>shader toy 上练习，画了个baby grand piano</title><link>http://www.cppblog.com/jedi-CY/archive/2014/02/06/205641.html</link><dc:creator>陈昱(CY)</dc:creator><author>陈昱(CY)</author><pubDate>Wed, 05 Feb 2014 16:11:00 GMT</pubDate><guid>http://www.cppblog.com/jedi-CY/archive/2014/02/06/205641.html</guid><wfw:comment>http://www.cppblog.com/jedi-CY/comments/205641.html</wfw:comment><comments>http://www.cppblog.com/jedi-CY/archive/2014/02/06/205641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jedi-CY/comments/commentRss/205641.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jedi-CY/services/trackbacks/205641.html</trackback:ping><description><![CDATA[https://www.shadertoy.com/view/lslGWf<br /><br />要牢记GPU跑shader代码时，if是不分支的，常量的for循环是展开的，因此最重要是不要嵌套两层for<br />镜面反射乱算了个brdf的效果，好像不错；阴影加上去就指令爆了；琴身的distance field还没算准确<br />截图<br /><img src="http://www.cppblog.com/images/cppblog_com/jedi-cy/QQ图片20140205234407.jpg" width="1120" height="1046" alt="" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/jedi-cy/QQ图片20140206000245.jpg" width="602" height="407" alt="" /><br /><br /><img src ="http://www.cppblog.com/jedi-CY/aggbug/205641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jedi-CY/" target="_blank">陈昱(CY)</a> 2014-02-06 00:11 <a href="http://www.cppblog.com/jedi-CY/archive/2014/02/06/205641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>好久没有更新，写一篇凑凑数----上帝之光</title><link>http://www.cppblog.com/jedi-CY/archive/2010/06/19/118207.html</link><dc:creator>陈昱(CY)</dc:creator><author>陈昱(CY)</author><pubDate>Fri, 18 Jun 2010 16:22:00 GMT</pubDate><guid>http://www.cppblog.com/jedi-CY/archive/2010/06/19/118207.html</guid><wfw:comment>http://www.cppblog.com/jedi-CY/comments/118207.html</wfw:comment><comments>http://www.cppblog.com/jedi-CY/archive/2010/06/19/118207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jedi-CY/comments/commentRss/118207.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jedi-CY/services/trackbacks/118207.html</trackback:ping><description><![CDATA[
昨天某哥们在说god ray的实现，由于OGRE还不太熟，决定还是先用RenderMonkey实现一下，参考了网上的说法，大概是&#8220;直接在像素和太阳的位置上采样，再叠加就搞定了&#8221;<br><br>知道了大概思路，于是匆匆忙忙实现，结果杯具如下：<br><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/jedi-cy/beiju_godray.jpg" width="612" height="679"><br><br><br>调了不少时间，调不出来，于是去nv gpu gem3的官网找那个代码，公式照搬，再调一下参数，神器诞生~~<br><a title="RenderMonkey 实现代码下载" href="http://www.cppblog.com/Files/jedi-CY/god_ray.rar">RenderMonkey 实现代码下载</a>&nbsp;<br><br><br><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/jedi-cy/car_godray.jpg" width="571" height="643"><br><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/jedi-cy/bone_godray.jpg" width="486" height="495"><br><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/jedi-cy/ati_godray.jpg" width="488" height="476"><br><br>此外最主要的发现是RenderMonkey里的Camera要加进去，在pass里面引用，这样里面的视锥矩阵才是Camera的矩阵。之前的那个有问题的Parallax Mapping：<a href="http://www.cppblog.com/jedi-CY/archive/2009/10/24/99351.html"><u><font color="#0066cc">http://www.cppblog.com/jedi-CY/archive/2009/10/24/99351.html</font></u></a>，出现奇怪的现象也是没有加Camera导致的。。。汗。。。。。<br><br>另外由于RenderMonkey无法获得ViewPort大小，还有其他各种限制等原因，整整用了5个pass，实际实现时2个pass就够了<img src ="http://www.cppblog.com/jedi-CY/aggbug/118207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jedi-CY/" target="_blank">陈昱(CY)</a> 2010-06-19 00:22 <a href="http://www.cppblog.com/jedi-CY/archive/2010/06/19/118207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第二次地形实践 GeoMipMap 动态地形块渲染</title><link>http://www.cppblog.com/jedi-CY/archive/2010/02/09/107615.html</link><dc:creator>陈昱(CY)</dc:creator><author>陈昱(CY)</author><pubDate>Tue, 09 Feb 2010 11:24:00 GMT</pubDate><guid>http://www.cppblog.com/jedi-CY/archive/2010/02/09/107615.html</guid><wfw:comment>http://www.cppblog.com/jedi-CY/comments/107615.html</wfw:comment><comments>http://www.cppblog.com/jedi-CY/archive/2010/02/09/107615.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jedi-CY/comments/commentRss/107615.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jedi-CY/services/trackbacks/107615.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 之前的一篇文章实现的是完全基于四叉树的动态地形渲染，虽然感觉那种方案是最优美的方案，假设CPU和GPU速度上没有差别的话，那种方案应该是最佳的了。但是现实中CPU速度还是比GPU慢不少的，因此，参考了这篇文章：http://nvidia.e-works.net.cn/document/200908/article8938_2.htm&nbsp;并按其思路实现了分块的地形LOD算法，整体思路感觉比之...&nbsp;&nbsp;<a href='http://www.cppblog.com/jedi-CY/archive/2010/02/09/107615.html'>阅读全文</a><img src ="http://www.cppblog.com/jedi-CY/aggbug/107615.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jedi-CY/" target="_blank">陈昱(CY)</a> 2010-02-09 19:24 <a href="http://www.cppblog.com/jedi-CY/archive/2010/02/09/107615.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IGame骨骼动画成功导出</title><link>http://www.cppblog.com/jedi-CY/archive/2010/01/16/105834.html</link><dc:creator>陈昱(CY)</dc:creator><author>陈昱(CY)</author><pubDate>Sat, 16 Jan 2010 13:10:00 GMT</pubDate><guid>http://www.cppblog.com/jedi-CY/archive/2010/01/16/105834.html</guid><wfw:comment>http://www.cppblog.com/jedi-CY/comments/105834.html</wfw:comment><comments>http://www.cppblog.com/jedi-CY/archive/2010/01/16/105834.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/jedi-CY/comments/commentRss/105834.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jedi-CY/services/trackbacks/105834.html</trackback:ping><description><![CDATA[从3ds max的bip动作库拿了个比较搞笑的~~~~<br><br><img height=604 alt="" src="http://www.cppblog.com/images/cppblog_com/jedi-cy/imagebone.jpg" width=803 border=0><br><br><a title=骨骼导出demo下载 href="http://www.cppblog.com/Files/jedi-CY/Releasebone.rar">骨骼导出demo下载</a>（xml文件夹包含max源文件、导出xml文件、生成自定义格式文件）<br>（关闭程序时，在蓝色控制台最下面那个命令行输入&#8220;System.ShutDown&#8221;即可）<br><br><br>需要注意的一点：<br><br>IGame在导出骨骼xml的时候，max 骨骼，是支持关键帧导出的；biped骨骼，则强制采样导出。<br>因为max骨骼的动画方式和其它关键帧动画没有什么区别，都是统一的3dsmax设定的那些node；而biped骨骼不同，作为插件，没有和3dsmax的设计保持一致性，你不能看到分开的移动、旋转、缩放的关键帧，在打开&#8220;图表编辑器&#8221;——&#8220;轨迹视图-曲线编辑器&#8221;中，你可以看到这些关键帧，但看不到关键帧间数值的曲线变化<br><br>因此，biped骨骼在做旋转时，关键帧之间的旋转不能超过180度，否则在四元数插值时，会变成小于180度方向的旋转；而max内置的骨骼不同，它默认使用欧拉角旋转，因此2个关键帧之间可以旋转任意大的角度。<br><br><br><br>下一步弄顶点蒙皮上去，就基本完整了 
<img src ="http://www.cppblog.com/jedi-CY/aggbug/105834.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jedi-CY/" target="_blank">陈昱(CY)</a> 2010-01-16 21:10 <a href="http://www.cppblog.com/jedi-CY/archive/2010/01/16/105834.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个有问题的parallax mapping，望高手解决</title><link>http://www.cppblog.com/jedi-CY/archive/2009/10/24/99351.html</link><dc:creator>陈昱(CY)</dc:creator><author>陈昱(CY)</author><pubDate>Sat, 24 Oct 2009 05:36:00 GMT</pubDate><guid>http://www.cppblog.com/jedi-CY/archive/2009/10/24/99351.html</guid><wfw:comment>http://www.cppblog.com/jedi-CY/comments/99351.html</wfw:comment><comments>http://www.cppblog.com/jedi-CY/archive/2009/10/24/99351.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/jedi-CY/comments/commentRss/99351.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jedi-CY/services/trackbacks/99351.html</trackback:ping><description><![CDATA[<p>这个问题在normal mapping阶段就已经出现了，但是效果没有用parallax mapping后明显。具体症状如下：<br><br>当摄像机的z轴在正确角度时，上下左右旋转相机，这时看起来parallax mapping是正确的。<br><img height=363 alt="" src="http://www.cppblog.com/images/cppblog_com/jedi-cy/noP.jpg" width=433 border=0><br><img height=300 alt="" src="http://www.cppblog.com/images/cppblog_com/jedi-cy/nop1.jpg" width=800 border=0><br>但当摄像机沿z方向旋转一个角度后，再上下左右旋转相机，就会发现贴图偏移的方向出现了错误，贴图偏移的方向仍然按着摄像机z轴正确时的偏移方向偏移。<br><br>比如说，摄像机沿z旋转180度后，上/下旋转相机，物体的模型改变当然是随着显示俯视/仰视，但是贴图偏移却反过来，变成了仰视/俯视；这时左右旋转，贴图也会出现相反的左视/右视.....<br>而摄像机沿z旋转90度或270度时，上下旋转相机，贴图偏移却是沿左视、右视改变<br>摄像机沿z旋转其它角度时，这些改变也随着变化，感觉上就是：贴图的偏移效果仍然认为你的眼睛还在摄像机z轴的正确角度处看。<br><img height=338 alt="" src="http://www.cppblog.com/images/cppblog_com/jedi-cy/P.jpg" width=434 border=0><br><img height=300 alt="" src="http://www.cppblog.com/images/cppblog_com/jedi-cy/P2.jpg" width=800 border=0><br><br>过后问了一个高手，他说转换到tangent space算错了，然后我再把那本《openGL shading language》normal mapping里面vs的转换tangent space代码直接拿过来，计算的结果却更加不正确，画面都不会有动态的偏移了，后来又去复习了向量旋转的公式，觉得自己的应该还是没有错误，又在网上找了别人写过的代码试验，弄了半天还是不对，现在感觉仍然是原来的代码最接近正确的，但找不到原因，望高手解决。<br><span style="COLOR: red">RenderMonkey源文件：</span><a title=parallaxMapping.rar href="http://www.cppblog.com/Files/jedi-CY/parallaxMapping.rar">parallaxMapping.rar</a><br><span style="COLOR: red">有问题的代码：</span><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">uniform&nbsp;vec3&nbsp;LightPosition;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>varying&nbsp;vec3&nbsp;EyePos_pointTanSpace;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>varying&nbsp;vec3&nbsp;LightPos_pointTanSpace;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>attribute&nbsp;vec3&nbsp;Tangent;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">uniform&nbsp;vec3&nbsp;Tangent;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_163_778_Open_Image onclick="this.style.display='none'; Codehighlighter1_163_778_Open_Text.style.display='none'; Codehighlighter1_163_778_Closed_Image.style.display='inline'; Codehighlighter1_163_778_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_163_778_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_163_778_Closed_Text.style.display='none'; Codehighlighter1_163_778_Open_Image.style.display='inline'; Codehighlighter1_163_778_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_163_778_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_163_778_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;gl_Position&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ftransform();<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;gl_TexCoord[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;gl_MultiTexCoord0;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vec3&nbsp;eyepos</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vec3&nbsp;Pos_eyeSpace&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;vec3(gl_ModelViewMatrix&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;gl_Vertex);<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;眼坐标系下的TBN</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;vec3&nbsp;n&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;normalize(gl_NormalMatrix&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;gl_Normal);<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vec3&nbsp;t&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;normalize(gl_NormalMatrix&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;Tangent);<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vec3&nbsp;b&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;cross(n,&nbsp;t);<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;mat3&nbsp;TBN&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mat3(t,&nbsp;b,&nbsp;n);<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vec3&nbsp;pointLightPos</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">LightPosition</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Pos_eyeSpace;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">光相对于点，在眼空间的位置</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;LightPos_pointTanSpace</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">TBN</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pointLightPos;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">光相对于点，在点的tangent坐标系下的位置</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vec3&nbsp;eyePos</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Pos_eyeSpace</span><span style="COLOR: #000000">*-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">眼睛相对于点，在眼空间的位置</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;EyePos_pointTanSpace</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">TBN</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">eyePos;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">眼睛相对于点，在点的tangent坐标系下的点位置</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">uniform&nbsp;sampler2D&nbsp;BumpTex;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>uniform&nbsp;sampler2D&nbsp;BitMapTex;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>uniform&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;HeightFactor;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>varying&nbsp;vec3&nbsp;EyePos_pointTanSpace;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>varying&nbsp;vec3&nbsp;LightPos_pointTanSpace;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img id=Codehighlighter1_171_917_Open_Image onclick="this.style.display='none'; Codehighlighter1_171_917_Open_Text.style.display='none'; Codehighlighter1_171_917_Closed_Image.style.display='inline'; Codehighlighter1_171_917_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_171_917_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_171_917_Closed_Text.style.display='none'; Codehighlighter1_171_917_Open_Image.style.display='inline'; Codehighlighter1_171_917_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_171_917_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_171_917_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;height&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(texture2D(BumpTex,&nbsp;gl_TexCoord[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].xy)).a;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获得高度</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;height&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(height&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vec3&nbsp;LightDir</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">normalize(LightPos_pointTanSpace);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">光方向</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;vec3&nbsp;viewVec</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">normalize(EyePos_pointTanSpace);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">眼睛方向</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vec2&nbsp;texCoord2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">gl_TexCoord[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].xy</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">viewVec.xy</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">height</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">HeightFactor;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vec3&nbsp;BumpNorm</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">vec3(texture2D(BumpTex,&nbsp;texCoord2));<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;BumpNorm</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(BumpNorm&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vec4&nbsp;Co</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(texture2D(BitMapTex,&nbsp;texCoord2));<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;diffuse&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;max(dot(BumpNorm,&nbsp;LightDir),&nbsp;</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vec3&nbsp;reflectVec</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">reflect(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">LightDir,BumpNorm);<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;spec&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;max(dot(reflectVec,&nbsp;viewVec),&nbsp;</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">反射光&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;spec&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pow(spec,&nbsp;</span><span style="COLOR: #000000">8.0</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;color</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">spec</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">diffuse;<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;gl_FragColor&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Co</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">color;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">vec4(color,spec,0.0,&nbsp;1.0);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">35</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span></div>
<p><br>&nbsp;</p>
<img src ="http://www.cppblog.com/jedi-CY/aggbug/99351.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jedi-CY/" target="_blank">陈昱(CY)</a> 2009-10-24 13:36 <a href="http://www.cppblog.com/jedi-CY/archive/2009/10/24/99351.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shader的小奏鸣曲</title><link>http://www.cppblog.com/jedi-CY/archive/2009/10/17/98852.html</link><dc:creator>陈昱(CY)</dc:creator><author>陈昱(CY)</author><pubDate>Sat, 17 Oct 2009 14:50:00 GMT</pubDate><guid>http://www.cppblog.com/jedi-CY/archive/2009/10/17/98852.html</guid><wfw:comment>http://www.cppblog.com/jedi-CY/comments/98852.html</wfw:comment><comments>http://www.cppblog.com/jedi-CY/archive/2009/10/17/98852.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/jedi-CY/comments/commentRss/98852.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jedi-CY/services/trackbacks/98852.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 第一个是最容易&#8220;发明&#8221;的车轮：x射线效果，不过按这个做法实现真正透明的话还要逐个物体渲染到纹理，再叠加：&nbsp;1uniform&nbsp;vec3&nbsp;LightPos;&nbsp;2uniform&nbsp;float&nbsp;specularContribution;&nbsp;3&nbsp;4varying&nbsp;vec3&nbsp;&nbsp;...&nbsp;&nbsp;<a href='http://www.cppblog.com/jedi-CY/archive/2009/10/17/98852.html'>阅读全文</a><img src ="http://www.cppblog.com/jedi-CY/aggbug/98852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jedi-CY/" target="_blank">陈昱(CY)</a> 2009-10-17 22:50 <a href="http://www.cppblog.com/jedi-CY/archive/2009/10/17/98852.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>求某个点的tangent Space 的计算方法</title><link>http://www.cppblog.com/jedi-CY/archive/2009/10/12/98445.html</link><dc:creator>陈昱(CY)</dc:creator><author>陈昱(CY)</author><pubDate>Mon, 12 Oct 2009 15:38:00 GMT</pubDate><guid>http://www.cppblog.com/jedi-CY/archive/2009/10/12/98445.html</guid><wfw:comment>http://www.cppblog.com/jedi-CY/comments/98445.html</wfw:comment><comments>http://www.cppblog.com/jedi-CY/archive/2009/10/12/98445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jedi-CY/comments/commentRss/98445.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jedi-CY/services/trackbacks/98445.html</trackback:ping><description><![CDATA[学习normal mapping时，首先需要理解什么是TBN矩阵，在<a href="http://blog.csdn.net/soilwork/archive/2006/12/30/1468860.aspx">http://blog.csdn.net/soilwork/archive/2006/12/30/1468860.aspx</a>中的环形图已经可以很容易理解TBN的三个分量含义了，但是对于如何计算，找了很多地方都没有一个比较&#8220;通俗&#8221;的算法（实际上是我没有看懂...）<br>这里介绍一种本人想到的最容易看懂的算法，不过计算量还是比较大呵呵<br><br><br><br><br><img height=186 alt="" src="http://www.cppblog.com/images/cppblog_com/jedi-cy/image_20091012232147.jpg" width=328 border=0><br>如图，已知2个点，坐标分别是P1，P2，还已知他们的纹理坐标，分别是（u1，v1）和（u2，v2），还知道了第一个点的法向量，我们要计算的就是P1的tangent space，即除了法向量外的所谓的&#8220;副法向量&#8221;B 和所谓的&#8220;tangent向量&#8221;T。<br><br>直接假设所求的B和T在世界坐标中的值：B=（xb，yb，zb），T=（xt，yt，zt）<br><br>很容易就知道：<br>T&#183;B=0<br>N&#183;T=0<br>B&#183;N=0<br>另外他们都是单位向量，又有：<br>|T|=1<br>|B|=1<br>接下来，我们可以用点1的各个数据来表示点2的坐标位置：<br><br>P1+T*（u2-u1）+B*（v2-v1）=P2（或者uv交换位置：P1+T*（v2-v1）+B*（u2-u1）=P2，具体是那个可以不管...）<br><br><br>这样6个未知量6个方程，就可以计算得出点1的tangent space了~~<br><br>从这里也可以理解到，当纹理贴图坐标不够连续时为什么normal mapping的效果会不理想，因为计算一个点的tangent space还要依赖周围的点的信息 
<img src ="http://www.cppblog.com/jedi-CY/aggbug/98445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jedi-CY/" target="_blank">陈昱(CY)</a> 2009-10-12 23:38 <a href="http://www.cppblog.com/jedi-CY/archive/2009/10/12/98445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习shader第一步</title><link>http://www.cppblog.com/jedi-CY/archive/2009/09/15/96368.html</link><dc:creator>陈昱(CY)</dc:creator><author>陈昱(CY)</author><pubDate>Tue, 15 Sep 2009 15:30:00 GMT</pubDate><guid>http://www.cppblog.com/jedi-CY/archive/2009/09/15/96368.html</guid><wfw:comment>http://www.cppblog.com/jedi-CY/comments/96368.html</wfw:comment><comments>http://www.cppblog.com/jedi-CY/archive/2009/09/15/96368.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/jedi-CY/comments/commentRss/96368.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jedi-CY/services/trackbacks/96368.html</trackback:ping><description><![CDATA[<p>很早就想学习shader了，当时看着那本《openGL超级宝典》的高级shader语言看了2遍，却被误导到了那些什么shaderObject，shaderProgramme的概念上，还一直在思考一个Programme和Object之间的关系。<br>诸如包含和被包含、一对多，还有在程序中何时准备，何时释放的问题（曾看过网上一个例子，在游戏循环中居然不断重新编译）。<br><br>因为被这些问题搞混了很久，所以觉得应该找本更详细的书看，于是就找了本《openGL shading language》英文版电子书，前面5章的内容仍然是那些渲染管线的老问题，因为害怕会漏点什么，都耐着性子看，业余时间看了10天左右，才看到第6章一个入门的例子，还有第七章解决了以前困扰着的问题。</p>
接下来用了那个RenderMonkey明明白白地试验了第6章的那个例子，试验时又冒出了不少数学问题，例如：vs中的法线变换为什么不用gl_ModelViewMatrix去乘、矩阵的各种运算公式等等，哎，都怪大一时线性代数学的太烂。<br><br>以下是按照&#8220;橙宝书&#8221;第六章的砖块，这一章后面留给读者有关解决颜色锯齿的问题，弄了半天.....<br>另外，RenderMonkey添加中文注释时，有时候居然会出什么&#8220;type name expected at token "&lt;undefined&gt;"&#8221;，然后编译不通过，也弄了半天...<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">uniform&nbsp;vec3&nbsp;f3LightPos;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;specularContribution</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0.4</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;diffuseContribution</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">specularContribution;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>varying&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;LightIntensity;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>varying&nbsp;vec2&nbsp;&nbsp;MCposition;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_195_995_Open_Image onclick="this.style.display='none'; Codehighlighter1_195_995_Open_Text.style.display='none'; Codehighlighter1_195_995_Closed_Image.style.display='inline'; Codehighlighter1_195_995_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_195_995_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_195_995_Closed_Text.style.display='none'; Codehighlighter1_195_995_Open_Image.style.display='inline'; Codehighlighter1_195_995_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_195_995_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_195_995_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;vec3&nbsp;ecPosition&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;vec3(gl_ModelViewMatrix&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;gl_Vertex);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">在眼坐标系中物体的坐标</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;vec3&nbsp;tnorm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;normalize(gl_NormalMatrix&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;gl_Normal);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">在眼坐标系中的法线</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;vec3&nbsp;lightEyePos</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">vec3(vec4(f3LightPos,</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;vec3&nbsp;lightVec&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;normalize(lightEyePos&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;ecPosition);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">灯光方向(跟着眼睛移动)</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;vec3&nbsp;reflectVec&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;reflect(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">lightVec,&nbsp;tnorm);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">反射方向</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;vec3&nbsp;viewVec&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;normalize(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">ecPosition);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">眼睛的前方向</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;diffuse&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;max(dot(lightVec,&nbsp;tnorm),&nbsp;</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">光线和法线的乘积</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;spec&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(diffuse&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_700_794_Open_Image onclick="this.style.display='none'; Codehighlighter1_700_794_Open_Text.style.display='none'; Codehighlighter1_700_794_Closed_Image.style.display='inline'; Codehighlighter1_700_794_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_700_794_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_700_794_Closed_Text.style.display='none'; Codehighlighter1_700_794_Open_Image.style.display='inline'; Codehighlighter1_700_794_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_700_794_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_700_794_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spec&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;max(dot(reflectVec,&nbsp;viewVec),&nbsp;</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">反射光&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spec&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pow(spec,&nbsp;</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;LightIntensity&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;diffuseContribution&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;diffuse&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">specularContribution&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;spec;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;MCposition</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">gl_Vertex.xy;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;gl_Position&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">gl_ProjectionMatrix</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">gl_ModelViewMatrix&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;gl_Vertex;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;ftransform();</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">uniform&nbsp;vec4&nbsp;BrickColor;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>uniform&nbsp;vec4&nbsp;EdgeColor;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>uniform&nbsp;vec2&nbsp;f2BrickSize;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>uniform&nbsp;vec2&nbsp;f2BrickInnerPerc;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>varying&nbsp;vec2&nbsp;MCposition;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>varying&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;LightIntensity;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_179_1276_Open_Image onclick="this.style.display='none'; Codehighlighter1_179_1276_Open_Text.style.display='none'; Codehighlighter1_179_1276_Closed_Image.style.display='inline'; Codehighlighter1_179_1276_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_179_1276_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_179_1276_Closed_Text.style.display='none'; Codehighlighter1_179_1276_Open_Image.style.display='inline'; Codehighlighter1_179_1276_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_179_1276_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_179_1276_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;vec4&nbsp;&nbsp;color;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;vec2&nbsp;&nbsp;position,&nbsp;useBrick;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;position</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">MCposition</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">0.02</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">f2BrickSize;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">在贴图为参考比例</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(fract(position.y&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position.x&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;position&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fract(position);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">在贴图上</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;smallX</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">f2BrickInnerPerc.x)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;bigX</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">smallX;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;smallY</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">f2BrickInnerPerc.y)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;bigY</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">smallY;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(position.x</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;useBrick.x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">smoothstep(bigX</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">0.03</span><span style="COLOR: #000000">,&nbsp;bigX</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0.03</span><span style="COLOR: #000000">,position.x);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_651_782_Open_Image onclick="this.style.display='none'; Codehighlighter1_651_782_Open_Text.style.display='none'; Codehighlighter1_651_782_Closed_Image.style.display='inline'; Codehighlighter1_651_782_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_651_782_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_651_782_Closed_Text.style.display='none'; Codehighlighter1_651_782_Open_Image.style.display='inline'; Codehighlighter1_651_782_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_651_782_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_651_782_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">useBrick.x&nbsp;=&nbsp;step(position.x,&nbsp;f2BrickInnerPerc.x);</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;useBrick.x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;smoothstep(smallX</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">0.03</span><span style="COLOR: #000000">,&nbsp;smallX</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0.03</span><span style="COLOR: #000000">,position.x);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(position.y</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;useBrick.y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">smoothstep(bigY</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">0.03</span><span style="COLOR: #000000">,&nbsp;bigY</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0.03</span><span style="COLOR: #000000">,position.y);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_886_1012_Open_Image onclick="this.style.display='none'; Codehighlighter1_886_1012_Open_Text.style.display='none'; Codehighlighter1_886_1012_Closed_Image.style.display='inline'; Codehighlighter1_886_1012_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_886_1012_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_886_1012_Closed_Text.style.display='none'; Codehighlighter1_886_1012_Open_Image.style.display='inline'; Codehighlighter1_886_1012_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_886_1012_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_886_1012_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">useBrick.y&nbsp;=&nbsp;step(position.y,&nbsp;f2BrickInnerPerc.y);</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;useBrick.y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;smoothstep(smallY</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">0.03</span><span style="COLOR: #000000">,&nbsp;smallY</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0.03</span><span style="COLOR: #000000">,position.y);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;useBrick.x&nbsp;=&nbsp;step(position.x,&nbsp;f2BrickInnerPerc.x);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;useBrick.y&nbsp;=&nbsp;step(position.y,&nbsp;f2BrickInnerPerc.y);</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;color&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mix(EdgeColor,BrickColor&nbsp;,&nbsp;useBrick.x&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;useBrick.y);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;color</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">color</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">LightIntensity;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;gl_FragColor&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;vec4(&nbsp;color.rgb,&nbsp;</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br><img height=420 alt="" src="http://www.cppblog.com/images/cppblog_com/jedi-cy/image_20090915232646.jpg" width=469 border=0><br><br><br><span style="COLOR: red">接下来学习的主要问题：</span><br><br>shader环境配置、语法等烦问题都解决了，也能看明白RenderMonkey自带的一些比较简单的例子的整体思路。<br><br>但是每个例子中的细节部分，每个具体步骤的计算，却不明白。因此现在是看懂例子的大概，但是要我重新写一个，或者指出例子中某个具体计算的作用，或者脑里想象例子中某个具体步骤产生的效果，肯定不会...
<img src ="http://www.cppblog.com/jedi-CY/aggbug/96368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jedi-CY/" target="_blank">陈昱(CY)</a> 2009-09-15 23:30 <a href="http://www.cppblog.com/jedi-CY/archive/2009/09/15/96368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个想法，实习n维立方体！！！ （结束）</title><link>http://www.cppblog.com/jedi-CY/archive/2009/08/03/92100.html</link><dc:creator>陈昱(CY)</dc:creator><author>陈昱(CY)</author><pubDate>Mon, 03 Aug 2009 14:29:00 GMT</pubDate><guid>http://www.cppblog.com/jedi-CY/archive/2009/08/03/92100.html</guid><wfw:comment>http://www.cppblog.com/jedi-CY/comments/92100.html</wfw:comment><comments>http://www.cppblog.com/jedi-CY/archive/2009/08/03/92100.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/jedi-CY/comments/commentRss/92100.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jedi-CY/services/trackbacks/92100.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 注意：如果需要转载，请注明作者作者：陈昱（CY）最后一章，主要是说明一下面生成的分析，其实这里所有元素，除了0维时的第一个点外，生成都是拉伸产生的（有玩过3Dmax的朋友应该很了解那个Extrude建模，就是那样了）之前在面结构定义里包含了4个点，这其实无法表达面的真正关系，面还是应该由线来表达。因为面是由线拉伸产生的，和点没有直接的联系。面的产生中，在进入2维前，都是空的，进入2维的生成后，...&nbsp;&nbsp;<a href='http://www.cppblog.com/jedi-CY/archive/2009/08/03/92100.html'>阅读全文</a><img src ="http://www.cppblog.com/jedi-CY/aggbug/92100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jedi-CY/" target="_blank">陈昱(CY)</a> 2009-08-03 22:29 <a href="http://www.cppblog.com/jedi-CY/archive/2009/08/03/92100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个想法，实现n维超级立方体！！！初步成功！！！（第二章）</title><link>http://www.cppblog.com/jedi-CY/archive/2009/08/01/91919.html</link><dc:creator>陈昱(CY)</dc:creator><author>陈昱(CY)</author><pubDate>Sat, 01 Aug 2009 14:16:00 GMT</pubDate><guid>http://www.cppblog.com/jedi-CY/archive/2009/08/01/91919.html</guid><wfw:comment>http://www.cppblog.com/jedi-CY/comments/91919.html</wfw:comment><comments>http://www.cppblog.com/jedi-CY/archive/2009/08/01/91919.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/jedi-CY/comments/commentRss/91919.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jedi-CY/services/trackbacks/91919.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 注意：如果需要转载，请注明作者作者：陈昱（CY）继续上一章写，根据上一章线段存储的思路，完成线的复制代码如下：&nbsp;1void&nbsp;CSuperCube::CaculateLHelp(int&nbsp;currentDim)&nbsp;2{&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;//---------------------------边计算&nbsp;4&n...&nbsp;&nbsp;<a href='http://www.cppblog.com/jedi-CY/archive/2009/08/01/91919.html'>阅读全文</a><img src ="http://www.cppblog.com/jedi-CY/aggbug/91919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jedi-CY/" target="_blank">陈昱(CY)</a> 2009-08-01 22:16 <a href="http://www.cppblog.com/jedi-CY/archive/2009/08/01/91919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个想法，用程序画出高维超立方体在三维上的投影！！！（1）</title><link>http://www.cppblog.com/jedi-CY/archive/2009/07/31/91845.html</link><dc:creator>陈昱(CY)</dc:creator><author>陈昱(CY)</author><pubDate>Fri, 31 Jul 2009 13:32:00 GMT</pubDate><guid>http://www.cppblog.com/jedi-CY/archive/2009/07/31/91845.html</guid><wfw:comment>http://www.cppblog.com/jedi-CY/comments/91845.html</wfw:comment><comments>http://www.cppblog.com/jedi-CY/archive/2009/07/31/91845.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/jedi-CY/comments/commentRss/91845.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jedi-CY/services/trackbacks/91845.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 以前还在学校时，有过强烈的目睹高维物体的愿望，也想自己实现一个4维立方体试试，于是先在网络上到处找n维立方体有关的展示视频，在youtobe上发现了不少，一看就是一整天，结果第二天有别的事情，干别的事去了，当时连规律都没有找，想法就此结束。今天突然又有了兴致，于是决定好好分析一番。从最基本开始，点，我们容易推出，0维到n维，超立方体的点数是2的n次方。另外还容易推出：每增加一维，就会诞生新的空间概...&nbsp;&nbsp;<a href='http://www.cppblog.com/jedi-CY/archive/2009/07/31/91845.html'>阅读全文</a><img src ="http://www.cppblog.com/jedi-CY/aggbug/91845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jedi-CY/" target="_blank">陈昱(CY)</a> 2009-07-31 21:32 <a href="http://www.cppblog.com/jedi-CY/archive/2009/07/31/91845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>之前做的LOD动态地形</title><link>http://www.cppblog.com/jedi-CY/archive/2009/06/30/88882.html</link><dc:creator>陈昱(CY)</dc:creator><author>陈昱(CY)</author><pubDate>Tue, 30 Jun 2009 04:53:00 GMT</pubDate><guid>http://www.cppblog.com/jedi-CY/archive/2009/06/30/88882.html</guid><wfw:comment>http://www.cppblog.com/jedi-CY/comments/88882.html</wfw:comment><comments>http://www.cppblog.com/jedi-CY/archive/2009/06/30/88882.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/jedi-CY/comments/commentRss/88882.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jedi-CY/services/trackbacks/88882.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 看了何咏的文章（http://www.graphixer.com.cn/ShowWorks.asp?Type=1&amp;ID=28）后，再找到了最原始的那篇论文，也实现了一个，仅仅实现了动态地形优化部分，纹理等其它无关算法的内容没有加上去。使用OpenGL渲染，即以前做毕业设计时的框架，顺便也可以改进一下以前的游戏框架~这里就不说算法了，读者可以找找何咏说到的那篇论文，个人觉得主要难点是理解消除...&nbsp;&nbsp;<a href='http://www.cppblog.com/jedi-CY/archive/2009/06/30/88882.html'>阅读全文</a><img src ="http://www.cppblog.com/jedi-CY/aggbug/88882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jedi-CY/" target="_blank">陈昱(CY)</a> 2009-06-30 12:53 <a href="http://www.cppblog.com/jedi-CY/archive/2009/06/30/88882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>