テクスチャに半透明ポリゴンを描画すると透ける??
DirectX9で不透明なテクスチャに半透明ポリゴンを描画すると、ポリゴンを描画した部分が透けてしまうのはなぜですか?
1.「D3DUSAGE_RENDERTARGET」指定したテクスチャを作成して白でクリア
2.そのテクスチャに半透明の青いポリゴンをDrawPrimitiveUPで描画
3.そのテクスチャをD3DXSaveTextureToFileでPNG等で保存
とした場合、私のイメージでは白地に薄い青の四角が描かれた不透明な画像ファイルができると思ったんですが、青の部分が半透明になりました。
なぜ不透明なテクスチャに半透明ポリゴンを描くと半透明になるのでしょうか・・・?
――――――――――――――――――――――――――――――――――――
//レンダリング用テクスチャの準備
{
global.pDevice->CreateTexture( 512, 512, 1, D3DUSAGE_RENDERTARGET,
D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pTarget, NULL);
pTarget->GetSurfaceLevel(0, &pSurface);
global.pDevice->GetRenderTarget(0, &pBackBuffer); //バックバッファの取得
global.pDevice->SetRenderTarget(0, pSurface); //ターゲットの切り替え
//白(不透明)にクリア
global.pDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
D3DCOLOR_ARGB(255, 255, 255, 255), 1.0f, 0 );
}
//テクスチャに半透明ポリゴンを描画
{
VERTEX point[4] ={
D3DXVECTOR3(100, 200, 1), 1.0f, D3DCOLOR_ARGB(128, 0, 0, 255),
D3DXVECTOR3(100, 100, 0), 1.0f, D3DCOLOR_ARGB(128, 0, 0, 255),
D3DXVECTOR3(200, 200, 0), 1.0f, D3DCOLOR_ARGB(128, 0, 0, 255),
D3DXVECTOR3(200, 100, 0), 1.0f, D3DCOLOR_ARGB(128, 0, 0, 255)
};
global.pDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);
global.pDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, point, sizeof(VERTEX));
global.pDevice->SetRenderTarget(0, pBackBuffer); //レンダリングターゲット戻す
}
//テクスチャを保存
{
D3DXSaveTextureToFile("d:\\hoge.png", D3DXIFF_PNG, pTarget, NULL);
}
――――――――――――――――――――――――――――――――
D3DTSS_ALPHAOPをADDにしてみたりしたのですが、変化がありません。
テクスチャが透ける理屈と、こうならないようにする手段(アルファ値は加算したい)を教えてもらえると助かります。
お礼
この方法を実現させるにはポリゴン何百枚も貼んなきゃいけないんですか! ケチな自分には手の出しにくい手法です^^;