2

DirectX 9 では g_d3dDevice->SetRenderState( D3DRS_SHADEMODE , D3DSHADE_FLAT); です。dx11のAPIはどうですか

ありがとう

////////更新1///////

頂点/ピクセルシャーダーとライトはまったく効果がありません。例えば。赤、緑、青の 3 つのベクテックス。FLAT モードを開くと、すべての三角形が最初の色で塗りつぶされます。SMOOTH モードの場合は、グーロー シェーディングを使用してカラフルな三角形が得られます。

頂点シャーダーでは、頂点の色を取得しました。

ピクセルシャーダーでは、ピクセルの色を取得しましたが、既に補間されています。

ライトなし、通常の情報なし、2D プログラムです。

三角形を同じ色で塗りつぶす方法は求めません。FLAT SHADEMODEを使用する方法しか見つけられません。

////////更新2///////

struct VertexShaderInput
{
    float2 pos : POSITION;
    float4 color : COLOR0;
};

struct VertexShaderOutput
{
    float4 pos : SV_POSITION;
    nointerpolation float4 color : COLOR0;
};

しかし、グーロー シェーディングも使用しています。

////////更新3///////

トピックを見つけました

http://www.gamedev.net/topic/621313-directx11-and-smooth-shading 作者は「Blender でスムーズ シェーディングを有効にしなかった」と言ったが、Blender でキーワードが見つからない

4

2 に答える 2

3

頂点データにnointerpolation修飾子を使用することでそれを行うことができます。

struct VS_OUTPUT_AND_PS_INPUT
{
    float4 f4Position : SV_POSITION;    
    nointerpolation float3 f3WorldNormal : NORMAL;
};

興味深い結果を得るために、任意の頂点データでnointerpolationを使用することもできます。

于 2013-04-15T04:50:54.110 に答える
0

私が間違っていなければ、あなたが求めているのは固定機能パイプラインです。DirectX 11 では、イミディエイト モード レンダリング、固定関数パイプラインのすべてが完全に窓の外に放り出されました (古いバージョンの OpenGL と非常に古いバージョンの DirectX ではまだ入手できますが、ピカピカの新しい DirectX 11 が必要です)。現在の描画方法は、HLSL シェーダーを作成ID3D11Buffer*し、関連する APIを介して Vertex Buffers に格納することです。DrawIndexed次に、デバイス コンテキストまたはDraw関数を呼び出します。

これは、以前の OpenGL と以前の DirectX の固定パイプラインとハード ステート マシンからの非常に大きな変更です。

このチュートリアルに従うと役立つ場合があります。C++ 11 を理解していれば、std::unique_ptr.

編集: 固定関数パイプラインについて言及した理由は、SHADEMODE が GPU 上の固定関数パイプラインによって実行される照明計算用であったためです。ものを描画する独自の HLSL シェーダーを作成しているため、"Shade Mode" を設定することはできません。むしろ、独自の HLSL シェーダーを記述して、独自のシェーディング モードを定義します。あなたがまだ DX11 での固定関数パイプライン プログラミングについて考えているかどうかわからなかったので、この回答で可能な限り包括的になるようにしました。

短いバージョン: 存在しません。気にしないでください。Flat/Smooth シェーディングは、光と物理の法則に従う独自のシェーダーを作成することで実現できます。その多くは以前に行われ、使用のために簡略化および説明されています。幸運を!

于 2013-04-14T18:28:51.907 に答える