使えそうな手法を検索し、ぴくせるしぇーだに初めて手をつけました。
紆余曲折があってなんとかグレースケール化はできたのですが、それから透過処理ができたらいいなと思うようになりました。
やりたいことを具体的に述べると、フルカラーの描写画面の上にそれをグレースケール化した画像を配置し、その画像を少しずつα値をあげて薄くしていくことで、
モノクロ画像からカラー画像へ変わっていくように見せることです。
下記に、その画像の表示部分をつかさどる関数の一部と、ぴくせるしぇーだの設定ファイル?について示しておきます。
現在透過処理ができていません。何が違うのかもちょっと不明です。
申し訳ありませんが、道を示して頂けませんか?
/* 画像表示用関数の一部 */
// 使用するテクスチャをセット
SetUseTextureToShader(0, Screen);
// 使用するピクセルシェーダをセット
SetUsePixelShader(Shader.Gray);
/*-- 正直ここからよくわかっていません。分かるのはpsoファイルの方に何かを送ろうとしていることだけ。行き当たりばったりな実装です --*/
int cindex = GetConstIndexToShader("Alpha", Shader.Gray);
INT4 alpha= {Game.Frame-745, Game.Frame-745, Game.Frame-745, Game.Frame-745}; // 理想的なα値はgame.Frame-745(game.Frame-745>0の時)です。
SetPSConstI(cindex, alpha);
/*-- ここまで --*/
// 描画
//SetDrawBlendMode(DX_BLENDMODE_ALPHA,Game.Frame-745); // これでブレンドできたら嬉しいのになぁ
DrawPrimitive2DToShader( Vert, 6, DX_PRIMTYPE_TRIANGLELIST );
//SetDrawBlendMode(DX_BLENDMODE_NOBLEND,0);
/* fxファイル */
struct PS_INPUT {
float4 Diffuse : COLOR0 ;
float4 Specular : COLOR1 ;
float2 TexCoords0 : TEXCOORD0 ;
float2 TexCoords1 : TEXCOORD1 ;
} ;
struct PS_OUTPUT{
float4 Output : COLOR0 ;
} ;
sampler sampler0 : register( s0 ) ;
int4 Alpha;
PS_OUTPUT main( PS_INPUT psin ){
PS_OUTPUT psout ;
float4 texc ;
float ave;
texc = tex2D( sampler0, psin.TexCoords0 ) ;
ave=(texc.b+texc.g+texc.r)/3;
psout.Output.r = ave ;
psout.Output.g = ave ;
psout.Output.b = ave ;
if(Alpha.a>0) psout.Output.a = Alpha.a ;
else psout.Output.a = texc.a ;
return psout ;
}