0

私はDirectXで望ましいアルファブレンディング結果を達成することを非常に切望しています。私はテクスチャを描画しようとしています、そしてその上にカラー三角ストリップ。

私のすべての試みにもかかわらず、ストリップの色は前に描いたテクスチャの色に影響されているようです。D3DRS_ALPHABLENDENABLEをFALSEに設定しても、影響を受ける色が表示されます。

画像は次のようになります(openGLでレンダリング)

ここに画像の説明を入力してください

そして、これがdirectXレンダリングで得られるものです:

ここに画像の説明を入力してください

ご覧のとおり、2番目の画像の紫色の帯は特別な理由なしに黄色の色合いになっています:((黄色の長方形はテクスチャであり、ポリゴンではありません)。

エンジンの初期化で使用する設定は次のとおりです。

m_pDirect3D_Device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
m_pDirect3D_Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
m_pDirect3D_Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_BLENDDIFFUSEALPHA);
m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);

これらの設定は、テクスチャの正しいアルファブレンディングを可能にした唯一の設定ですが、ポリゴンの正しいブレンディングを実現することはできません。ヘルプはありますか?

4

2 に答える 2

1

私は最終的にそれを理解しました。アルファブレンディングに加えて、カラーブレンディングがあります。したがって、DirectXは、最後のテクスチャの色を最後のプリミティブとマージします。それを解決するには、次のように設定する必要があります。

m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTSS_COLORARG1);
m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);

プリミティブを描画する前に-プリミティブ(拡散)からのみ色を取得することを意味し、次のようになります。

m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTSS_COLORARG1);
m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);

テクスチャを描画する前に-つまり、テクスチャの色のみを使用します。

于 2013-02-27T10:58:49.283 に答える
0

古いトピックですが、便利なトピックです。

混乱を避けるために、細部に気づきました。パラメータは(とにかく同じ値なので、大したことではありません!)の代わりにSetTextureStageStateすべきだと思います。D3DTOP_SELECTARG1D3DTSS_COLORARG1

于 2015-09-14T12:13:49.327 に答える