ども。お久しぶりです。
近況を話します。
現在、学校が春休みに入り、のんびり休日ライフを満喫中です。
ということで、コーディングしてます。
はい。休日でもコーディングしてます。
最近。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 件のコメント:
コメントを投稿