D)    レンダリングステート

レンダリングステートは、深度バッファやライトを使うための設定を行ないます。値は、IDirect3DDevice9::SetRenderState(設定したい状態、値)で設定します。DirectXのプログラムで何も描画されない時は、レンダリングステートを片っ端から設定してみると上手くいくときがあります(あまり勧められないやり方ですね。ですが、私はそうしてます)。

ただ、100以上と非常に多くの状態があります。最初はサンプルを見て、必要なレジスタだけを設定しましょう。まぁ、太字にしたとこがだいじですかねぇ〜

ステート名

機能

アルファ合成

 

D3DRS_ALPHABLENDENABLE

アルファ合成の使用の切り替え

D3DRS_SRCBLEND

これから描画するポリゴンの合成係数の設定

D3DRS_DESTBLEND

すでに描かれているレンダリングターゲットに関する合成係数の設定

D3DRS_BLENDOP

アルファ合成方法の設定

D3DRS_TEXTUREFACTOR

テクスチャ ブレンディング引数等で使用される色定数

D3DRS_BLENDFACTOR

アルファ合成に関する、定数の合成係数の指定

D3DRS_SEPARATEALPHABLENDENABLE

アルファ成分に特別な合成をするためのスイッチ

D3DRS_SRCBLENDALPHA

アルファ成分用のD3DRS_SRCBLEND

D3DRS_DESTBLENDALPHA

アルファ成分用のD3DRS_SRCBLEND

D3DRS_BLENDOPALPHA

アルファ成分用のD3DRS_BLENDOP

深度バッファ

 

D3DRS_ZENABLE

深度バッファの使用の切り替え

D3DRS_ZFUNC

深度テストの比較方法の設定

D3DRS_ZWRITEENABLE

深度バッファへの書き込みを制御

D3DRS_DEPTHBIAS

同一深度での描画順序の設定

D3DRS_SLOPESCALEDEPTHBIAS

ポリゴンの勾配に応じた描画順序の設定

プリミティブ

 

D3DRS_FILLMODE

塗りつぶす部分を設定

D3DRS_SHADEMODE

塗りつぶすときのパターンを設定

D3DRS_LASTPIXEL

プリミティブの最後のピクセルの描画を制御します。

D3DRS_DITHERENABLE

ディザリングの使用の切り替え

D3DRS_ANTIALIASEDLINEENABLE

直線の描画に対するアンチエイリアスの切り替え

テスト等

 

D3DRS_CULLMODE

表裏判定の設定

D3DRS_CLIPPING

プリミティブの視錐台クリッピングの切り替え

D3DRS_CLIPPLANEENABLE

ユーザー定義クリップ面を有効

D3DRS_SCISSORTESTENABLE

シザリングテストの切り替え

D3DRS_WRAP0〜D3DRS_WRAP15

複数のテクスチャ座標セットに対するテクスチャラッピング動作

D3DRS_ALPHATESTENABLE

アルファテストの使用の切り替え

D3DRS_ALPHAREF

アルファテスト時の基準アルファ値

D3DRS_ALPHAFUNC

アルファテストの比較方法の設定

D3DRS_SRGBWRITEENABLE

sRGBのガンマ補正の切り替え

D3DRS_COLORWRITEENABLE

色成分ごとの書き込みの切り替え

D3DRS_COLORWRITEENABLE1

D3DRS_COLORWRITEENABLE3

マルチレンダリングターゲットに関する色成分ごとの書き込みの切り替え

D3DRS_MULTISAMPLEANTIALIAS

フルシーン アンチエイリアシングの切り替え

D3DRS_MULTISAMPLEMASK

マルチサンプルに対する書き込み許可情報

フォグ

 

D3DRS_FOGENABLE

フォグの使用の切り替え

D3DRS_FOGCOLOR

フォグの色

D3DRS_FOGTABLEMODE

フォグのかかり方の設定

D3DRS_FOGSTART

フォグの開始深度

D3DRS_FOGEND

フォグの終了深度

D3DRS_FOGDENSITY

指数フォグモードにおけるフォグ濃度

D3DRS_FOGVERTEXMODE

頂点フォグのフォグ式の設定

D3DRS_RANGEFOGENABLE

範囲フォグの使用の切り替え

ステンシルバッファ

 

D3DRS_STENCILENABLE

ステンシルバッファの使用の切り替え

D3DRS_STENCILFAIL

ステンシル テストに失敗したときに実行するステンシル処理

D3DRS_STENCILZFAIL

ステンシル テストに合格し、深度テストに失敗した場合のステンシル処理

D3DRS_STENCILPASS

ステンシル テストと深度テストに合格した場合のステンシル処理

D3DRS_STENCILFUNC

ステンシル テストのための比較関数

D3DRS_STENCILREF

ステンシル テストのための比較値

D3DRS_STENCILMASK

ステンシル テストのための有効ビットを決定するためのマスク値

D3DRS_STENCILWRITEMASK

ステンシル バッファに書き込む値に適用する書き込みマスクの値

D3DRS_TWOSIDEDSTENCILMODE

2サイド ステンシルの機能を切り替え

D3DRS_CCW_STENCILFAIL

CCWステンシルテストに失格した時の処理

D3DRS_CCW_STENCILZFAIL

CCWステンシル テストに合格し、深度テストに失敗した場合の処理

D3DRS_CCW_STENCILPASS

CCWステンシル テストと深度テストに合格した場合のステンシル処理

D3DRS_CCW_STENCILFUNC

CCWステンシルテストで用いる比較関数

光源計算

 

D3DRS_LIGHTING

固定機能によるライティングの切り替え

D3DRS_SPECULARENABLE

固定機能における鏡面反射光の使用の切り替え

D3DRS_COLORVERTEX

頂点色の使用の切り替え

D3DRS_AMBIENT

環境光の色

D3DRS_LOCALVIEWER

カメラとの相対角度に依存した鏡面反射光の計算

D3DRS_NORMALIZENORMALS

頂点法線の自動正規化を有効

D3DRS_DIFFUSEMATERIALSOURCE

光源計算に使用される拡散色

D3DRS_SPECULARMATERIALSOURCE

光源計算に使用される鏡面反射色

D3DRS_AMBIENTMATERIALSOURCE

光源計算に使用される環境色

D3DRS_EMISSIVEMATERIALSOURCE

光源計算に使用される発光照明色

ジオメトリ ブレンディング

 

D3DRS_VERTEXBLEND

ジオメトリ ブレンディングを実行するために使用する行列の個数

D3DRS_INDEXEDVERTEXBLENDENABLE

インデックス付きの頂点ブレンディングの切り替え

D3DRS_TWEENFACTOR

トゥイーン係数の指定

ポイント プリミティブ

 

D3DRS_POINTSIZE

ポイント サイズ計算で使用するサイズ

D3DRS_POINTSIZE_MIN

ポイント スプライトの最小サイズ

D3DRS_POINTSIZE_MAX

ポイント スプライトの最大サイズ

D3DRS_POINTSPRITEENABLE

テクスチャ インデックスの割り当ては

D3DRS_POINTSCALEENABLE

ポイント プリミティブに対するサイズの計算の切り替え

D3DRS_POINTSCALE_A

ポイント プリミティブに対する距離ベースのサイズの減衰定数

D3DRS_POINTSCALE_B

ポイント プリミティブに対する距離ベースのサイズの減衰定数

D3DRS_POINTSCALE_C

ポイント プリミティブに対する距離ベースのサイズの減衰定数

テッセレーション

 

D3DRS_PATCHEDGESTYLE

パッチエッジに関するテッセレーションの切り替え

D3DRS_POSITIONDEGREE

Nパッチの座標の補間の程度を設定

D3DRS_NORMALDEGREE

Nパッチの法線の補間の程度を設定

D3DRS_ENABLEADAPTIVETESSELATION

適応型テッセレーションを有効に

D3DRS_MINTESSELATIONLEVEL

テッセレーションのレベルの最小値を指定

D3DRS_MAXTESSELATIONLEVEL

テッセレーションのレベルの最大値を指定

D3DRS_ADAPTIVETESS_X

X軸方向に関する適応型テッセレーションの量を設定

D3DRS_ADAPTIVETESS_Y

Y軸方向に関する適応型テッセレーションの量を設定

D3DRS_ADAPTIVETESS_Z

Z軸方向に関する適応型テッセレーションの量を設定

D3DRS_ADAPTIVETESS_W

W軸方向に関する適応型テッセレーションの量を設定

デバッグ

 

D3DRS_DEBUGMONITORTOKEN

モニタのデバッグの切り替え

 

D3DRS_ALPHABLENDENABLE

アルファ合成による透明化を有効にするには、TRUE を設定します。初期値は FALSE です。アルファ合成と呼びますが、アルファ成分以外の係数も合計の重みに使うことができます。アルファ合成の合成方法は、D3DRS_BLENDOPで、合成の合成係数は、D3DRS_SRCBLEND と D3DRS_DESTBLEND やD3DRS_BLENDOPのレンダリング ステートによって決定されます。

 

D3DRS_SRCBLEND

アルファ合成する時のこれから描画するポリゴンの合成係数を設定します。値は、D3DBLEND列挙型です。初期値は、D3DBLEND_ONEです。D3DBLEND列挙型には、次の種類があります。

      D3DBLEND_ZERO

ブレンディング係数は (0, 0, 0, 0)です。

      D3DBLEND_ONE

ブレンディング係数は (1, 1, 1, 1)です。

      D3DBLEND_SRCCOLOR

ブレンディング係数は (Rs, Gs, Bs, As) です。Rs, Gs, Bs, Asは、ソース(描こうとするポリゴン)の赤、緑、青、アルファの成分です。

      D3DBLEND_INVSRCCOLOR

ブレンディング係数は (1-Rs, 1-Gs, 1-Bs, 1-As) です。

      D3DBLEND_SRCALPHA

ブレンディング係数は (As, As, As, As) です。

      D3DBLEND_INVSRCALPHA

ブレンディング計数は (1-As, 1-As, 1-As, 1-As) です。

      D3DBLEND_DESTALPHA

ブレンディング係数は (Ad, Ad, Ad, Ad) です。Adは、デスティネーション(描画しようとするレンダリングターゲット)のアルファの成分です。

      D3DBLEND_INVDESTALPHA

ブレンディング計数は (1-Ad, 1-Ad, 1-Ad, 1-Ad) です。

      D3DBLEND_DESTCOLOR

ブレンディング係数は (Rd, Gd, Bd, Ad) です。Rd, Gd, Bdは、デスティネーションの赤、緑、青の成分です。

      D3DBLEND_INVDESTCOLOR

ブレンディング計数は (1-Rd, 1-Gd, 1-Bd, 1-Ad) です。

      D3DBLEND_SRCALPHASAT

ブレンディング係数は、(f, f, f, 1)、f = min(As, 1-Ad) です。

      D3DBLEND_BOTHSRCALPHA

古いやつなので、つかっちゃだめです。

      D3DBLEND_BOTHINVSRCALPHA

転送元のブレンディング係数は (1-As, 1-As, 1-As, 1-As) で、転送先のブレンディング係数は (As, As, As, As) です。転送先のブレンディングの選択は無効になります。このブレンディング モードは、D3DRS_SRCBLENDステートに対してのみサポートされます。

 

      D3DBLEND_BLENDFACTOR

フレームバッファ合成時に使われる定数色で合成されます。このブレンディング モードは、D3DPBLEND_BLENDFACTOR が有効な時に使用できます。

      D3DBLEND_INVBLENDFACTOR

フレームバッファ合成時に使われる定数色を反転した色で合成されます。このブレンディング モードは、D3DPBLEND_BLENDFACTOR が有効な時に使用できます。

 

D3DRS_DESTBLEND

アルファ合成する時のすでに描かれているレンダリングターゲットに関する合成係数を設定します。値は、D3DBLEND列挙型です。初期値は、D3DBLEND_ZEROです。

 

D3DRS_BLENDOP

アルファ ブレンディング レンダリング ステートD3DRS_ALPHABLENDENABLE が TRUE に設定されているときに適用される算術演算を選択します。有効値は、D3DBLENDOP 列挙型です。初期値は D3DBLENDOP_ADD です。

D3DPMISCCAPS_BLENDOP デバイス能力がサポートされていない場合は、D3DBLENDOP_ADD が実行されます。

D3DBLENDOP列挙型には、次の種類があります。

      D3DBLENDOP_ADD

結果は転送元に転送先が加算されます。

結果 = 転送元 + 転送先

      D3DBLENDOP_SUBTRACT

結果は転送元から転送先が減算されます。

結果 = 転送元 - 転送先

      D3DBLENDOP_REVSUBTRACT

結果は転送先から転送元が減算されます。

結果 =転送先 - 転送元

      D3DBLENDOP_MIN

結果は転送元と転送先の最小値になります。

結果 = MIN(転送元, 転送先)

      D3DBLENDOP_MAX

結果は転送元と転送先の最大値になります。

結果 = MAX (転送元, 転送先)

 

D3DRS_TEXTUREFACTOR

D3DTA_TFACTOR テクスチャ ブレンディング引数、または D3DTOP_BLENDFACTORALPHA テクスチャ ブレンディング処理を用いたマルチテクスチャ ブレンディングで使用される色を指定します。設定する値は D3DCOLOR 変数です。初期値は 白色(0xFFFFFFFF)です。

 

D3DRS_BLENDFACTOR

アルファ合成に関して、定数の合成係数を指定します。この機能は、D3DCAPS9.SrcBlendCapsかD3DCAPS9.DestBlendCapsのD3DPBLENDCAPS_BLENDFACTORビットが立っていないといけません。

 

D3DRS_SEPARATEALPHABLENDENABLE

アルファ合成時に、フレームバッファのアルファ成分に関して別の合成方法をするための設定です。初期値は FALSE です。アルファ成分の合成の合成方法は、D3DRS_BLENDOPで、合成の合成係数は、D3DRS_SRCBLENDALPHAと D3DRS_ DESTBLENDALPHAとBLENDOPALPHAのレンダリング ステートによって決定されます。D3DPMISCCAPS_SEPARATEALPHABLENDが有効でないと設定できません。

 

D3DRS_SRCBLENDALPHA

アルファ成分に合成する時のこれから描画するポリゴンの合成係数を設定します。値は、D3DBLEND列挙型です。初期値は、D3DBLEND_ONEです。D3DBLEND列挙型には、次の種類があります。

 

D3DRS_DESTBLENDALPHA

アルファ成分に合成する時のすでに描かれているレンダリングターゲットに関する合成係数を設定します。値は、D3DBLEND列挙型です。初期値は、D3DBLEND_ZEROです。

 

D3DRS_BLENDOPALPHA

D3DRS_SRCBLENDALPHAがTRUEに設定されていて、アルファ ブレンディング D3DRS_ALPHABLENDENABLE が TRUE になっているときに、フレームバッファのアルファ成分に適用される算術演算を選択します。有効値は、D3DBLENDOP 列挙型です。初期値は D3DBLENDOP_ADD です。

D3DPMISCCAPS_BLENDOPデバイス能力がサポートされていない場合は、D3DBLENDOP_ADD が実行されます。

 

D3DRS_ZENABLE

深度バッファに関する設定を行います。設定する値は、D3DZBUFFERTYPE列挙型です。D3DPRESENT_PARAMETERS 構造体の EnableAutoDepthStencil メンバに TRUE を設定しておき、深度ステンシルがスワップチェーンと共に作成されている場合、このレンダリング ステートの初期値は TD3DZB_TRUE、そうでない場合は D3DZB_FALSE になります。

D3DZBUFFERTYPE列挙型は、次の種類があります。

      D3DZB_TRUE

射影空間でのzの値を深度バッファに使います(Zバッファ)。

      D3DZB_USEW

射影空間でのwの値を深度バッファに使います(Wバッファ)。この深度は、透視変換されない、ビュー空間でのz座標の深度になります。

      D3DZB_FALSE

深度バッファを使用しません。

 

D3DRS_ZFUNC

ピクセルの深度値を深度バッファの値と比較する時の比較関数を指定します。ピクセルの深度値がこのステートで設定される比較関数で合格した場合にピクセルが書き込まれます。設定する値は、D3DCMPFUNC列挙型です。初期値は D3DCMP_LESSEQUALです。このステートは、カメラからの距離を基準とするピクセルの描画するかどうかの評価方法を設定します。

この深度テストに失敗しやすくなるようにオブジェクトやポリゴンを並び替えたほうが、ソフトウェアや多くのハードウェア アクセラレータによる処理は速くなります。それは、ピクセルのレンダリング処理を行わない場合に、テクスチャをフィルタ処理したりレンダリング ターゲットとの合成をする必要がなくなるからです。

D3DCMPFUNC列挙型は、次の種類があります。

      D3DCMP_NEVER

テストは常に失敗します。

      D3DCMP_LESS

新しいピクセル値が、現在のピクセル値より小さいときに成功とみなします。

      D3DCMP_EQUAL

新しいピクセル値が、現在のピクセル値と等しいときに成功とみなします。

      D3DCMP_LESSEQUAL

新しいピクセル値が、現在のピクセル値以下のときに成功とみなします。

      D3DCMP_GREATER

新しいピクセル値が、現在のピクセル値より大きいときに成功とみなします。

      D3DCMP_NOTEQUAL

新しいピクセル値が、現在のピクセル値と等しくないときに成功とみなします。

      D3DCMP_GREATEREQUAL

新しいピクセル値が、現在のピクセル値以上のときに成功とみなします。

      D3DCMP_ALWAYS

テストは常に成功します。

 

D3DRS_ZWRITEENABLE

深度バッファへの書き込みを制御します。深度バッファへ書き込むには、TRUE に設定します。初期値は TRUE です。このレンダリングステートをFALSEにすると、深度バッファを汚しません。つまり、ポリゴンを描画する時に、深度の比較はしますが、(テストに合格したポリゴンでも)深度バッファに新たな深度を書き込みまない芸当ができます。影の作成時など、同じ深度情報を使って何回もレンダリングする時に有効です。

 

D3DRS_FILLMODE

塗りつぶす部分を設定します。設定する値は、D3DFILLMODE列挙型です。初期値は D3DFILL_SOLID です。D3DFILLMODE列挙型は、次の種類があります。

      D3DFILL_POINT

点で頂点を打ちます。

      D3DFILL_WIREFRAME

線で描画します。

      D3DFILL_SOLID

ポリゴン全体を面で塗りつぶします。

 

D3DRS_SHADEMODE

塗りつぶすときのグラデーションを設定します。設定する値は、D3DSHADEMODE列挙型です。初期値は D3DSHADE_GOURAUD です。D3DSHADEMODE列挙型で有効な物には、次の種類があります。

      D3DSHADE_FLAT

フラットシェーディングで塗りつぶします。三角形の最初の頂点の色が、表面の色を決定するために使われます。この色は三角形全体にわたってむらなく適用される。つまり、補間されないでベタに塗りつぶされます。ただし、鏡面反射光のα成分は補間されます。

      D3DSHADE_GOURAUD

グーローシェーディングで塗りつぶします。表面の色は、三角形の 3 つの頂点間で、線形補間により決定されます。

 

あと、フォンシェーディングをするD3DSHADE_PHONGというものもありますが、サポートされていません。照明計算にそれほどこだわりがない人は、いい加減にサポートして欲しいという愚痴を良く効くので、Microsoftさんには、早くサポートしてもらいたいですねぇ。

 

 

D3DRS_LASTPIXEL

D3DRS_LASTPIXELをFALSEにすると、最後のピクセルを描画しないレンダリングが行えます。線の最後のピクセルを描画すると周囲のプリミティブと重なり、見た目が悪くなることがあります。このようなときに、このレンダリング ステートは効果的です。初期値は TRUE です。ただし、この設定を変更するときは注意が必要です。場合によっては、最後のピクセルを描画しないようにするとプリミティブ間に隙間が生じ、見苦しくなることがあります。

 

D3DRS_DITHERENABLE

ディザリングを可能にするには、TRUE に設定します。初期値は FALSE です。

 

D3DRS_ANTIALIASEDLINEENABLE

直線の描画に対してアンチエイリアスをかけるか指定します。BOOL値(TRUEかFALSE)で設定します。

マルチサンプル レンダリング ターゲットにレンダリングする時は、D3DRS_ANTIALIASEDLINEENABLEは無効になり、アンチエイリアスはかかりません。マルチサンプル レンダリング ターゲットでアンチエイリアスがかかった線を描画する時は、ID3DXLineを使ってください。

 

D3DRS_CULLMODE

射影空間において、ポリゴンの三角形の表と裏を判定する方法を指定します。設定する値は、D3DCULL列挙型です。初期値は D3DCULL_CCWです。D3DCULL列挙型は、次の種類があります。

      D3DCULL_NONE

背面の判定をしないで両面描画します。

      D3DCULL_CW

右回り(clockwise)に頂点が並んでいる3角形を背面とします。

      D3DCULL_CCW

左回り(counterclockwise)に頂点が並んでいる3角形を背面とします

 

D3DRS_CLIPPING

プリミティブの視錐台クリッピングを設定します。有効にするには TRUE、無効にするには FALSE を設定します。初期値値は TRUE です。

 

D3DRS_CLIPPLANEENABLE

ユーザー定義クリップ面を有効にします。有効な値は、各ビットのステータス (設定の有無) によって対応するユーザー定義クリップ面をアクティブにするステートを切り替える任意の DWORD です。最下位ビット (ビット 0) はインデックス 0 の最初のクリップ面を制御し、後続ビットはそれより上位のインデックスのクリップ面に関してアクティブにするか制御します。ビットが設定されている場合、シーンのレンダリング中に適切なクリップ面が適用されます。初期値は0 です。

クリップ面を簡単に有効にできるように、D3DCLIPPLANEn マクロが定義されています。

 

D3DRS_SCISSORTESTENABLE

シザリングテストの切り替えを行います。BOOL値で設定します。

 

D3DRS_WRAP0D3DRS_WRAP15

複数のテクスチャ座標セットに対するテクスチャラッピング動作を指定します。これらのレンダリング ステートの有効値として、D3DWRAPCOORD_0 (または D3DWRAP_U)、D3DWRAPCOORD_1 (または D3DWRAP_V)、D3DWRAPCOORD_2 (または D3DWRAP_W)、および D3DWRAPCOORD_3 の各フラグを組み合わせることができます。これらの値を設定すると、指定されたテクスチャに対して 1、2、3、および 4 次元方向 (s、t、r、および q 方向と呼ばれる場合もある) のラッピングが実行されます。これらのレンダリング ステートの初期値は 0 (全方向のラッピングが無効)です。

テクスチャ アドレッシング モードを D3DTADDRESS_WRAP に設定することと、テクスチャ ラッピングを実行することとは同じではないことに注意する必要があります。テクスチャ アドレッシング モードを D3DTADDRESS_WRAP に設定すると、現在のプリミティブに適用される転送元テクスチャのコピーが複数生成されます。テクスチャ ラッピングを有効にすると、テクスチャ処理されたポリゴンをシステムがラスタ処理する際の方法が変更されます。テクスチャ ラッピングを効果的に有効にすると、[0.0, 1.0] 外にあるテクスチャ座標を無効にでき、このような不適切なテクスチャ座標のラスタ化の動作を未定義にできます。テクスチャ ラッピングが有効になっていると、テクスチャ アドレッシング モードは使用されません。テクスチャ ラッピングが有効になっている場合には、アプリケーションで指定するテクスチャ座標が0.0 より小さく、または 1.0 より大きくならないように注意してください。

 

D3DRS_ALPHATESTENABLE

アルファテストを使用する切り替えを行います。アルファ テストを可能にするには、TRUE を設定します。初期値は、FALSEです。このレンダリングステートを使用すると、「アルファ値に基づいてピクセルを描画しないテスト」を使えます。

描画するピクセルのアルファ値を、D3DRS_ALPHAFUNC レンダリング ステートにより提供される比較関数を用いてD3DRS_ALPHAREFステートに設定された参照アルファ値と比較されます。このモードが可能になると、テストが成功した場合に限り、ピクセルは描画されます。

 

D3DRS_ALPHAREF

アルファテスト時の基準アルファ値を指定します。これは、DWORD レンダリング ステート値の下位 8 ビットにあたる 8 ビット値になります。値は 0x00000000 から 0x000000FF の範囲内です。

 

D3DRS_ALPHAFUNC

アルファテストする時の評価方法を設定します。値は、D3DCMPFUNC型です。初期値は、D3DCMP_ALWAYS になります。このステートは、書き込むアルファ値をD3DRS_ALPHAREFで設定する基準になるピクセルと比較して、受け取りや受け取り拒否を判定する方法を設定します。

 

D3DRS_SRGBWRITEENABLE

レンダリングターゲットの書き込みに対してsRGBのガンマ補正を有効にします。レンダリングターゲットのフォーマットに関して、D3DUSAGE_SRGBWRITEが対応しているか確認する必要があります。

 

D3DRS_COLORWRITEENABLE

レンダリング ターゲットのカラー バッファに対する色の成分ごとの書き込みを有効にします。このレンダリング ステートに対する有効な値は、D3DCOLORWRITEENABLE_ALPHA、D3DCOLORWRITEENABLE_BLUE、D3DCOLORWRITEENABLE_GREEN、および D3DCOLORWRITEENABLE_RED の各フラグの任意の組み合わせになります。ビットを設定すると、レンダリングした時にその色の成分が更新されます。ビットをクリアすると、クリアした色成分は更新されません。機能を利用するためには、デバイスに対する D3DCAPS9 構造体の PrimitiveMiscCaps メンバの D3DPMISCCAPS_COLORWRITEENABLE 能力ビットを設定します。このレンダリング ステートは、画面クリア処理には影響を与えません。初期値は 0x0000000F(=D3DCOLORWRITEENABLE_ALPHA| D3DCOLORWRITEENABLE_BLUE| D3DCOLORWRITEENABLE_GREEN| D3DCOLORWRITEENABLE_RED) です。

 

D3DRS_COLORWRITEENABLE1 D3DRS_COLORWRITEENABLE3

複数のレンダリング ターゲットに関する色の成分ごとの書き込みを有効にします。この機能は、D3DCAPS9構造体のPrimitiveMiscCpasメンバのD3DPMISCCAPS_INDEPENDENTWRITEMASKSビットが立っているときに有効です。

 

D3DRS_MULTISAMPLEANTIALIAS

マルチサンプル レンダリングのターゲット バッファを使うときの、個々のサンプルの計算方法を決定するBOOL値です。TRUE を設定すると、複数サンプルのそれぞれについて異なるサンプリング位置でサンプリングすることでフルシーン アンチエイリアシングを実行するように、複数のサンプルが計算されます。FALSE を設定すると、複数のサンプルはすべて同じサンプリング値 (ピクセルの中心でサンプリングされた値) で記述されます。このレンダリング ステートの設定によって、マルチサンプル バッファに対する非アンチエイリアシング レンダリングが可能になります。シングル サンプル バッファへのレンダリング時は、このレンダリング ステートの効果はありません。初期値は TRUE になります。

 

D3DRS_MULTISAMPLEMASK

このマスクの各ビットは、マルチサンプル レンダリング ターゲットのサンプルの 1 つについての変更を制御します。したがって、8 サンプルのレンダリング ターゲットの場合は、8 つのサンプルのそれぞれに対する 8 つの書き込み許可情報が、格納されます。シングル サンプル バッファへのレンダリング時は、このレンダリング ステートの効果はありません。初期値は 0xFFFFFFFF です。

このレンダリング ステートを使うと、マルチサンプル バッファを蓄積(accumulation)バッファとして使い、各パスがサンプルのサブセットを更新するジオメトリのマルチパス レンダリングを行うことができます。

このサンプリングステートは、D3DCAPS9構造体のD3DPRASTERCAPS_STRETCHBLTMULTISAMPLEメンバが有効な時には使えません。

 

D3DRS_FOGENABLE

フォグ ブレンディングを可能にするには、TRUE を設定します。初期値は FALSE です。

 

D3DRS_FOGCOLOR

フォグの色を指定します。指定する型は、D3DCOLOR型です。初期値は、0になっています。

 

D3DRS_FOGTABLEMODE

ピクセル フォグに使用されるフォグ式を設定します。D3DFOGMODE 列挙型のメンバのいずれかを設定します。初期値は D3DFOG_NONE です。

D3DFOGMODE列挙型は、幾つか種類がありますが、使えるのは次の種類だけです。

      D3DFOG_NONE

フォグはかかりません。

      D3DFOG_LINEAR

次の方程式によって、始点と終点の間で線形にフォグが増します。

 

D3DRS_FOGSTART

線形フォグ モードにおける、フォグ エフェクトの開始深度を指定します。頂点フォグの場合、深度はワールド空間で指定します。ピクセル フォグの場合は、射影空間 [0.0, 1.0] またはワールド空間のいずれかで指定します。ピクセル フォグでは、フォグ計算に Z が使用される場合、これらの値は射影空間にあり、視点との相対フォグ (W フォグ) が使用される場合はワールド空間にあります。

このレンダリング ステートの値は浮動小数点値です。IDirect3Ddevice9::SetRenderState メソッドは DWORD 値を使用するため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければなりません。

IDirect3DDevice9::SetRenderState(D3DRS_FOGSTART, *((DWORD*) (&fFogStart)));

 

D3DRS_FOGEND

線形フォグ モードにおける、フォグ エフェクトの開始深度を設定します。

このレンダリング ステートの値は浮動小数点値です。IDirect3Ddevice9::SetRenderState メソッドは DWORD 値を使用するため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければなりません。

IDirect3DDevice9::SetRenderState(D3DRS_FOGSTART, *((DWORD*) (&fFogEnd)));

 

D3DRS_FOGDENSITY

指数フォグ モード (D3DFOG_EXP および D3DFOG_EXP2) で使用するフォグ密度ですが、指数フォグはサポートされていないので、いみなないですね。

 

D3DRS_FOGVERTEXMODE

頂点フォグ用のフォグ式を指定します。D3DFOGMODE 列挙型のメンバのいずれかを設定します。初期値は D3DFOG_NONE です。

 

D3DRS_RANGEFOGENABLE

範囲ベースのフォグを有効にします。初期値は、FALSEです。FALSEの場合には深度ベースのフォグが使用されます。範囲ベースのフォグでは、シーンにおけるオブジェクトの深さ (z 座標) ではなく、カメラからのオブジェクトの距離でフォグの濃さを計算します。範囲ベースのフォグでは、通常のすべてのフォグの機能が働きますが、深度ではなく範囲を使って計算を行う点だけが異なります。

現在のところ、ピクセル単位の範囲ベースのフォグをサポートするハードウェアは存在しないため、範囲補正は頂点フォグでのみ行われます。

 

D3DRS_STENCILENABLE

ステンシルバッファによる処理を可能にするには TRUEにします。初期値は FALSE です。

 

D3DRS_STENCILFAIL

ステンシル テストに失敗したときに実行するステンシル処理を設定します。これには、D3DSTENCILCAPS 定数のいずれかが設定できます。初期値は D3DSTENCILOP_KEEP です。

D3DSTENCILCAPS定数は、次の種類があります。

      D3DSTENCILCAPS_KEEP

ステンシルバッファの内容は変更しません。

      D3DSTENCILCAPS_ZERO

ステンシルバッファの内容を0にします。

      D3DSTENCILCAPS_REPLACE

ステンシルバッファの内容を参照値に置き換えます。

      D3DSTENCILCAPS_INCRSAT

ステンシルバッファの内容を+1します。最大値以上は最大値にします。

      D3DSTENCILCAPS_DECRSAT

ステンシルバッファの内容を−1します。0以下は0にします。

      D3DSTENCILCAPS_INVERT

ステンシルバッファの内容をビット反転します。

      D3DSTENCILCAPS_INCR

ステンシルバッファの内容を+1します。最大値にきたら0にします。

      D3DSTENCILCAPS_DECR

ステンシルバッファの内容を−1します。0未満は最大値にします。

      D3DSTENCILCAPS_TWOSIDED

両面ステンシルバッファの設定を使用します。

 

D3DRS_STENCILZFAIL

ステンシル テストに合格し、深度テスト (Z テスト) に失敗した場合に実行するステンシル処理を設定します。これにはD3DSTENCILCAPS 定数のいずれかを設定します。初期値は D3DSTENCILOP_KEEP です。

 

D3DRS_STENCILPASS

ステンシル テストおよび深度 (Z) テストの両方にパスした場合に実行するステンシル処理を設定します。これには D3DSTENCILCAPS 定数のいずれかを設定します。初期値は D3DSTENCILOP_KEEP です。

 

D3DRS_STENCILFUNC

ステンシル テストのための比較関数を設定します。これには D3DCMPFUNC列挙型のメンバのいずれかを設定します。初期値は、D3DCMP_ALWAYS です。D3DCMPFUNCに関しては、D3DRS_ZFUNCの項目を見てください。

比較関数は、ステンシル バッファの要素を基準値と比較します。この比較は、基準値のビットと、ステンシル マスク (D3DRS_STENCILMASK レンダリング ステートにより設定されます) に設定されたステンシル バッファ要素にのみ適用されます。この比較関数の結果がTRUE の場合に、ステンシル テストに合格したことになります。

 

D3DRS_STENCILREF

ステンシル テストのための整数型の基準値です。初期値は 0 です。

 

D3DRS_STENCILMASK

基準値と、それぞれのステンシル バッファ要素に乗算を施し、ステンシル テストのための有効ビットを決定するためのマスク値です。初期値は 0xFFFFFFFF です。

 

D3DRS_STENCILWRITEMASK

ステンシル バッファに書き込む値に適用する書き込みマスクの値です。初期値は 0xFFFFFFFF です。

 

D3DRS_TWOSIDEDSTENCILMODE

両面ステンシルの機能を有効にします。この機能を活用するためには、D3DRS_CULLMODEにD3DCULL_NONEを設定してください。もし、射影空間のxy平面でのポリゴンの向きが時計方向ならば、D3DRS_STENCIL* の値がステンシルバッファの操作に使われます。反対方向ならば、D3DRS_CCW_STENCIL* が使われます。

両面ステンシル機能が使えるかどうかは、StencilCapsのD3DSTENCILCAPS_TWOSIDEDを調べる必要があります。

 

D3DRS_CCW_STENCILFAIL

CCWステンシルテストに失格した時の処理です。

 

D3DRS_CCW_STENCILZFAIL

CCWステンシルテストに合格して、深度テストに失格した時の処理です。

 

D3DRS_CCW_STENCILPASS

CCWステンシルテストと深度テストに合格した時の処理です。

 

D3DRS_CCW_STENCILFUNC

CCWステンシルテストで用いる比較関数です。

if ((参照値 & マスク) 比較関数 (ステンシル値 & マスク)) がTRUEの時にテストは合格します。

 

D3DRS_LIGHTING

DirectX の固定機能による光源計算を有効にします。有効にするには TRUE、無効にするには FALSE を設定します。初期値は TRUE です。頂点法線を含む頂点のみ正しくライトが当てられます。法線を含まない頂点では、法線ベクトルを0ベクトルにした計算が使用されます。

 

D3DRS_SPECULARENABLE

固定機能における鏡面反射を可能にするには、TRUE に設定します。初期値は FALSE です。

鏡面反射光は、光の当たっているオブジェクトの各頂点がそのオブジェクトの原点にあるかのように計算されます。つまり、頂点の法線だけに依存して計算します。これによって、オブジェクトは原点の周囲でモデル化されます。光源とオブジェクト間の距離が比較的大きい場合に限り、結果は正しくなります。

D3DRS_SPECULARENABLEを TRUE に設定すると、テクスチャを張った後の段階のアルファ合成をする前に、鏡面反射色が追加されます。

 

D3DRS_COLORVERTEX

頂点色を有効にします。有効にするには TRUE、無効にするには FALSE を設定します。初期値は TRUE です。頂点色を有効にすると、個々の頂点に定義された色が光源計算に含まれるようになります。

 

D3DRS_AMBIENT

環境光の色を設定します。この値はD3DCOLOR 型です。初期値は 0 です。

 

D3DRS_LOCALVIEWER

カメラとの相対角度に依存した鏡面反射光の計算をします。スペキュラ ハイライトを有効にするには、TRUE を設定します。直行スペキュラ ハイライトを使用するには、FALSE を設定します。デフォルト値は TRUE です。正射影を使用するアプリケーションでは FALSE を設定してください。

 

D3DRS_NORMALIZENORMALS

頂点法線の自動正規化を有効にします。有効にするにはTRUE、無効にするには FALSE を設定します。初期値は FALSE です。この機能を有効にすると、頂点がカメラ空間に変換された後で頂点法線が正規化されます。ただし、計算負荷は高くなります。

 

D3DRS_DIFFUSEMATERIALSOURCE

光源計算に使用される拡散色を指定します。有効な値は、D3DMATERIALCOLORCOURCE列挙型になります。初期値は D3DMCS_COLOR1 です。このレンダリング ステートの値が使用されるのは、D3DRS_COLORVERTEX レンダリング ステートが TRUE に設定されている場合だけです。

D3DMATERIALCOLORCOURCE列挙型は、次の種類があります。

      D3DMCS_MATERIAL

現在のマテリアルの色を使用します。

      D3DMCS_COLOR1

ディフューズ頂点色を使用します。

      D3DMCS_COLOR2

スペキュラ頂点色を使用します。

 

D3DRS_SPECULARMATERIALSOURCE

光源計算に使用される鏡面反射色を指定します。有効な値は、D3DMATERIALCOLORCOURCE列挙型になります。初期値はD3DMCS_COLOR2 です。

 

D3DRS_AMBIENTMATERIALSOURCE

光源計算に使用される環境色を指定します。有効な値は、D3DMATERIALCOLORCOURCE列挙型になります。初期値は D3DMCS_COLOR2 です。

 

D3DRS_EMISSIVEMATERIALSOURCE

光源計算に使用される発光照明色を指定します。有効な値は、D3DMATERIALCOLORCOURCE列挙型になります。初期値は D3DMCS_MATERIAL です。

 

D3DRS_VERTEXBLEND

ジオメトリ ブレンディングを実行するために使用する行列の個数を設定します。設定する値は D3DVERTEXBLENDFLAGS 列挙型のメンバです。初期値は D3DVBF_DISABLE です。

D3DVERTEXBLENDFLAGS列挙型は、次の種類があります。

      D3DVBF_DISABLE

頂点ブレンディングを無効にします。D3DTS_WORLDMATRIXマクロによって設定されたワールド行列のみを適用します。トランスフォーム ステートに対するインデックス値は 0 です。

      D3DVBF_1WEIGHTS

D3DTS_WORLDMATRIXマクロによって設定された 2 つの行列間の頂点ブレンディングを有効にします。トランスフォーム ステートに対するインデックス値は、0 および 1 です。

      D3DVBF_2WEIGHTS

D3DTS_WORLDMATRIXマクロによって設定された 3 つの行列間の頂点ブレンディングを有効にします。トランスフォーム ステートに対するインデックス値は、0, 1 および 2 です。

      D3DVBF_3WEIGHTS

D3DTS_WORLDMATRIXマクロによって設定された 4 つの行列間の頂点ブレンディングを有効にします。トランスフォーム ステートに対するインデックス値は、0, 1, 2 および 3 です。

      D3DVBF_TWEENING

頂点ブレンディングは、D3DRS_TWEENFACTOR に割り当てられた値を使って行います。

      D3DVBF_0WEIGHTS

1.0 の重みで単一の行列を使用する。

 

D3DRS_INDEXEDVERTEXBLENDENABLE

インデックス付きの頂点ブレンディングを有効にします。設定する値はBOOL値です。初期値はFALSEです。TRUE を設定すると、インデックス付き頂点ブレンディングが有効になります。このレンダリング ステートを有効にする場合は、まとめたDWORD を頂点ごとに行列インデックスとして渡さなければなりません。このレンダリング ステートを無効にして、D3DRS_VERTEXBLEND ステートを使って頂点ブレンディングすることは、すべての頂点について行列インデックス 0, 1, 2, 3 を指定して計算することと等しくなります。

 

D3DRS_TWEENFACTOR

トゥイーン係数を浮動小数点数値で制御します。初期値は0.0fです。

このレンダリング ステートの値は浮動小数点値です。IDirect3Ddevice9::SetRenderState メソッドは DWORD 値を使用するため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければなりません。

pDevice9->SetRenderState(D3DRS_TWEENFACTOR, *((DWORD*)&TweenFactor));

 

D3DRS_POINTSIZE

各頂点に対してポイント サイズが指定されていない場合に、ポイント サイズ計算で使用するサイズを浮動小数点値で指定します。頂点がポイント サイズを含んでいる場合、この値は使用されません。この値は、D3DRS_POINTSCALEENABLE が FALSE の場合はスクリーン空間単位で指定します。それ以外の場合は、ワールド空間単位で指定します。初期値は 1.0f です。この値の範囲は、0.0f 以上です。

このレンダリング ステートの値は浮動小数点値です。IDirect3Ddevice9::SetRenderState メソッドは DWORD 値を使用するため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければなりません。

pDevice9->SetRenderState(D3DRS_POINTSIZE, *((DWORD*)&PointSize));

D3DRS_POINTSIZE_MIN

ポイント スプライトが制限される最小サイズを浮動小数点値で指定します。レンダリングの間、ポイント プリミティブはこのサイズに抑えられます。1.0 より小さい値を設定したときに、ポイントにピクセルの中心が含まれずにアンチエイリアシングが無効になっている場合はポイントが表示されなくなります。アンチエイリアシングが有効になっている場合は低い輝度でレンダリングされます。初期値は 1.0f です。この値の範囲は、0.0f 以上です。

このレンダリング ステートの値は浮動小数点値です。IDirect3Ddevice9::SetRenderState メソッドは DWORD 値を使用するため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければなりません。

pDevice9->SetRenderState(D3DRS_POINTSIZE, *((DWORD*)&PointSize));

 

D3DRS_POINTSIZE_MAX

ポイント スプライトが制限される最大サイズを浮動小数点値で指定します。値は、D3DCAPS9 の MaxPointSize メンバ以下で、D3DRS_POINTSIZE_MIN 以上でなければなりません。初期値は64.0fです。

このレンダリング ステートの値は浮動小数点値です。IDirect3Ddevice9::SetRenderState メソッドは DWORD 値を使用するため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければなりません。

pDevice9->SetRenderState(D3DRS_PONTSIZE_MAX, *((DWORD*)&PointSizeMax));

 

D3DRS_POINTSPRITEENABLE

設定する値は、BOOL値です。TRUE を設定すると、テクスチャ全体が各ポイントにマッピングされるように、ポイント プリミティブのテクスチャ座標が設定されます。FALSE を設定すると、頂点のテクスチャ座標がポイント全体に対して使用されます。初期値は FALSE です。D3DRS_POINTSCALEENABLE に FALSE (デフォルト値) を設定し、D3DRS_POINTSIZE に 1.0 (デフォルト値) を設定することで、DirectX 7 スタイルのシングルピクセル ポイントを実現できます。

 

D3DRS_POINTSCALEENABLE

ポイント プリミティブに対するサイズの計算を制御します。設定する値は、BOOL値です。TRUE を設定すると、ポイント サイズは、カメラ空間の値として解釈され、距離関数および視錐台によってビューポートの Y 軸のスケーリングになるように調整されて、最終的なスクリーン空間のポイント サイズが計算されます。FALSE を設定すると、ポイント サイズはスクリーン空間の値と解釈されて、そのまま使われます。初期値は FALSE です。

 

D3DRS_POINTSCALE_A

ポイント プリミティブに対する距離ベースのサイズの減衰を浮動小数点値で制御します。D3DRS_POINTSCALEENABLE が TRUE の場合にのみ有効です。デフォルト値は 1.0f です。この値の範囲は、0.0f 以上になります。

このレンダリング ステートの値は浮動小数点値です。IDirect3Ddevice9::SetRenderState メソッドは DWORD 値を使用するため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければなりません。

pDevice9->SetRenderState(D3DRS_POINTSCALE_A, *((DWORD*)&PointScaleA));

 

D3DRS_POINTSCALE_B

ポイント プリミティブに対する距離ベースのサイズの減衰を浮動小数点値で制御します。D3DRS_POINTSCALEENABLE が TRUE の場合のみ有効です。デフォルト値は 0.0f です。この値の範囲は、0.0f 以上になります。

このレンダリング ステートの値は浮動小数点値です。IDirect3Ddevice9::SetRenderState メソッドは DWORD 値を使用するため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければなりません。

pDevice9->SetRenderState(D3DRS_POINTSCALE_B, *((DWORD*)&PointScaleB));

 

D3DRS_POINTSCALE_C

ポイント プリミティブに対する距離ベースのサイズの減衰を浮動小数点値で制御します。D3DRS_POINTSCALEENABLE が TRUE の場合のみ有効です。デフォルト値は 0.0f です。この値の範囲は、0.0f 以上になります。

このレンダリング ステートの値は浮動小数点値です。IDirect3Ddevice9::SetRenderState メソッドは DWORD 値を使用するため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければなりません。

pDevice9->SetRenderState(D3DRS_POINTSCALE_C, *((DWORD*)&PointScaleC));

 

D3DRS_PATCHEDGESTYLE

パッチ エッジが浮動小数点数スタイルのテッセレーションを使用するかどうかを設定します。設定可能な値は、D3DPATCHEDGESTYLE 列挙型で定義されます。初期値は、D3DPATCHEDGE_DISCRETEです。

D3DPATCHEDGESTYLE 列挙型は、次の種類があります。

      D3DPATCHEDGE_DISCRETE

個別エッジ スタイル。個別モードでは、浮動小数点数のテッセレーションを指定できますが、整数に切り詰められます。

      D3DPATCHEDGE_CONTINUOUS

連続エッジ スタイル。連続モードでは、テッセレーションは浮動小数点数値として指定され、なめらかに変化させて不自然な効果「ポッピング」を減少させることができます。

 

D3DRS_POSITIONDEGREE

Nパッチの座標の補間の程度を設定します。値は、D3DDEGREE_CUBIC (初期値) もしくは D3DDEGREE_LINEARが指定できます。

D3DDEGREETYPE列挙型は、次の種類があります。

      D3DDEGREE_LINEAR

曲線は、1次のオーダーで記述されます。

      D3DDEGREE_QUADRATIC

曲線は、2次のオーダーで記述されます。

      D3DDEGREE_CUBIC

曲線は、3次のオーダーで記述されます。

      D3DDEGREE_QUINTIC

曲線は、4次のオーダーで記述されます。

 

D3DRS_NORMALDEGREE

Nパッチの法線の補間の程度を設定します。値は、D3DDEGREE_LINEAR (初期値) もしくはD3DDEGREE_QUADRATICが指定できます。

 

D3DRS_ENABLEADAPTIVETESSELATION

適応型テッセレーションを有効にします。初期値はFALSEです。

 

D3DRS_MINTESSELATIONLEVEL

テッセレーションのレベルの最小値を指定します。初期値は1.0fです。

 

D3DRS_MAXTESSELATIONLEVEL

テッセレーションのレベルの最大値を指定します。初期値は1.0fです。

 

D3DRS_ADAPTIVETESS_X

X軸方向に関する適応型テッセレーションの量を設定します。初期値は0.0fです。

 

D3DRS_ADAPTIVETESS_Y

Y軸方向に関する適応型テッセレーションの量を設定します。初期値は0.0fです。

 

D3DRS_ADAPTIVETESS_Z

Z軸方向に関する適応型テッセレーションの量を設定します。初期値は0.0fです。

 

D3DRS_ADAPTIVETESS_W

W軸方向に関する適応型テッセレーションの量を設定します。初期値は0.0fです。

 

D3DRS_DEBUGMONITORTOKEN

モニタをデバッグする場合にのみ設定します。設定可能な値は、D3DDEBUGMONITORTOKENS 列挙型で定義されます。D3DRS_DEBUGMONITORTOKEN が設定されている場合、この呼び出しはデバッグ モニタへのトークンの受け渡しとして処理されることに注意してください。たとえば、D3DDMT_ENABLE または D3DDMT_DISABLE を D3DRS_DEBUGMONITORTOKEN に渡した後、ほかのトークンの値が渡された場合、デバッグ モニタのステート (有効または無効) は変化しません。

このステートは、デバッグ ビルドでのみ有用です。デバッグ モニタの初期値は D3DDMT_ENABLE になります。

D3DDEBUGMONITORTOKENS列挙型は、次の種類があります。

      D3DDMT_ENABLE

モニタのデバッグを有効にします。

      D3DDMT_DISABLE

モニタのデバッグを無効にします。