2

DirectX 9 の Fixed Function レンダリング パイプラインを使用すると、次のようにしてテクスチャを設定し、頂点をレンダリングするのは非常に簡単です。

struct vert { float x, y, z, u, v; };

device->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1);
device->SetTexture(0, MyTexture);

//Draw vertices here

ただし、各頂点に追加の float 値を追加したいと思います。これは、テクスチャからの結果のカラー出力で乗算されます。(したがって、値は 0 から 1 の間になります)

EG (疑似コード)Colour = TextureColour(u, v) * CustomFloat

を使用する方法があると思いますが、その方法device->SetTextureStageStateがわかりません...誰か助けてくれますか?

4

2 に答える 2

2

1D リニア グレースケール テクスチャを 2 番目のテクスチャとして設定し、最初のテクスチャを変調するように構成できます。次に、2 番目のテクスチャの単一のテクスチャ座標を送信します (D3DFVF_TEXCOORDSIZE1 を指定することによって)。ここで推測します-自分で試したことはありません。

擬似コードを言い換えると、次のようになります。Colour = Texture0Colour(u0, v0) * Texture1Colour(u1)

編集する必要があると思います:

device->SetFVF(D3DFVF_XYZ | D3DFVF_TEX2 | D3DFVF_TEXCOORDSIZE2(0) | D3DFVF_TEXCOORDSIZE1(1)) 

MSDN にも同様の例があります。

于 2011-03-09T16:15:36.460 に答える
0

Per-Vertex Color State (Direct3D 9)を参考にしてください。

次のように FVF を使用する必要があります。

D3DFVF_XYZ|D3DFVF_TEX1|D3DFVF_DIFFUSE

頂点カラーの使用を有効にするには、次のようにします。

m_pDevice9->SetRenderState(D3DRS_COLORVERTEX, TRUE);

m_pDevice9->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1);

これは別のリンクで、テクスチャ コンバイナーの設定方法の詳細を示しています。この例ではアルファ合成を使用していますが、代わりにカラー コンバイナーを使用するように変更するのは簡単です。

于 2011-03-09T13:55:08.867 に答える