差分

ナビゲーションに移動 検索に移動

シェーダー

1,933 バイト追加, 2013年9月29日 (日) 09:33
とりあえず作成
'''シェーダー'''とは、画像を描画時に加工する機能である。

==[[DXライブラリ]]のシェーダー==
DXライブラリにおいては、シェーダーを[[C言語]]っぽい言語で書き、付属のツールで[[コンパイル]]することができる。

===頂点シェーダー===
未稿
===ピクセルシェーダー===
バイナリの主な[[拡張子]]は".pso"すなわち「[[ファンタジースターオンライン|ぷそ]]」である。

[[テクスチャ]]([[プログラム]]で指定した画像)上の位置(左上を(0.0,0.0)、右下を(1.0,1.0)とする)などのパラメータが渡され、
その位置に書き込みたい色のデータを返す。
色のデータは、RGBAの各要素をそれぞれ0.0~1.0の実数で表す形式で入出力する。

例:[[グレースケール]]化
<pre>//おまじない
struct PS_INPUT {
float4 DiffuseColor : COLOR0;
float4 SpecularColor : COLOR1;
float2 TextureCoord0 : TEXCOORD0;
float2 TextureCoord1 : TEXCOORD1;
};

struct PS_OUTPUT {
float4 Output : COLOR0;
};

sampler DiffuseMapTexture : register(s0);

//メインのプログラムを書く
PS_OUTPUT main(PS_INPUT PSInput) {
PS_OUTPUT PSOutput;
float4 nowColor;

//指定された場所のテクスチャの色を取得するおまじない
nowColor=tex2D(DiffuseMapTexture,PSInput.TextureCoord0);
//グレースケールにする計算
PSOutput.Output.r=0.298912f*nowColor.r+0.586611f*nowColor.g+0.114478f*nowColor.b;
PSOutput.Output.g=PSOutput.Output.r;
PSOutput.Output.b=PSOutput.Output.r;
PSOutput.Output.a=nowColor.a;
//計算結果を返す
return PSOutput;
}</pre>

一応[[行列]]の積などの計算もできそうだが、普通に計算したほうが速いし正確。

==[[DirectX]]のシェーダー==
未稿

==[[Unity]]のシェーダー==
未稿

==[[OpenGL]]のシェーダー==
未稿

==関連項目==
* [[画像処理]]

{{stub}}
匿名利用者

案内メニュー