2009/03/02

HLSLってなんだ!

ども。お久しぶりです。

近況を話します。
現在、学校が春休みに入り、のんびり休日ライフを満喫中です。

ということで、コーディングしてます。
はい。休日でもコーディングしてます。
最近。XNAでゲームを作っていまして、まあ、3Dとか無理なんで、2Dなんですけど。
そこで、GPU側のプログラムができるということにたどり着いて。
Programmable Shaderとかがあるらしいです。
現在、それを記述する言語である、HLSL(High Level Shader Language)をチョコチョコと勉強中です。

さて、このHLSLなんですが。

正直言ってよくわからない。

です。

昔は、アセンブリで書かなくてはならなかったので、それに比べればましなんでしょうが。
3Dの基礎がないですからね。その辺はさっぱりです。UV座標とか、フォグとか、法線ベクトルとか、よくわかりません。

それでも、ピクセルシェーダーぐらいは何とかわかりそうな気がするので、それをいじっています。
どうやら、あるピクセルを描画される情報を与えられ、入力された情報からそのピクセルの色を決める。
みたいなことをするのが、ピクセルシェーダーみたいです。

まあ、これ打っている間にいろいろ調べるんだがな、だんだんわからなくなっていくんだ。

さあ、気を取り直して。とりあえず、指定した色を透過させるプログラムを書いてみたよ。


uniform extern texture ScreenTexture;

sampler ScreenS = sampler_state
{
Texture = <ScreenTexture>;
};

float3 mask;

float4 PixelShaderFunction(float2 texCoord : TEXCOORD) : COLOR
{
float4 color = tex2D(ScreenS, texCoord);
if(any(color.rgb - mask)) return color;
else return float4(1.0, 0, 0, 0);
}

technique
{
pass p0
{
PixelShader = compile ps_2_0 PixelShaderFunction();
}
}


解説とか、勘弁してくれよ。



any(x)は、xのいずれかの要素が、0以外なら真が返ってくる関数らしい。

もちろんmaskには、指定された色が入っている。



よくわからないけど、うん。勉強するよ。

・・・本でも買ってこようか・・・。

0 件のコメント: