1

固定関数パイプラインを使用してDirectX9C ++アプリケーションを作成していますが、各頂点に事前に計算された照明が与えられています(法線などに関係なく)これを最終的な画像に適用するにはどうすればよいですか?

現在、テクスチャプリミティブを使用しており、全体として(グラデーションを使用するのではなく、プリミティブ全体で)色を変更しようとしています。ライトの数とアプリケーションが設計されているため、ライティングを事前に計算する必要があります。ローエンドのマシンでも適切なフレームレートを取得します。(つまり、ライトごとに1つのパスが多すぎます)

私の頂点構造体は次のようになります

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

基本的に、それにライティング値を追加し、頂点ごとの固定関数パイプラインを使用して(実際の「ライト」を使用せずに)適用したいと思います。

どんな助けでも大歓迎です...

4

1 に答える 1

0

この分野の他のほとんどの人と同じようにシェーダーを使用しているため、固定機能パイプラインを使用しなくなりました。詳細を忘れてしまったため、完全ですぐに使用できる回答を提供することはできませんが、これがきっかけになることを願っています。 :

頂点ごとのカラー ステート (Direct3D 9)

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

D3DFVF_XYZ|D3DFVF_TEX1|D3DFVF_DIFFUSE

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

m_pDevice9->SetRenderState(D3DRS_COLORVERTEX, TRUE);

m_pDevice9->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1);

照明を使用したくない場合、1 つのオプションは、ディフューズ コンポーネントが黒でアンビエント コンポーネントが白の単一のディレクショナル ライトを使用することです。このようにして、照明は完全にフラットになり、マテリアルの色のみが使用されます。

とはいえ、固定関数のレンダリングについて本当に気にする必要がありますか? シェーダーを使用すると、これを実装するのは非常に簡単で、その方法についてアドバイスをくれる人がたくさんいます。

于 2011-03-09T14:03:27.410 に答える