﻿<?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>IT博客-遗忘河-文章分类-Research</title><link>http://www.cnitblog.com/lethep/category/5022.html</link><description>一个人的烦恼是因为记性太好.</description><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 11:23:23 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 11:23:23 GMT</pubDate><ttl>60</ttl><item><title>关于深度冲突(Z-Finghting or Depth Fighting)的解决</title><link>http://www.cnitblog.com/lethep/articles/25570.html</link><dc:creator>大悟终空</dc:creator><author>大悟终空</author><pubDate>Wed, 11 Apr 2007 05:36:00 GMT</pubDate><guid>http://www.cnitblog.com/lethep/articles/25570.html</guid><wfw:comment>http://www.cnitblog.com/lethep/comments/25570.html</wfw:comment><comments>http://www.cnitblog.com/lethep/articles/25570.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/lethep/comments/commentRss/25570.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lethep/services/trackbacks/25570.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OpenGL,或者D3D 的深度缓存都存在精度问题,在最新的Nvidia GF8 系列显卡中已经开始应用float point depth buffer. 而在此之间,深度缓存其实只有位平面的概念. 这随API的不同,都需要指定后缓存深度缓存精度, Depth ,我一般使用24位,也就是D3D中常见的 D24S8. 但除非你是用浮点,否则都会有精度损失的问题,这种情况总是发生在2个几乎共面的片面,他们投影在后裁减平面时都会被赋予一个深度(当然,如果深度缓存可写的话),而上面已经说过,目前来说,深度只是位平面, 你可以把他假设为这样的形势<br><br>depth&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w<br>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [near_clip,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;near_clip&nbsp;+&nbsp;0.1]<br>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [near_clip&nbsp;+&nbsp;0.1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;near_clip&nbsp;+0.2]<br>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [near_clip&nbsp;+&nbsp;0.3&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;near_clip&nbsp;+0.4]<br>........<br>max&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [far_clip - 0.1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;far_clip]<br>上面假设硬件的最小深度单元 r = 0.1<br><br>那么将会出现这样的问题.<br>当2个片元距离近裁减平面 w&nbsp; 落在同一个区间的时候,他们的深度是相等的. 最终你所看到的结果,就是下面的这种样子:<br><img src="http://www.cnitblog.com/images/cnitblog_com/lethep/4967/o_Depth_Fighting01.jpg" border=0><br>注意到蓝色线框里面.<br><br><br>要解决这个问题, 你只要google 或者去 beyond3d,等论坛,搜索 depth fighting ,得到的答案往往就是设置深度偏移. OpenGL : Polygon offset. D3D: Depth Bais.<br>拿OpenGL 来说,就是对有存在深度冲突的2个 Mesh Object&nbsp; A,B如下方式渲染.<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.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">A.Render();<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>glEnable(GL_POLYGON_OFFSET_FILL);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>glPolygonOffset(</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>B.Render();<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>glDisable(GL_POLYGON_OFFSET_FILL);</span></div>
<br>这是一个不错的方法,但是实际操作起来很麻烦,而且没有效率. 注意到,你必须一先一后的渲染这2个对象, 拿上图来说,我需要在MAX 中把手套和手臂脱离,形成一个独立的节点,然后我起码需要新建立2个顶点缓存,并在渲染的过程中设置2次.这对于带宽是个不小的代价.所以我不是很赞成这样去处理,当然,有的时候无法避免了,也会如此..<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果避免发生Z-Fighting 才是关键. 注意到上面的depth - w 的位平面对应关系. 由于硬件都只能支持一定的深度格式,也就是说,Depth bits 是一定的,假为 D.而顶点的投影深度则毫无限制,他可以是 near_clip ---&gt; far_clip 的任意一个浮点数.因此<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dw/D<strong> = (far_clip - near_clip)/near_clip;<br></strong>&nbsp;&nbsp;&nbsp;&nbsp;<span>从上面可以看出, 要想dw 更精确,那么 near_clip 必然要更大(适用范围是far_clip &gt;&gt; near_clip).<br>上面那张存在depth-fighting 的截图当时的情况是 near_clip :0.0001 far_clip : 64000.0<br>下面的是在near_clip 0.1 far_clip 不变.<br><img src="http://www.cnitblog.com/images/cnitblog_com/lethep/4967/o_Depth_Fighting02.jpg" border=0><br><br>继续提高定点投影深度,也不会出现难看的深度冲突了.<br><img src="http://www.cnitblog.com/images/cnitblog_com/lethep/4967/o_Depth_Fighting03.jpg" border=0><br></span>
<img src ="http://www.cnitblog.com/lethep/aggbug/25570.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lethep/" target="_blank">大悟终空</a> 2007-04-11 13:36 <a href="http://www.cnitblog.com/lethep/articles/25570.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dynamic Cloud Simulation</title><link>http://www.cnitblog.com/lethep/articles/25499.html</link><dc:creator>大悟终空</dc:creator><author>大悟终空</author><pubDate>Mon, 09 Apr 2007 15:21:00 GMT</pubDate><guid>http://www.cnitblog.com/lethep/articles/25499.html</guid><wfw:comment>http://www.cnitblog.com/lethep/comments/25499.html</wfw:comment><comments>http://www.cnitblog.com/lethep/articles/25499.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnitblog.com/lethep/comments/commentRss/25499.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lethep/services/trackbacks/25499.html</trackback:ping><description><![CDATA[<p dir=ltr>昨天在公司谈及关于动态云的模拟问题,这个东西以前大学时曾做过,利用Ken Perlin noise 来生成,只是没有生成连续变化的效果.</p>
<p dir=ltr>今天在家花了一个下午的时间去实现, 有参考 Gpu Gems 1 上的 improve perlin noise 论文, 但是最后发现,5次方插值根本就不适用于云层的模拟,不过倒是非常适合大连续体积,比如heigh map 中山体,凹地等的模拟.对于云层,我必须设计一个 小体积,更加分散,并且能在临界区连续的 noise 算法. 而且也有必要使连续云层的轮廓稍微尖锐.<br><img style="WIDTH: 511px; HEIGHT: 357px" height=357 src="http://www.cnitblog.com/images/cnitblog_com/lethep/4967/o_Cloud_01.jpg" width=511 border=0></p>
<blockquote dir=ltr style="MARGIN-RIGHT: 0px">
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 时刻1 </p>
<p dir=ltr><img src="http://www.cnitblog.com/images/cnitblog_com/lethep/4967/o_Cloud_02.jpg" border=0><br><img src="http://www.cnitblog.com/images/cnitblog_com/lethep/4967/o_Cloud_03.jpg" border=0><br><img src="http://www.cnitblog.com/images/cnitblog_com/lethep/4967/o_Cloud_04.jpg" border=0></p>
<p dir=ltr>以上是同一次随机种子下连续4个不同时刻,云层的切片. <br><a href="http://www.cnitblog.com/Files/lethep/DynamicCloud.rar">&lt;download&nbsp; demo&gt; : 点击下载演示程序.</a><br><br>我的噪音函数.</p>
<p dir=ltr style="MARGIN-RIGHT: 0px">
<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.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;NoiseTable<br><img id=Codehighlighter1_19_287_Open_Image onclick="this.style.display='none'; Codehighlighter1_19_287_Open_Text.style.display='none'; Codehighlighter1_19_287_Closed_Image.style.display='inline'; Codehighlighter1_19_287_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_19_287_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_19_287_Closed_Text.style.display='none'; Codehighlighter1_19_287_Open_Image.style.display='inline'; Codehighlighter1_19_287_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_19_287_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.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_19_287_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;NoiseTable()&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;自动初始化</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_45_224_Open_Image onclick="this.style.display='none'; Codehighlighter1_45_224_Open_Text.style.display='none'; Codehighlighter1_45_224_Closed_Image.style.display='inline'; Codehighlighter1_45_224_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_45_224_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_45_224_Closed_Text.style.display='none'; Codehighlighter1_45_224_Open_Image.style.display='inline'; Codehighlighter1_45_224_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_45_224_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.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_45_224_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">&nbsp;)&nbsp;<br><img id=Codehighlighter1_79_127_Open_Image onclick="this.style.display='none'; Codehighlighter1_79_127_Open_Text.style.display='none'; Codehighlighter1_79_127_Closed_Image.style.display='inline'; Codehighlighter1_79_127_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_79_127_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_79_127_Closed_Text.style.display='none'; Codehighlighter1_79_127_Open_Image.style.display='inline'; Codehighlighter1_79_127_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_79_127_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.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_79_127_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;permutation[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;noise_rand.Get()&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">255</span><span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">&nbsp;;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_163_221_Open_Image onclick="this.style.display='none'; Codehighlighter1_163_221_Open_Text.style.display='none'; Codehighlighter1_163_221_Closed_Image.style.display='inline'; Codehighlighter1_163_221_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_163_221_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_163_221_Closed_Text.style.display='none'; Codehighlighter1_163_221_Open_Image.style.display='inline'; Codehighlighter1_163_221_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_163_221_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.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_163_221_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gradTable[</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;gradTable[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;permutation[i];&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;permutation[</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">];&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;散列</span><span style="COLOR: #008000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;gradTable[</span><span style="COLOR: #000000">512</span><span style="COLOR: #000000">];&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;斜率矢量表</span><span style="COLOR: #008000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>NoiseTable&nbsp;g_NoiseTable;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;inline&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;Curve_5(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;t)&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;5次方采样曲线</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_367_416_Open_Image onclick="this.style.display='none'; Codehighlighter1_367_416_Open_Text.style.display='none'; Codehighlighter1_367_416_Closed_Image.style.display='inline'; Codehighlighter1_367_416_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_367_416_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_367_416_Closed_Text.style.display='none'; Codehighlighter1_367_416_Open_Image.style.display='inline'; Codehighlighter1_367_416_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_367_416_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.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_367_416_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;t&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;t&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;t&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;(t&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;(t&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;inline&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;Curve_3(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;t)&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;立方采样曲线&nbsp;hermite&nbsp;</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_475_508_Open_Image onclick="this.style.display='none'; Codehighlighter1_475_508_Open_Text.style.display='none'; Codehighlighter1_475_508_Closed_Image.style.display='inline'; Codehighlighter1_475_508_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_475_508_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_475_508_Closed_Text.style.display='none'; Codehighlighter1_475_508_Open_Image.style.display='inline'; Codehighlighter1_475_508_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_475_508_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.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_475_508_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;t&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;t&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;t);&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;inline&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;Curve_sin(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;t)&nbsp;<br><img id=Codehighlighter1_550_568_Open_Image onclick="this.style.display='none'; Codehighlighter1_550_568_Open_Text.style.display='none'; Codehighlighter1_550_568_Closed_Image.style.display='inline'; Codehighlighter1_550_568_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_550_568_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_550_568_Closed_Text.style.display='none'; Codehighlighter1_550_568_Open_Image.style.display='inline'; Codehighlighter1_550_568_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_550_568_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.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_550_568_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">;&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;插值函数</span><span style="COLOR: #008000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">inline&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;Lerp(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;t,&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;b)&nbsp;<br><img id=Codehighlighter1_625_654_Open_Image onclick="this.style.display='none'; Codehighlighter1_625_654_Open_Text.style.display='none'; Codehighlighter1_625_654_Closed_Image.style.display='inline'; Codehighlighter1_625_654_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_625_654_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_625_654_Closed_Text.style.display='none'; Codehighlighter1_625_654_Open_Image.style.display='inline'; Codehighlighter1_625_654_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_625_654_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.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_625_654_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;t&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;(b&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;a);&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;_float3&nbsp;<br><img id=Codehighlighter1_681_713_Open_Image onclick="this.style.display='none'; Codehighlighter1_681_713_Open_Text.style.display='none'; Codehighlighter1_681_713_Closed_Image.style.display='inline'; Codehighlighter1_681_713_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_681_713_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_681_713_Closed_Text.style.display='none'; Codehighlighter1_681_713_Open_Image.style.display='inline'; Codehighlighter1_681_713_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_681_713_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.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_681_713_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;r;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;s;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;t;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">float3;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;_float4&nbsp;<br><img id=Codehighlighter1_747_789_Open_Image onclick="this.style.display='none'; Codehighlighter1_747_789_Open_Text.style.display='none'; Codehighlighter1_747_789_Closed_Image.style.display='inline'; Codehighlighter1_747_789_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_747_789_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_747_789_Closed_Text.style.display='none'; Codehighlighter1_747_789_Open_Image.style.display='inline'; Codehighlighter1_747_789_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_747_789_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.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_747_789_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;x;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;y;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;z;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;w;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">float4;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>inline&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;Grad(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;c)&nbsp;<br><img id=Codehighlighter1_828_1048_Open_Image onclick="this.style.display='none'; Codehighlighter1_828_1048_Open_Text.style.display='none'; Codehighlighter1_828_1048_Closed_Image.style.display='inline'; Codehighlighter1_828_1048_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_828_1048_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_828_1048_Closed_Text.style.display='none'; Codehighlighter1_828_1048_Open_Image.style.display='inline'; Codehighlighter1_828_1048_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_828_1048_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.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_828_1048_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Y;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;X;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;c2;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;X&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;floor(c);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;c2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;c&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;X;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;X&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">(c)&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">255</span><span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;X</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(Y</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">255</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_948_960_Open_Image onclick="this.style.display='none'; Codehighlighter1_948_960_Open_Text.style.display='none'; Codehighlighter1_948_960_Closed_Image.style.display='inline'; Codehighlighter1_948_960_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_948_960_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_948_960_Closed_Text.style.display='none'; Codehighlighter1_948_960_Open_Image.style.display='inline'; Codehighlighter1_948_960_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_948_960_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.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_948_960_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(Lerp(c2,g_NoiseTable.permutation[X],g_NoiseTable.permutation[Y]));</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">1/256.0f</span><span style="COLOR: #008000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_1093_1105_Open_Image onclick="this.style.display='none'; Codehighlighter1_1093_1105_Open_Text.style.display='none'; Codehighlighter1_1093_1105_Closed_Image.style.display='inline'; Codehighlighter1_1093_1105_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1093_1105_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1093_1105_Closed_Text.style.display='none'; Codehighlighter1_1093_1105_Open_Image.style.display='inline'; Codehighlighter1_1093_1105_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;NoiseCloud(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;x,&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;y,&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;z</span><span id=Codehighlighter1_1093_1105_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">/**/</span><span id=Codehighlighter1_1093_1105_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">,&nbsp;float&nbsp;w</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1108_2464_Open_Image onclick="this.style.display='none'; Codehighlighter1_1108_2464_Open_Text.style.display='none'; Codehighlighter1_1108_2464_Closed_Image.style.display='inline'; Codehighlighter1_1108_2464_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1108_2464_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1108_2464_Closed_Text.style.display='none'; Codehighlighter1_1108_2464_Open_Image.style.display='inline'; Codehighlighter1_1108_2464_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1108_2464_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.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1108_2464_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pTable&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;g_NoiseTable.gradTable;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;float3&nbsp;texCoord1;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;float3&nbsp;texCoord2;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;texCoord1.r&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;floor(x);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;texCoord1.s&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;floor(y);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;texCoord1.t&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;floor(z);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">&nbsp;texCoord1.r;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">&nbsp;texCoord1.s;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;z&nbsp;</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">&nbsp;texCoord1.t;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;next&nbsp;texel.</span><span style="COLOR: #008000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;texCoord2.r&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;texCoord1.r</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;texCoord2.s&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;texCoord1.s</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;texCoord2.t&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;texCoord1.t</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1.0f</span><span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;float4&nbsp;Texel1;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;float4&nbsp;Texel2;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Texel1.x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Grad(Grad(Grad(texCoord1.r)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord1.s)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord1.t);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Texel2.x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Grad(Grad(Grad(texCoord2.r)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord1.s)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord1.t);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Texel1.y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Grad(Grad(Grad(texCoord1.r)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord2.s)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord1.t);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Texel2.y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Grad(Grad(Grad(texCoord2.r)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord2.s)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord1.t);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Texel1.z&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Grad(Grad(Grad(texCoord1.r)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord1.s)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord2.t);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Texel2.z&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Grad(Grad(Grad(texCoord2.r)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord1.s)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord2.t);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Texel1.w&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Grad(Grad(Grad(texCoord1.r)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord2.s)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord2.t);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Texel2.w&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Grad(Grad(Grad(texCoord2.r)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord2.s)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">texCoord2.t);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;u;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;v;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;w;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Curve_3(x);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Curve_3(y);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;w&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Curve_3(z);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;x</span><span style="COLOR: #008000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Texel1.x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Lerp(u,Texel1.x,Texel2.x);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Texel1.y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Lerp(u,Texel1.y,Texel2.y);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Texel1.z&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Lerp(u,Texel1.z,Texel2.z);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Texel1.w&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Lerp(u,Texel1.w,Texel2.w);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;y</span><span style="COLOR: #008000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Texel2.x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Lerp(v,Texel1.x,Texel1.y);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Texel2.y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Lerp(v,Texel1.z,Texel1.w);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;z</span><span style="COLOR: #008000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;Lerp(w,Texel2.x,Texel2.y);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<p>&#160;</p>
<p dir=ltr><br>将来的工作:<br>1, 采用多线程,产生一个独立线程进行噪音计算, </p>
<p dir=ltr style="MARGIN-RIGHT: 0px">2.使用程序纹理,利用GPU来计算.(Pixel Shader 可能会有很多条指令,导致低端硬件无法运行)&nbsp;</p>
</blockquote>
<img src ="http://www.cnitblog.com/lethep/aggbug/25499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lethep/" target="_blank">大悟终空</a> 2007-04-09 23:21 <a href="http://www.cnitblog.com/lethep/articles/25499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>