カスタムレンダラー
ふう、Direct3Dのことを改めて勉強しなおして良かったぜよ。Irrlichtの機能として無い(使いたいTextureStateやRenderStateの組み合わせが無い時)描画システムの組み込み方をなんとか理解できた。
方法は二つ。
- カスタムシーンノードを使う
- MaterialRendererを増やす
DLL形式使ってる場合は問答無用で上の方法しか使えないけど、下の方が応用範囲は広いので下でやった方が良いかな。マルチプラットフォームは気にしたらできないの気にしないw
Driverの中にMaterialRenderのarrayがあって、SMaterialのメンバであるMaterialTypeに応じて選択されるようになっている。デフォルトのMaterialRenderはDirver初期化時(createMaterialRenderers)に生成されているので、その辺りに自前のMaterialRenderを差し込むと良い。こうすると、MaterialTypeを変更するだけで、全シーンで利用できるようになるので、カスタムシーンより応用が効く。
2D描画であると嬉しいマスク描画を足してみようと思われ。マスクはマルチテクスチャを使う方向で。0ステージのテクスチャを、1ステージのテクスチャでマスクする。
ちなみに、Shaderを使う方法のサンプルを細部まで追うとわかりやすい。指定したShaderを使うMaterialRenderが追加されてるので。
ようはIrrlichtのdrawなんとか関数はMaterialを自動設定してくれるヘルパに過ぎない。
シーンノードは複数のMaterialを持つことが出来て、保持してる複数のMaterialを組み合わせて描画してくれると。BillboardSceneNodeとかはカメラを検出して位置変更とかもしてるが。