Platform SDK: DirectX |
D3DRENDERSTATETYPE 列挙型は、IDirect3DDevice7::SetRenderState および IDirect3DDevice7::GetRenderState メソッドによって設定および取得されるレンダリング ステートを定義する。
typedef enum _D3DRENDERSTATETYPE { D3DRENDERSTATE_ANTIALIAS = 2, // アンチエイリアシング モード。 D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4, // パースペクティブ補正。 D3DRENDERSTATE_ZENABLE = 7, // Z テストを有効にする。 D3DRENDERSTATE_FILLMODE = 8, // 塗りつぶしモード。 D3DRENDERSTATE_SHADEMODE = 9, // シェーディング モード。 D3DRENDERSTATE_LINEPATTERN = 10, // 直線パターン。 D3DRENDERSTATE_ZWRITEENABLE = 14, // Z 書き込みを有効にする。 D3DRENDERSTATE_ALPHATESTENABLE = 15, // アルファ テストを有効にする。 D3DRENDERSTATE_LASTPIXEL = 16, // 最後のピクセルを直線で描く。 D3DRENDERSTATE_SRCBLEND = 19, // ソースのブレンディング係数。 D3DRENDERSTATE_DESTBLEND = 20, // デスティネーションのブレンディング係数。 D3DRENDERSTATE_CULLMODE = 22, // 背面カリング モード。 D3DRENDERSTATE_ZFUNC = 23, // Z 比較機能。 D3DRENDERSTATE_ALPHAREF = 24, // 参照アルファ値。 D3DRENDERSTATE_ALPHAFUNC = 25, // アルファ比較機能。 D3DRENDERSTATE_DITHERENABLE = 26, // ディザリングを有効にする。 D3DRENDERSTATE_ALPHABLENDENABLE = 27, // アルファ ブレンディングを有効にする。 D3DRENDERSTATE_FOGENABLE = 28, // フォグを有効にする。 D3DRENDERSTATE_SPECULARENABLE = 29, // スペキュラ ハイライトを有効にする。 D3DRENDERSTATE_ZVISIBLE = 30, // Z チェックを有効にする。 D3DRENDERSTATE_STIPPLEDALPHA = 33, //点描アルファを有効にする。 D3DRENDERSTATE_FOGCOLOR = 34, // フォグ カラー。 D3DRENDERSTATE_FOGTABLEMODE = 35, // フォグ モード。 D3DRENDERSTATE_FOGTABLESTART = 36, // フォグ テーブル開始 (D3DRENDERSTATE_FOGSTART と同じ)。 D3DRENDERSTATE_FOGTABLEEND = 37, // フォグ テーブル終了 (D3DRENDERSTATE_FOGEND と同じ)。 D3DRENDERSTATE_FOGTABLEDENSITY = 38, // フォグ テーブル密度 (D3DRENDERSTATE_FOGDENSITY と同じ)。 D3DRENDERSTATE_FOGSTART = 36, // フォグ開始 (頂点とピクセル フォグに対して)。 D3DRENDERSTATE_FOGEND = 37, // フォグ終了 (頂点とピクセル フォグに対して)。 D3DRENDERSTATE_FOGDENSITY = 38, // フォグ密度 (頂点とピクセル フォグに対して)。 D3DRENDERSTATE_EDGEANTIALIAS = 40, // アンチエイリアス エッジ。 D3DRENDERSTATE_COLORKEYENABLE = 41, // カラー キー透過を有効にする。 D3DRENDERSTATE_ZBIAS = 47, // Z バイアス。 D3DRENDERSTATE_RANGEFOGENABLE = 48, // 範囲ベースのフォグを有効にする。 D3DRENDERSTATE_STENCILENABLE = 52, // ステンシル処理を有効または無効にする。 D3DRENDERSTATE_STENCILFAIL = 53, // ステンシル処理。 D3DRENDERSTATE_STENCILZFAIL = 54, // ステンシル処理。 D3DRENDERSTATE_STENCILPASS = 55, // ステンシル処理。 D3DRENDERSTATE_STENCILFUNC = 56, // ステンシル比較関数。 D3DRENDERSTATE_STENCILREF = 57, // ステンシル テストの参照値。 D3DRENDERSTATE_STENCILMASK = 58, // ステンシル テストで使用されるマスク値。 D3DRENDERSTATE_STENCILWRITEMASK = 59, // ステンシル バッファ書き込みマスク。 D3DRENDERSTATE_TEXTUREFACTOR = 60, // テクスチャ係数。 D3DRENDERSTATE_WRAP0 = 128, // 1 番目のテクスチャ座標セットのラップ フラグ。 // ここでは 1 から 6 のラップ レンダリング ステートは省略。 D3DRENDERSTATE_WRAP7 = 135, // 最後のテクスチャ座標セットのラップ フラグ。 D3DRENDERSTATE_CLIPPING = 136, // プリミティブのクリッピングを有効または無効にする。 D3DRENDERSTATE_LIGHTING = 137, // ライティングを有効または無効にする。 D3DRENDERSTATE_EXTENTS = 138, // スクリーン範囲の更新を有効または無効にする。 D3DRENDERSTATE_AMBIENT = 139, // シーンのアンビエント色。 D3DRENDERSTATE_FOGVERTEXMODE = 140, // 頂点フォグのフォグ モード。 D3DRENDERSTATE_COLORVERTEX = 141, // 頂点単位の色を有効または無効にする。 D3DRENDERSTATE_LOCALVIEWER = 142, // パースペクティブ スペキュラ ハイライトを有効または無効にする。 D3DRENDERSTATE_NORMALIZENORMALS = 143, // 頂点法線の自動正規化を有効にする。 D3DRENDERSTATE_COLORKEYBLENDENABLE = 144, // アルファ ブレンディング カラー キーを有効または無効にする。 D3DRENDERSTATE_DIFFUSEMATERIALSOURCE = 145, // 頂点単位のディフーズ色の位置。 D3DRENDERSTATE_SPECULARMATERIALSOURCE = 146, // 頂点単位のスペキュラ色の位置。 D3DRENDERSTATE_AMBIENTMATERIALSOURCE = 147, // 頂点単位のアンビエント色の位置。 D3DRENDERSTATE_EMISSIVEMATERIALSOURCE = 148, // 頂点単位のエミッション色の位置。 D3DRENDERSTATE_VERTEXBLEND = 151, // 複数の行列による頂点ブレンディング モード。 D3DRENDERSTATE_CLIPPLANEENABLE = 152, // 1 つまたは複数のユーザー定義クリッピプ面を有効にする D3DRENDERSTATE_FORCE_DWORD = 0x7fffffff, } D3DRENDERSTATETYPE;
フルシーン アンチエイリアシングは、D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT または D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT 能力を示すデバイスに限り、有効にすることができる。
レンダリングの対象となるサーフェスに深度バッファがアタッチされている場合、このレンダリング ステートのデフォルト値は D3DZB_TRUE であり、それ以外の場合は D3DZB_FALSE である。
入ってくるアルファ値は、D3DRENDERSTATE_ALPHAFUNC レンダリング ステートにより提供される比較関数を用いて参照アルファ値と比較される。このモードが可能になると、テストが成功した場合に限り、アルファ ブレンディングが起きる。
ピクセルの深度値を深度バッファの値と比較する。ピクセルの深度値が比較関数で許可された場合にピクセルが書き込まれる。
深度値が深度バッファに書き込まれるのは、レンダリング ステートが TRUE の場合だけである。
この深度テストに失敗した方が、ソフトウェアによるラスタ化や多くのハードウェア アクセラレータの処理は速くなる。これは、ピクセルのレンダリング処理を行わない場合には、テクスチャをフィルタ処理したり変調したりする必要がなくなるためである。
DirectX 5.0 以前では、このレンダリング ステートを利用して、ソフトウェア ラスタライザはカラー キー検索とアルファ ブレンディングの切り替えを行っていた。現在は D3DRENDERSTATE_COLORKEYENABLE レンダリング ステートを使用して、カラー キーイングを切り替える (ハードウェアは、アルファ ブレンディングの切り替えにのみ、D3DRENDERSTATE_BLENDENABLE レンダリング ステートを使用してきた)。
アルファ ブレンディングのタイプは D3DRENDERSTATE_SRCBLEND と D3DRENDERSTATE_DESTBLEND レンダリング ステートによって決定される。D3DRENDERSTATE_COLORKEYENABLE と共に D3DRENDERSTATE_ALPHABLENDENABLE を使用すれば、アルファ ブレンディングの微妙なコントロールが可能になる。
D3DRENDERSTATE_ALPHABLENDENABLE は、D3DTEXTUREBLEND 列挙型により指定されるテクスチャ ブレンディング モードには影響を与えない。テクスチャ ブレンディングは、論理的にはピクセル パイプラインの D3DRENDERSTATE_ALPHABLENDENABLE 部分よりずっと前に行われる。両者が相互に関連するのは、D3DTEXTUREBLEND フェーズ後のポリゴンに残るアルファ部分が、D3DRENDERSTATE_ALPHABLENDENABLE フェーズでフレーム バッファの内容との相互作用を制御するために使われることがあるだけである。
アプリケーションは、D3DDEVICEDESC7 構造体の 3DDEVCAPS_DRAWPRIMTLVERTEX フラグを調べて、このレンダリング ステートがサポートされているかどうかをチェックしなければならない。
スペキュラ ハイライトは、光の当たっているオブジェクトの各頂点がそのオブジェクトの原点にあるかのように算出される。これは、オブジェクトが原点の周囲でモデル化され、光源とオブジェクト間の距離が比較的に大きい場合に限り、予測値を与える。
このメンバが TRUE に設定されている場合、テクスチャ カスケードとアルファ ブレンディングの間でベース カラーにスペキュラ色が追加される。
現在のソフトウェア ラスタライザは、このレンダリング ステートを無視する。現在のハードウェアがこのレンダリング ステートをサポートするかどうかを調べるには、D3DPRIMCAPS 構造体の D3DPSHADECAPS_ALPHAFLATSTIPPLED フラグを使用する。
このレンダリング ステートの値は浮動小数点値である。IDirect3DDevice7::SetRenderState および IDirect3DDevice7::SetRenderState は DWORD 値を使用するため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければならない。
lpd3dDevice->SetRenderState( D3DRENDERSTATE_FOGSTART, *((LPDWORD) (&fFogStart)) );
このレンダリング ステートの値は浮動小数点値である。IDirect3DDevice7::SetRenderState および IDirect3DDevice7::SetRenderState は DWORD 値を使用するため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければならない。
lpd3dDevice->SetRenderState( D3DRENDERSTATE_FOGDENSITY, *((LPDWORD) (&fFogDensity)) );
このレンダリング ステートの値は浮動小数点値である。IDirect3DDevice7::SetRenderState および IDirect3DDevice7::SetRenderState は DWORD 値を使用するため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければならない。
lpd3dDevice->SetRenderState( D3DRENDERSTATE_FOGDENSITY, *((LPDWORD) (&fFogDensity)) );
エッジ アンチエイリアシングは、D3DPRASTERCAPS_ANTIALIASEDGES 能力を示すデバイスに限り、有効にすることができる。
アプリケーションでは D3DDEVICEDESC7 構造体の D3DDEVCAPS_DRAWPRIMTLVERTEX フラグを調べて、このレンダリング ステートがサポートされているかどうかをチェックする。
カラー キー透過が有効な場合、DDSD_CKSRCBLT フラグで作成されたテクスチャ サーフェスのみ影響を受ける。DDSD_CKSRCBLT フラグで作成されていないサーフェスは、カラー キー透過のエフェクトを示す。
範囲はフォグ計算に使うのに正しい要素であるが、範囲が計算上高価となる一方、深さは通常計算済みなので、代って深さが広く使われる。深度を使用してフォグを計算すると、周辺オブジェクトのフォグ エフェクトが視点の移動と共に変化するという好ましくない影響が出る。この場合、深度は変化するが範囲は一定のままである。
このレンダリング ステートは D3DVERTEX 頂点に対してのみ作用する。D3DLVERTEX または D3DTLVERTEX 頂点を指定する場合、RGBF フォグ値の F (フォグ) 要素が範囲について補正済みでなければならない。
現在のところ、ピクセル単位での範囲ベースのフォグをサポートするハードウェアは存在しないため、範囲補正は頂点フォグでのみ行われる。詳細については、「範囲ベースのフォグ」および「頂点フォグ」を参照すること。
比較関数は、ステンシル バッファの要素を基準値と比較するために使われる。この比較は、基準値のビットと、ステンシル マスク (D3DRENDERSTATE_STENCILMASK レンダリング ステートにより設定) に設定されたステンシル バッファ要素にのみ適用される。TRUE の場合、ステンシル テストにパスする。
詳細については、以下のレンダリング ステートを参照すること。
クリップ面を簡単に有効にできるように、D3dtypes.h ヘッダー ファイルには D3DCLIPPLANEn マクロが宣言されている。
D3DRENDERSTATE_BLENDENABLE メンバは D3DRENDERSTATE_ALPHABLENDENABLE メンバに置き換えられている。意味がより明瞭になるように名前も変更されている。以前のアプリケーションとの互換性を維持するために、D3DRENDERSTATE_ALPHABLENDENABLE に対応するものとして D3DRENDERSTATE_BLENDENABLE 定数が宣言されている。
#define D3DRENDERSTATE_BLENDENABLE D3DRENDERSTATE_ALPHABLENDENABLE
Direct3D は、アプリケーションでの便宜を考慮して、(D3DRENDERSTATE_WRAPn ステート値の 1 つを明示的に使用する代わりに) D3DRENDERSTATE_WRAPBIAS 定数を定義し、テクスチャ座標セットのゼロ始点整数値に基づいて、テクスチャ ラッピングを有効にしたり、無効にしたりする。次の例のように、D3DRENDERSTATE_WRAPBIAS 値をテクスチャ座標セットのゼロ始点インデックスに加算して、そのインデックスに対応する D3DRENDERSTATE_WRAPn 値を計算する。
// 変数 dwIndex のインデックスに対応するテクスチャ座標セットを // 使用するテクスチャに対して、U/V ラッピングを有効にする。 HRESULT hr = lpD3DDevice->SetRenderState( dwIndex + D3DRENDERSTATE_WRAPBIAS, D3DWRAP_0 | D3DWRAP1); // dwIndexが 3 の場合、加算の結果の値は、 // D3DRENDERSTATE_WRAP3 (131) に等しくなる。
D3dtypes.h 内の D3DRENDERSTATETYPE の宣言には、DirectX 7.0 インターフェイスでサポートされない従来のレンダリング ステートが含まれている。詳細については、「廃止されたレンダリング ステート」を参照すること。
D3DRENDERSTATE_TEXTUREHANDLE = 1, // テクスチャ ハンドル。 D3DRENDERSTATE_TEXTUREADDRESS = 3, // テクスチャ アドレス。 D3DRENDERSTATE_WRAPU = 5, // u 方向のラップ。 D3DRENDERSTATE_WRAPV = 6, // v 方向のラップ。 D3DRENDERSTATE_MONOENABLE = 11, // モノ レンダリングが有効。 D3DRENDERSTATE_ROP2 = 12, // ラスタ化。 D3DRENDERSTATE_PLANEMASK = 13, // 物理的平面マスク。 D3DRENDERSTATE_TEXTUREMAG = 17, // 置き換えられている。 D3DRENDERSTATE_TEXTUREMIN = 18, // 置き換えられている。 D3DRENDERSTATE_TEXTUREMAPBLEND = 21, // マップのブレンディング モード。 D3DRENDERSTATE_SUBPIXEL = 31, // サブピクセル補正が有効。 D3DRENDERSTATE_SUBPIXELX = 32, // x サブピクセル補正が有効。 D3DRENDERSTATE_STIPPLEENABLE = 39, // 点描が有効。 D3DRENDERSTATE_BORDERCOLOR = 43, // 境界色。 D3DRENDERSTATE_TEXTUREADDRESSU = 44, // u テクスチャ アドレッシング モード。 D3DRENDERSTATE_TEXTUREADDRESSV = 45, // v テクスチャ アドレッシング モード。 D3DRENDERSTATE_MIPMAPLODBIAS = 46, // ミップマップ LOD バイアス。 D3DRENDERSTATE_ANISOTROPY = 49, // 最大異方性。 D3DRENDERSTATE_FLUSHBATCH = 50, // DP バッチ処理の明示的フラッシュ (DX5 のみ)。 D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT=51, / /ソート非依存型透明性が有効。 D3DRENDERSTATE_STIPPLEPATTERN00 = 64, // 点描パターンの最初の線。 // ここでは、点描パターンの 01 から 30 までを省略。 D3DRENDERSTATE_STIPPLEPATTERN31 = 95, // 点描パターンの最後の線。
Windows NT/2000 :Windows NT 4.0 SP3 またはそれ以降が必要。
Windows 95/98 : Windows 95 以降が必要。Windows 95 用に再配布可能な形で使用可能。
バージョン : DirectX 2.0 以降が必要。
ヘッダー : d3dtypes.h で宣言。
IDirect3DDevice7::SetRenderState、IDirect3DDevice7::GetRenderState、レンダリング ステート