- RenderStateのメモ
- RenderState一覧
- D3DRS_ZENABLE
- D3DRS_FILLMODE
- D3DRS_SHADEMODE
- D3DRS_ZWRITEENABLE
- D3DRS_ALPHATESTENABLE
- D3DRS_LASTPIXEL
- D3DRS_SRCBLEND
- D3DRS_DESTBLEND
- D3DRS_CULLMODE
- D3DRS_ZFUNC
- D3DRS_ALPHAREF
- D3DRS_ALPHAFUNC
- D3DRS_DITHERENABLE
- D3DRS_ALPHABLENDENABLE
- D3DRS_FOGENABLE
- D3DRS_SPECULARENABLE
- D3DRS_FOGCOLOR
- D3DRS_FOGTABLEMODE
- D3DRS_FOGSTART
- D3DRS_FOGEND
- D3DRS_FOGDENSITY
- D3DRS_RANGEFOGENABLE
- D3DRS_STENCILENABLE
- D3DRS_STENCILFAIL
- D3DRS_STENCILZFAIL
- D3DRS_STENCILPASS
- D3DRS_STENCILFUNC
- D3DRS_STENCILREF
- D3DRS_STENCILMASK
- D3DRS_STENCILWRITEMASK
- D3DRS_TEXTUREFACTOR
- D3DRS_WRAP0~WRAP7
- D3DRS_CLIPPING
- D3DRS_LIGHTING
- D3DRS_AMBIENT
- D3DRS_FOGVERTEXMODE
- D3DRS_COLORVERTEX
- D3DRS_LOCALVIEWER
- D3DRS_NORMALIZENORMALS
- D3DRS_DIFFUSEMATERIALSOURCE
- D3DRS_SPECULARMATERIALSOURCE
- D3DRS_AMBIENTMATERIALSOURCE
- D3DRS_EMISSIVEMATERIALSOURCE
- D3DRS_VERTEXBLEND
- てんぷれ
- 参考リンク
RenderStateのメモ
E3DSetRenderStateを使用することで、オブジェクトが持つステータスを変更する事ができる。うまく利用すれば様々な便利な処理を行う事ができるが、初心者には扱いにくい。
おちゃっこ氏は「DirectXのマニュアル見てね^^」というスタンスだが、まあそのマニュアルっつーのもチルドレン達にとっては見れたものではないので、暇つぶしにでもまとめてみようと思う。
マイクソソフトのマニュアルを読んで投げ出してしまった人は、コレを気にもう一度実験してみてはどうだろうか。
注意点
- Easy3Dは内部で独自処理を行っているらしく、設定しても効果がないものもある
- 一部の機能はハードウェアのサポートがいるため、環境依存である
- Easy3D側で別途ステータスを変更する命令が用意されているならそれを使うべき
- ステータスをメチャクチャに変更し、バグが出たりしてもシラネ
- おちゃっこ氏にきかないように
- 俺にも聞かないように
- 用途は不明。自分で見いだせ。そして俺に教えてくれ
RenderState一覧
TRUEを指定すべき所では非0、FALSEを指定すべき所では0を指定すればいいっぽい。
特に書かない限り、非0のところでは1を指定することにした。
また、DirectXではパラメータが定数として定義されているが、ここでは整数値に読み替えて説明する。
今後サンプル等、いいページがあればリンクを貼っていくし、俺が勝手に実験した結果を載せるかもしれない。
D3DRS_ZENABLE
与える引数 | 7 |
パラメータ | 0 |
1 | |
2 | |
デフォルト値 | 1 |
E3Dでの動作 | ? |
Zバッファについての設定を行う。0を指定した場合、パーツのZバッファが無効になる。1を指定するとZバッファを利用する。2を指定するとWバッファというものを利用する。ただしWバッファを利用するにはハードウェアのサポートが必要だ。
Wバッファについて適当に解説すると、Zバッファをちょっと改良したもので、精度がよいらしい。
D3DRS_FILLMODE
与える引数 | 8 |
パラメータ | 1 |
2 | |
3 | |
デフォルト値 | 3 |
E3Dでの動作 | ○ |
塗りつぶし状態の設定を行う。1を指定した場合、オブジェクトの頂点のみが描写される。2を指定した場合は、頂点と辺のみが描写される。所謂ワイヤーフレーム。3を指定すると、通常通り、面全てが描写される。
D3DRS_SHADEMODE
与える引数 | 9 |
パラメータ | 1 |
2 | |
3 | |
デフォルト値 | 2 |
E3Dでの動作 | ○ |
シェードモードの設定。オイラはわりとよく使う。効果についてはココも参照。
1を指定するとフラットシェーディング。所謂スムージングOFF状態であり、1頂点の色情報が全ての面にベタ塗りされる。あえてカクカク状態を表現する場合にはコレを使う。2を指定するとグーローシェーディングとなり、影が各頂点ごとに補完され、滑らかな表示となる。スムージングON。3を指定するとフォンシェーディングとなるが、対応していない。
D3DRS_ZWRITEENABLE
与える引数 | 14 |
パラメータ | 0 |
1 | |
デフォルト値 | 1 |
E3Dでの動作 | ○ |
Zバッファの書き込みを制御する。0を指定した場合、Zバッファに書き込みを行わなくなる。今までのZバッファを参照し描写を行うが、Zバッファの値を更新しない、という意味だと思う。うまく設定すれば描写が簡略化できるかもしれない。エフェクトなんかに使うのかな?
オブジェクトの順序を入れ替えておかないと大変な事になる。具体的にはこうなる。
左が、0を指定した状態。最初に髪の毛が描写されるが、Zバッファが更新されないため顔がその上にどかっと描写され前髪が消える。ブーツも足を無視して描写されている。カメラの向きが固定されていればメタセコのオブジェクトの順序を変更すればいいと思う。
でも恐らく、こういった複雑なモデルに適用するようなものではない。
D3DRS_ALPHATESTENABLE
与える引数 | 15 |
パラメータ | 0 |
1 | |
デフォルト値 | 0 |
E3Dでの動作 | ? |
アルファテストの有効無効を切り替える。デフォルトはFALSE。アルファテストっつーのは、ある一定の数字を決めて、その数字よりアルファ値が高いピクセルのみを描写する。TRUEにすると有効になる。わからねー場合は適当にぐぐれば出てくる。透明なテクスチャを多用する場合に使えるほか、工夫次第でかなり色々な事ができそうだ。なお、比較に利用するある一定の値、というのは別の所で設定する。
D3DRS_LASTPIXEL
与える引数 | 16 |
パラメータ | 0 |
1 | |
デフォルト値 | 1 |
E3Dでの動作 | ? |
各線の最後の頂点を描写するかどうかの設定。デフォルトはTRUE。例えば、V字のような連続した2本の折れ線を書く場合、最初の1本目の終わりの点の上に二本目の最初の点が描写される。コレによって見栄えが悪くなる場合にFALSEを設定すれば改善される。
D3DRS_SRCBLEND
与える引数 | 19 |
パラメータ | 1~15 |
デフォルト値 | 1 |
E3Dでの動作 | ? |
画像合成を行う際の、ソース画像ブレンディングモードの設定を行う。これと後述するD3DRS_DESTBLENDを適宜設定することで加算合成を行ったりする事が可能となる。
二枚の画像をどのようにブレンドするか、という事を設定するのだが、それぞれをSRCとDESTとし、各々の設定を変更する事で様々な表現が可能だ。
与えるパラメータによってブレンディング関数が変更される。一覧はマイクソソフトのところに書いてあるのでリンクを貼ろうかと思ったが、もっと見やすいところを発見したのでリンクを貼っておく。
D3DRS_DESTBLEND
与える引数 | 20 |
パラメータ | 1~15 |
デフォルト値 | 1 |
E3Dでの動作 | ? |
DESTのブレンディングモードを設定する。↑の項目を参照。
D3DRS_CULLMODE
与える引数 | 22 |
パラメータ | 1 |
2 | |
3 | |
デフォルト値 | 3 |
E3Dでの動作 | ? |
ポリゴンの背面(カメラから見えない面)のカリングの設定を行う。1を指定すると、カリングが行われない。2の場合は右回り、3の場合は左回りにカリングする。
D3DRS_ZFUNC
与える引数 | 23 |
パラメータ | 1~8 |
デフォルト値 | 4 |
E3Dでの動作 | ○ |
Zバッファ利用時の、計算結果に対する設定。Zバッファの値を参照した際、どのような状態のときに描写を行う、という定義を変更する事ができる。
奥にあるオブジェクトを透視するとか、一部表現でナイスな動作を提供してくれるはず
- 1:Zバッファに関わらず常に描写されない
- 2:Zバッファの値より、小さい時(手前にあるとき)描写される
- 3:Zバッファの値と等しい時に描写される
- 4:Zバッファの値以下の時(同じか、手前にあるとき)描写される
- 5:Zバッファの値より、大きい時(奥にあるとき)描写される
- 6:Zバッファの値と等しくない時に描写される
- 7:Zバッファの値以上の時(同じか、奥にあるとき)描写される
- 8:Zバッファに関わらず常に描写される
D3DRS_ALPHAREF
与える引数 | 24 |
パラメータ | 0~255 |
デフォルト値 | 0 |
E3Dでの動作 | ? |
アルファテスト利用時の基準となる透明度。0から255の間で指定する。
D3DRS_ALPHAFUNC
与える引数 | 25 |
パラメータ | 1~8 |
デフォルト値 | 8 |
E3Dでの動作 | ? |
アルファテストにおける、計算結果の設定。値についてはD3DRS_ZFUNCと同じ。
D3DRS_DITHERENABLE
与える引数 | 26 |
パラメータ | 0 |
1 | |
デフォルト値 | 0 |
E3Dでの動作 | ? |
ディザリングの設定。デフォルトはFALSE。ディザリングを行うと、グラデーションを滑らかに表示させることが出来るはず。ただしテクスチャの解像度が犠牲になる。
D3DRS_ALPHABLENDENABLE
与える引数 | 27 |
パラメータ | 0 |
1 | |
デフォルト値 | 0 |
E3Dでの動作 | ? |
アルファブレンドを行う際に、透明化に関する設定。デフォルトはFALSE。
D3DRS_FOGENABLE
与える引数 | 28 |
パラメータ | 0 |
1 | |
デフォルト値 | 0 |
E3Dでの動作 | ○ |
フォグに関する設定。デフォルトはFALSE。オブジェクトのパーツ単位でフォグの有効無効を切り替える事ができる。E3Dにはフォグを設定する命令がそれぞれ用意されているので、これを直接弄るような場面は少ないのではないだろうか。
E3Dではパーツ単位で設定する事ができないので、オブジェクトの一部分にフォグをかけたくない場合などに設定すると良いだろう。
D3DRS_SPECULARENABLE
与える引数 | 29 |
パラメータ | 0 |
1 | |
デフォルト値 | 0 |
E3Dでの動作 | ○ |
スペキュラーハイライトの設定。デフォルトはFALSE。
これを有効にすると、金属のようにテカテカする表示となる。
D3DRS_FOGCOLOR
与える引数 | 34 |
パラメータ | 0~4294967295 |
デフォルト値 | 0 |
E3Dでの動作 | ○ |
フォグの色を設定する。HSPからコイツを設定するより、E3D側で設定する命令があるのでそれを使うべきである。めんどい。
D3DRS_FOGTABLEMODE
与える引数 | 35 |
パラメータ | 0~3 |
デフォルト値 | 0 |
E3Dでの動作 | ? |
ピクセルフォグの設定を行う。現在の所、0か3しか指定できない。
E3Dでピクセルフォグが使えるのかどうか不明。タブン使えないはずだ。
D3DRS_FOGSTART
与える引数 | 36 |
パラメータ | 0.0f~ |
デフォルト値 | 0.0f |
E3Dでの動作 | ? |
フォグの開始距離。視点からの相対距離のはず。E3Dの命令で設定したほうがいい。
D3DRS_FOGEND
与える引数 | 37 |
パラメータ | 0.0f~ |
デフォルト値 | 1.0f |
E3Dでの動作 | ? |
フォグの終了距離。視点からの相対距離のはず。開始距離と共にE3Dの命令で設定したほうがいい。
D3DRS_FOGDENSITY
与える引数 | 38 |
パラメータ | 0.0~1.0 |
デフォルト値 | 1.0 |
E3Dでの動作 | 恐らく× |
指数フォグ利用時のフォグ密度の設定。E3Dでは指数フォグが使えないので、このステータスは機能しないはずである。
D3DRS_RANGEFOGENABLE
与える引数 | 48 |
パラメータ | 0 |
1 | |
デフォルト値 | 0 |
E3Dでの動作 | ? |
範囲フォグモードの設定。デフォルトはFALSE。通常は視点からみた深度フォグが使われるが、範囲フォグモードにすると深度の代わりに距離が使用される。
視点が移動する際に深度フォグより精度の高いフォグが期待できるが、計算に時間がかかる。
D3DRS_STENCILENABLE
与える引数 | 52 |
パラメータ | 0 |
1 | |
デフォルト値 | 0 |
E3Dでの動作 | ? |
ステンシル処理の有効無効を切り替える。デフォルトはFALSE。ステンシル処理というのは恐らく、Zバッファ的な事と似たようなもので、描写する、しないをマスキングテープのように自在に設定できるとかそんな感じだと思う。ステンシル処理を使用すると、影の描写などを行う事ができる。
D3DRS_STENCILFAIL
与える引数 | 53 |
パラメータ | 1,2,4,8,16,32,64,128,256 |
デフォルト値 | 0 |
E3Dでの動作 | ? |
ステンシルバッファを利用した時に、描写されない、と判断された際の処理を設定する。ビットを立てていくのだと思う。
- 1:ステンシルバッファの情報を変更しない
- 2:ステンシルバッファを0にする
- 4:ステンシルバッファを基準値で書き換える
- 8:ステンシルバッファの値を最大値まで増加させる
- 16:ステンシルバッファの値を0になるまで減少させる
- 32:ステンシルバッファのビット情報を反転させる
- 64:ステンシルバッファの値を上昇させ、最大値に達した場合0に戻す
- 128:ステンシルバッファの値を減少させ、0になった場合には最大値に戻す
- 256:両面ステンシルをサポートする
D3DRS_STENCILZFAIL
与える引数 | 54 |
パラメータ | 1,2,4,8,16,32,64,128,256 |
デフォルト値 | 0 |
E3Dでの動作 | ? |
ステンシルバッファを利用した時に、ステンシルバッファのテストはパスしたが、Zバッファと比較した結果描写されない、と判断された際の処理を設定する。設定する値については↑を見るべし
D3DRS_STENCILPASS
与える引数 | 55 |
パラメータ | 1,2,4,8,16,32,64,128,256 |
デフォルト値 | 0 |
E3Dでの動作 | ? |
ステンシルバッファを利用した時に、ステンシルバッファ、Zバッファ双方と比較して、描写する、と判断された時の動作を設定する。設定する値については↑を参照。
D3DRS_STENCILFUNC
与える引数 | 56 |
パラメータ | 1~8 |
デフォルト値 | 8 |
E3Dでの動作 | ? |
ステンシルテストにおける、計算結果の設定。値についてはD3DRS_ZFUNCと同じ。
D3DRS_STENCILREF
与える引数 | 57 |
パラメータ | 0~ |
デフォルト値 | 0 |
E3Dでの動作 | ? |
ステンシルテストに利用する時の基準値をセットする。
D3DRS_STENCILMASK
与える引数 | 58 |
パラメータ | 0,1,2,4,8.... |
デフォルト値 | 4294967295 |
E3Dでの動作 | ? |
ステンシルテストにおいて、有効ビットを決定するためのマスク。各ビット値を立てたところが有効となる。デフォルトではFFFFFFFFとなっており、全て有効である。
D3DRS_STENCILWRITEMASK
与える引数 | 59 |
パラメータ | 0,1,2,4,8.... |
デフォルト値 | 4294967295 |
E3Dでの動作 | ? |
ステンシルバッファの書き込みにおいて、有効ビットを決定するためのマスク。各ビット値を立てたところが有効となる。デフォルトではFFFFFFFFとなっており、全て有効である。
D3DRS_TEXTUREFACTOR
与える引数 | 60 |
パラメータ | 0~4294967295 |
デフォルト値 | 4294967295 |
E3Dでの動作 | ? |
D3DTA_TFACTOR テクスチャ ブレンディング引数 または D3DTOP_BLENDFACTORALPHA テクスチャ ブレンディング処理による マルチテクスチャ ブレンディングで使われる色。関連する値は D3DCOLOR 変数である。 デフォルト値は不透明の白 (0xFFFFFFFF) である。
マイクソソフトの資料から引用してみた。お願いですから日本語で説明してください。
まあ適当に説明すると、複数のテクスチャを一つの面に重ねて貼り付ける際に利用するアルファ値という事になると思う。複数のテクスチャを貼り付ける手法は2種類あるが、そのうち一つはハードウェアのサポートが必要となる。
マルチテクスチャブレンディングは、ハードウェアのサポートを必要としないがパフォーマンスは劣る。
D3DRS_WRAP0~WRAP7
与える引数 | 128~135 |
パラメータ | 0,1,2,4,.... |
デフォルト値 | 0 |
E3Dでの動作 | ? |
テクスチャのラッピングの設定。4ビットのフラグそれぞれを立てることで、最大4方向のラッピング設定を有効に出来る。
簡単に言えば、テクスチャのUV座標がテクスチャのサイズより大きいと、面にテクスチャが張られない部分が出来てしまうが、そこに対してテクスチャを貼る処理を行える。U方向は有効、V方向は無効、という風に設定できる。このテクスチャを貼る処理をラッピングというらしい。
D3DRS_CLIPPING
与える引数 | 136 |
パラメータ | 0 |
1 | |
デフォルト値 | 1 |
E3Dでの動作 | ? |
クリッピングの設定。デフォルトはTRUE。恐らく、画面の外に出てしまったポリゴンの描写をスキップするか否か。
D3DRS_LIGHTING
与える引数 | 137 |
パラメータ | 0 |
1 | |
デフォルト値 | 1 |
E3Dでの動作 | ○ |
ライティングの設定。デフォルトはTRUE。無効にしたオブジェクトに対してライティングが反映されない。こうなる。
オブジェクト単位で設定可能なので、一部分だけ無効にするといったことも可能。手だけ無効にしてみた。
D3DRS_AMBIENT
与える引数 | 139 |
パラメータ | 0~4294967295 |
デフォルト値 | 0 |
E3Dでの動作 | ? |
アンビエント色の設定。Easy3D側で設定するべきである。
D3DRS_FOGVERTEXMODE
与える引数 | 140 |
パラメータ | 0 |
1 | |
2 | |
3 | |
デフォルト値 | 0 |
E3Dでの動作 | ○ |
頂点フォグを利用する際のフォグ形式。現在は、0(無効)もしくは3(線形フォグ)しか利用できない。
D3DRS_COLORVERTEX
与える引数 | 141 |
パラメータ | 0 |
1 | |
デフォルト値 | 1 |
E3Dでの動作 | ×? |
頂点単位の色計算を有効、無効にする。デフォルトはTRUE。これを有効にしたうえで、Ambient,Diffuse,Supecular,Emissive色を設定する事で、オブジェクトの色を変更できる。
・・・ハズなのだが、こやつを無効にしても、有効にした時と同じで何の変化もない。ナゼだ。
D3DRS_LOCALVIEWER
与える引数 | 142 |
パラメータ | 0 |
1 | |
デフォルト値 | 1 |
E3Dでの動作 | ? |
スペキュラー(反射光)の方向に関する設定。デフォルトはTRUE。射影を行うと面とカメラの角度が変化するが、有効にした場合はカメラとの相対角度で反射光を計算するらしい。
D3DRS_NORMALIZENORMALS
与える引数 | 143 |
パラメータ | 0 |
1 | |
デフォルト値 | 0 |
E3Dでの動作 | ? |
頂点法線の自動正規化を行うか否か、とかいてある。デフォルトはFALSE。
環境マッピングなる機能を利用する際にはこれを有効にしておかないとダメらしい。が、負荷が高い。
ちょっと調べてみたがEasy3Dの影描写などには関係ないっぽいので無効にしておいていいはず。
D3DRS_DIFFUSEMATERIALSOURCE
与える引数 | 145 |
パラメータ | 0 |
1 | |
2 | |
デフォルト値 | 1 |
E3Dでの動作 | ×? |
Diffuse色のソースを決める。Diffuse色は物体が光源に照らされて明るくなる際の色だが、それを別の色と連動させたりする事ができるようだ。
0の場合はマテリアル色(アンビエント?)を使う。1の場合はDiffuse色を使う。2の場合はSpecular色を使う。
・・・ハズなのだが、変えても変化がない。
D3DRS_SPECULARMATERIALSOURCE
与える引数 | 146 |
パラメータ | 0 |
1 | |
2 | |
デフォルト値 | 2 |
E3Dでの動作 | ×? |
Specular色のソースを決める。↑を参照。弄っても変化がない。
D3DRS_AMBIENTMATERIALSOURCE
与える引数 | 147 |
パラメータ | 0 |
1 | |
2 | |
デフォルト値 | 0 |
E3Dでの動作 | ×? |
Ambient色のソースを決める。↑参照。弄っても変化がない。
D3DRS_EMISSIVEMATERIALSOURCE
与える引数 | 148 |
パラメータ | 0 |
1 | |
2 | |
デフォルト値 | 0 |
E3Dでの動作 | ? |
Emissive色のソース。↑参照。弄っても変化がない。
D3DRS_VERTEXBLEND
与える引数 | 151 |
パラメータ | 0,1,2,3,255,256 |
デフォルト値 | 0 |
E3Dでの動作 | ×? |
スキニングに関係がありそうな頂点ブレンディングの設定。だが、弄ってみても変化なし。
てんぷれ
与える引数 | 7 |
パラメータ | 0 |
1 | |
2 | |
デフォルト値 | 1 |
E3Dでの動作 | ? |
Zバッファについての設定を行う。0を指定した場合、パーツのZバッファが無効になる。1を指定するとZバッファを利用する。2を指定するとWバッファというものを利用する。ただしWバッファを利用するにはハードウェアのサポートが必要だ。
Wバッファについて適当に解説すると、Zバッファをちょっと改良したもので、精度がよいらしい。