Platform SDK: DirectX |
CONST_D3DRENDERSTATETYPE 列挙は、Direct3DDevice7.SetRenderState と Direct3DDevice7.GetRenderState メソッドで設定および取得されるデバイス レンダリング ステートを定義する。
Enum CONST_D3DRENDERSTATETYPE D3DRENDERSTATE_ALPHABLENDENABLE = 27 D3DRENDERSTATE_ALPHAFUNC = 25 D3DRENDERSTATE_ALPHAREF = 24 D3DRENDERSTATE_ALPHATESTENABLE = 15 D3DRENDERSTATE_AMBIENT = 139 D3DRENDERSTATE_AMBIENTMATERIALSOURCE = 147 D3DRENDERSTATE_ANTIALIAS = 2 D3DRENDERSTATE_CLIPPING = 136 D3DRENDERSTATE_CLIPPLANEENABLE = 152 D3DRENDERSTATE_COLORKEYBLENDENABLE = 144 D3DRENDERSTATE_COLORKEYENABLE = 41 D3DRENDERSTATE_COLORVERTEX = 141 D3DRENDERSTATE_CULLMODE = 22 D3DRENDERSTATE_DESTBLEND = 20 D3DRENDERSTATE_DIFFUSEMATERIALSOURCE = 145 D3DRENDERSTATE_DITHERENABLE = 26 D3DRENDERSTATE_EDGEANTIALIAS = 40 D3DRENDERSTATE_EMISSIVEMATERIALSOURCE= 148 D3DRENDERSTATE_EXTENTS = 138 D3DRENDERSTATE_FILLMODE = 8 D3DRENDERSTATE_FOGCOLOR = 34 D3DRENDERSTATE_FOGENABLE = 28 D3DRENDERSTATE_FOGTABLEMODE = 35 D3DRENDERSTATE_FOGVERTEXMODE = 140 D3DRENDERSTATE_LASTPIXEL = 16 D3DRENDERSTATE_LIGHTING = 137 D3DRENDERSTATE_LINEPATTERN = 10 D3DRENDERSTATE_LOCALVIEWER = 142 D3DRENDERSTATE_NORMALIZENORMALS = 143 D3DRENDERSTATE_RANGEFOGENABLE = 48 D3DRENDERSTATE_SHADEMODE = 9 D3DRENDERSTATE_SPECULARENABLE = 29 D3DRENDERSTATE_SPECULARMATERIALSOURCE = 146 D3DRENDERSTATE_SRCBLEND = 19 D3DRENDERSTATE_STENCILENABLE = 52 D3DRENDERSTATE_STENCILFAIL = 53 D3DRENDERSTATE_STENCILFUNC = 56 D3DRENDERSTATE_STENCILMASK = 58 D3DRENDERSTATE_STENCILPASS = 55 D3DRENDERSTATE_STENCILREF = 57 D3DRENDERSTATE_STENCILWRITEMASK = 59 D3DRENDERSTATE_STENCILZFAIL = 54 D3DRENDERSTATE_STIPPLEDALPHA = 33 D3DRENDERSTATE_TEXTUREFACTOR = 60 D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4 D3DRENDERSTATE_VERTEXBLEND = 151 D3DRENDERSTATE_WRAP0 = 128 ' Wrap render states 1 through 6 omitted here. D3DRENDERSTATE_WRAP7 = 135 D3DRENDERSTATE_ZBIAS = 47 D3DRENDERSTATE_ZENABLE = 7 D3DRENDERSTATE_ZFUNC = 23 D3DRENDERSTATE_ZVISIBLE = 30 D3DRENDERSTATE_ZWRITEENABLE = 14 End Type
D3DRENDERSTATE_COLORKEYENABLE レンダリング ステートを利用して、カラー キー検索の切り替えを実行できる (ハードウェア ラスタライザはいつも D3DRENDERSTATE_BLENDENABLE レンダリング ステートをアルファ ブレンディング切り替え専用に使ってきた)。
アルファ ブレンディングのタイプは D3DRENDERSTATE_SRCBLEND と D3DRENDERSTATE_DESTBLEND レンダリング ステートによって決定される。D3DRENDERSTATE_COLORKEYENABLE と共に D3DRENDERSTATE_ALPHABLENDENABLE を使用すれば、アルファ ブレンディングの微妙なコントロールが可能になる。
アプリケーションは、D3DDEVICEDESC7 型の 3DDEVCAPS_DRAWPRIMTLVERTEX フラグを調べて、このレンダリング ステートがサポートされているかどうかをチェックしなければならない。
入ってくるアルファ値は、D3DRENDERSTATE_ALPHAFUNC レンダリング ステートにより提供される比較関数を用いて参照アルファ値と比較される。このモードが可能になると、テストが成功した場合に限り、アルファ ブレンディングが起きる。
フルシーン アンチエイリアシングは、D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT または D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT 能力を示すデバイスに限り、有効にすることができる。
アプリケーションは、3DDEVICEDESC7 型の D3DDEVCAPS_DRAWPRIMTLVERTEX フラグを調べて、このレンダリング ステートがサポートされているかどうかをチェックする必要がある。
カラー キー透過が有効の場合、DDSD_CKSRCBLT フラグによって作成されたテクスチャ サーフェスだけが影響を受ける。DDSD_CKSRCBLT フラグなしで作成されたサーフェスには、カラー キー透過エフェクトが表れる。
参照「D3DRENDERSTATE_DIFFUSEMATERIALSOURCE」、「D3DRENDERSTATE_SPECULARMATERIALSOURCE」、「D3DRENDERSTATE_AMBIENTMATERIALSOURCE」、および「D3DRENDERSTATE_EMISSIVEMATERIALSOURCE」
エッジ アンチエイリアシングは、D3DPRASTERCAPS_ANTIALIASEDGES 能力を示すデバイスに限り、有効にすることができる。
これらのレンダリング ステートによって、カメラに近い位置のフォグ エフェクトを除外することが可能になる。たとえば、開始深度に 0.3 を設定すると、0.0 から 0.299 の範囲の深度に対するフォグエフェクトが除外され、終了深度に 0.7 を設定すると、0.701 から 1.0 の範囲の深度に対するフォグ エフェクトが除外される。
範囲はフォグ計算に使うのに正しい要素であるが、範囲が計算上高価となる一方、深さは通常計算済みなので、代って深さが広く使われる。フォグ計算に深さを使うと、周辺のオブジェクトのフォグの様子が目の回転と共に変化するという好ましくない影響がでる。このケースでは、深さは変わるが範囲は一定のままである。
このレンダリング ステートは D3DVERTEX 頂点だけで機能する。D3DLVERTEX または D3DTLVERTEX 頂点を指定すると、RGBF フォグ値の F (フォグ) 要素は、範囲に関して常に修正されなければならない。
現在ピクセル単位での範囲ベースのフォグをサポートするハードウェアはないので、範囲の修正は頂点フォグにのみ提供される。詳細については、「範囲ベースのフォグ」と「頂点フォグ」を参照すること。
スペキュラ ハイライトは、光の当たっているオブジェクトの各頂点がそのオブジェクトの原点にあるかのように算出される。これは、オブジェクトが原点の周囲でモデル化され、光源とオブジェクト間の距離が比較的に大きい場合に限り、予測値を与える。
このメンバを TRUE に設定すると、テクスチャ カスケード後、アルファ ブレンディング前に、ベース カラーにスペキュラ色が追加される。
比較関数は、ステンシル バッファの要素を基準値と比較するために使われる。この比較は、基準値のビットと、ステンシル マスク (D3DRENDERSTATE_STENCILMASK レンダリング ステートにより設定) に設定されたステンシル バッファ要素にのみ適用される。比較の結果が真であれば、ステンシル テストは成功である。
現在のソフトウェア ラスタライザは、このレンダリング ステートを無視する。現在のハードウェアがこのレンダリング ステートをサポートするかどうかを調べるには、D3DPRIMCAPS 型の D3DPSHADECAPS_ALPHAFLATSTIPPLED フラグを使う。
レンダリングの対象となるサーフェスに深度バッファがアタッチされている場合、このレンダリング ステートのデフォルト値は D3DZB_TRUE であり、それ以外の場合は D3DZB_FALSE である。
ピクセルの深度値を深度バッファの値と比較する。ピクセルの深度値が比較関数で許可された場合にピクセルが書き込まれる。
深度値が深度バッファに書き込まれるのは、レンダリング ステート D3DRENDERSTATE_ZWRITEENABLE が TRUE の場合だけである。
この深度テストに失敗した方が、ソフトウェアによるラスタ化や多くのハードウェア アクセラレータの処理は速くなる。これは、ピクセルのレンダリング処理を行わない場合には、テクスチャをフィルタ処理したり変調したりする必要がなくなるためである。
Direct3D は、アプリケーションでの便宜を考慮して、(D3DRENDERSTATE_WRAPn ステート値の 1 つを明示的に使用する代わりに) D3DRENDERSTATE_WRAPBIAS 定数を定義し、テクスチャ座標セットのゼロ始点整数値に基づいて、テクスチャ ラッピングを有効にしたり、無効にしたりする。次の例のように、D3DRENDERSTATE_WRAPBIAS 値をテクスチャ座標セットのゼロベース インデックスに加算して、そのインデックスに対応する D3DRENDERSTATE_WRAPn 値を計算する。
On Local Error Resume Next ' 変数 lIndex のインデックスに対応するテクスチャ座標セットを ' 使用するテクスチャに対して、U/V ラッピングを有効にする。 Call d3dDevice.SetRenderState( _ lIndex + D3DRENDERSTATE_WRAPBIAS, _ D3DWRAPCOORD_0 Or D3DWRAPCOORD_1) ' lIndexが 3 の場合、加算の結果の値は、 ' D3DRENDERSTATE_WRAP3 (131) に等しくなる。 If Err.Number <> DD_OK Then ' エラー処理コード End If