【DirectXプログラミング】加算合成について
Posted: 2010年6月30日(水) 23:12
いつもお世話になります。
DirectXプログラミングでの、加算合成について質問があります。
ある画像を明るくするために、下記のような関数を作りました。
下記の関数の中のDrawPrimitiveの呼び出し回数を増やせば増やすほど、画像が明るくなっていったのですが、
加算合成の方法として、これは正しい方法なのでしょうか?
void Draw()
{
LPVOID lpvwrite;
VERTEX Triangle[4]={
{200.0f,0.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,0,200,200),1.0f,0.0f},
{200.0f,200.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,0,200,200),1.0f,1.0f},
{0.0f,0.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,200,0,200),0.0f,0.0f},
{0.0f,200.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,0,200,200),0.0f,1.0f}
};
lpd3dvb9->Lock(NULL,sizeof(VERTEX)*4,&lpvwrite,0);
memcpy(lpvwrite,Triangle,sizeof(VERTEX)*4);
lpd3dvb9->Unlock();
lpd3dv9->SetStreamSource(0,lpd3dvb9,0,sizeof(VERTEX));
lpd3dv9->SetTexture(0,lpd3dtex9);
lpd3dv9->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
lpd3dv9->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
lpd3dv9->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
lpd3dv9->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1);
lpd3dv9->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
lpd3dv9->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_ONE);
lpd3dv9->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ONE);
lpd3dv9->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);//これを増やす
lpd3dv9->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);//これを増やす
}
また、別の質問なのですが、
透明度の設定を↓のようにした場合、テクスチャの透明度が設定されると思いますが、
この透明度の「値」はどこで設定するものなのでしょうか?
(画像を段々消えていくようにしたいと思っています。)
lpd3dv9->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
lpd3dv9->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1);
DirectXプログラミングでの、加算合成について質問があります。
ある画像を明るくするために、下記のような関数を作りました。
下記の関数の中のDrawPrimitiveの呼び出し回数を増やせば増やすほど、画像が明るくなっていったのですが、
加算合成の方法として、これは正しい方法なのでしょうか?
void Draw()
{
LPVOID lpvwrite;
VERTEX Triangle[4]={
{200.0f,0.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,0,200,200),1.0f,0.0f},
{200.0f,200.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,0,200,200),1.0f,1.0f},
{0.0f,0.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,200,0,200),0.0f,0.0f},
{0.0f,200.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,0,200,200),0.0f,1.0f}
};
lpd3dvb9->Lock(NULL,sizeof(VERTEX)*4,&lpvwrite,0);
memcpy(lpvwrite,Triangle,sizeof(VERTEX)*4);
lpd3dvb9->Unlock();
lpd3dv9->SetStreamSource(0,lpd3dvb9,0,sizeof(VERTEX));
lpd3dv9->SetTexture(0,lpd3dtex9);
lpd3dv9->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
lpd3dv9->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
lpd3dv9->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
lpd3dv9->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1);
lpd3dv9->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
lpd3dv9->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_ONE);
lpd3dv9->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ONE);
lpd3dv9->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);//これを増やす
lpd3dv9->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);//これを増やす
}
また、別の質問なのですが、
透明度の設定を↓のようにした場合、テクスチャの透明度が設定されると思いますが、
この透明度の「値」はどこで設定するものなのでしょうか?
(画像を段々消えていくようにしたいと思っています。)
lpd3dv9->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
lpd3dv9->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1);