<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Liming's blog</title><link>http://blogs.msdn.com/liming/default.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>First impression on WPF+Pixel Shader</title><link>http://blogs.msdn.com/liming/archive/2008/10/17/first-impression-on-wpf-pixel-shader.aspx</link><pubDate>Fri, 17 Oct 2008 16:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9003024</guid><dc:creator>limingh</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/liming/comments/9003024.aspx</comments><wfw:commentRss>http://blogs.msdn.com/liming/commentrss.aspx?PostID=9003024</wfw:commentRss><description>&lt;P&gt;Several weeks ago I was excided to learn that WPF&amp;nbsp;now (in .Net framework 3.5 SP1) supports pixel shader. There is a &lt;A class="" href="http://channel9.msdn.com/shows/Continuum/PixelShaderParts/" mce_href="http://channel9.msdn.com/shows/Continuum/PixelShaderParts/"&gt;video on Channel9&lt;/A&gt;&amp;nbsp;about this stuff.&lt;/P&gt;
&lt;P&gt;Thanks to&amp;nbsp;Niola's guide, it is very easy to&amp;nbsp;use HLSL to write pixel shader for WPF.&amp;nbsp;Here is a simple pattern that I wrote&amp;nbsp;in HLSL and now it is my screen saver.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 269px; HEIGHT: 217px" height=364 alt="" src="http://byfiles.storage.live.com/y1pSrJDI5SEESdzhIjrgEXMrhWzoeTlnNx7g7_cK27rIlpJPqOyT69s-sk1DIl6zo7H" width=392 border=0&gt;&lt;/P&gt;
&lt;P&gt;The math is very simple. The phase is the delta distance&amp;nbsp;between the&amp;nbsp;pixel on the scene and two nearby points behind the scene.&lt;/P&gt;
&lt;P mce_keep="true"&gt;
&lt;TABLE class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt" cellSpacing=0 cellPadding=0 border=1 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" vAlign=top width=568&gt;
&lt;P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;sampler2D input : register(s0); &lt;BR&gt;float2 size : register(c0); //size of the screen, in pixel&lt;BR&gt;float3 location:register(c1);//relative location of p2, controlled by WPF animation&lt;BR&gt;#define Pi 3.1415926 &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;float4 main(float2 uv : TEXCOORD) : COLOR &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;float3 p1={0.5,0.5,2};&lt;BR&gt;&amp;nbsp;float3 p2=p1+location;&lt;BR&gt;&amp;nbsp;float3 current={lerp(0.5,uv[0],size.x/size.y),uv[1],0};&lt;BR&gt;&amp;nbsp;float delta=(distance(p1,current)-distance(p2,current))/0.005;&lt;BR&gt;&amp;nbsp;float4 result0= tex2D(input, uv.xy);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;float interfere=((1-cos(2*delta))/2+1)/2;&lt;BR&gt;&amp;nbsp;result0*=interfere;&lt;BR&gt;&amp;nbsp;result0.a=1;&lt;BR&gt;&amp;nbsp;return result0;&lt;BR&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;Here is the same pattern that I wrote in DOS's era.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://byfiles.storage.live.com/y1pqysf1Jas_0IM8GeDr-crE3HkUsG_1eZEDj_BVsuoCZ9sIcvfZtlrEvNmTUXinyqM" border=0&gt;&lt;/P&gt;
&lt;P&gt;How time flies...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9003024" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/liming/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/liming/archive/tags/HLSL/default.aspx">HLSL</category><category domain="http://blogs.msdn.com/liming/archive/tags/Pixel+Shader/default.aspx">Pixel Shader</category></item></channel></rss>