ページ 11

DirectX9でスプライトを加算合成する方法

Posted: 2014年7月19日(土) 07:20
by skers
DirectX9で、スプライトを加算合成をしたいのですが、うまくできません。
調べたところ、

pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);

pDevice->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD);

pDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);

pDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);

この4行をスプライトをDrawする前に書いておけばいいと出てきたので、pSprite->Drawをする直前に書いてみましたが、ダメでした。
pSprite->Beginの前なども試してみたけどいずれも効果なしです。

加算合成のやり方を教えてください、お願いします。

Re: DirectX9でスプライトを加算合成する方法

Posted: 2014年7月19日(土) 08:10
by 海Sea
お手数ですが、
現状のソースコードを記載してもらえますでしょうか。
もしかしたら、他にできない原因が存在する可能性もあるので。

Re: DirectX9でスプライトを加算合成する方法

Posted: 2014年7月20日(日) 08:21
by skers
void DrawSprite(GRAPH_C G,float X,float Y)
{
RECT rect={G.X1,G.Y1,G.X2,G.Y2};

D3DXVECTOR3 v3Center(G.CenterX,G.CenterY,0);
D3DXVECTOR3 v3Position(X,Y,0);
pSprite->Begin(D3DXSPRITE_ALPHABLEND);
pSprite->Draw(GraphicLec[G.G_Num],&rect,&v3Center,&v3Position,D3DCOLOR_ARGB(255,255,255,255));//テクスチャのポインタ、領域の短形のポインタ、中心、位置、アルファ値と色
pSprite->End();
}

これが描画する関数です。ここのDrawの前に先ほどのプログラムを入れてみましたが、ダメだったということです。
何か分かりましたら、よろしくお願いします。

Re: DirectX9でスプライトを加算合成する方法

Posted: 2014年7月21日(月) 14:22
by skers
加算合成のプログラム自体には間違いはないということですか?

Re: DirectX9でスプライトを加算合成する方法

Posted: 2014年7月21日(月) 18:33
by 旅路のきのこ
同じようなところで悩んだことがあります。

バージョンが変わったときに仕様も変わってできなくなったのかもしれない、と思うことにしました。
(DXライブラリではどのように実装しているんでしょう?)
その代わりに、DrawPrimitiveUPを使って板ポリを描くことにしました。
これでスプライトの代わりにはなるので、スプライトは諦めることにしました。
根本的な解決策にはならないかもしれませんが、参考になればと思います。