カスタムレンダラー

 ふう、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とかはカメラを検出して位置変更とかもしてるが。