最近、HLSLを使ってPixel Shaderを使ったプログラムを書けるようになってきました。
次のコードは波紋みたいな効果を描画するプログラムです。
PS_OUTPUT RenderMoirePS( VS_OUTPUT In ) {
PS_OUTPUT Out;
float2 t = In.tCurr - 0.5;
float r = sqrt( t.x * t.x + t.y * t.y );
float s = FREQ * 2.0 * 3.14159 * (r - g_alpha) * 1.41421;
float w = cos( s );
float r2 = r + g_factor * w / (1.41421 * FREQ * 2.0 * 3.14159);
float z = 2.0 * (LY * w * t.y / r + LZ) / sqrt( 1 + w * w) - LZ;
t *= r2 / r;
Out.RGBColor = tex2D( SourceSamplerTemp, t + 0.5 );
Out.RGBColor.xyz = saturate( Out.RGBColor.xyz * (1.0 + 0.15 * g_factor * z) );
Out.RGBColor.w = 1.0;
return Out;
}
計算式は適当ですが、一応波紋っぽく見えるからとりあえずいいでしょう(^^;
Mobility Radeon X1600を搭載したMacBook Pro上のWindows Vistaで動かすととても滑らかに描画します。
1フレームの中の1ピクセルごとに上のような計算を行っているのですから、
現在のGPUってすごいんだなあと今更思いました。(^^;;;
いつまでもEfficeon搭載のモバイルノートPCでソフト開発していたら時代遅れになってしまいそうです。
.NET Frameworkも重いのでなかなか使う気になれませんでしたし。
DLRってどういうものなんでしょうね。とても興味があります。
.NET Framework上でActiveX Scriptingのような仕組みができるといいんですが...