マテリアルの送り方。
XNA!XNA!C#!C#!と周りに叫んでいるのですが,最近はちょっとプログラムを組んでいませんでした。
…というのも,自分で書いたエフェクトファイルを使って,シェーダの方に色を渡すやりかたがわからなかったんですよ。
単色とかテクスチャを使ってしまえば,プログラムの方で読み込んで送れば済む話なのですが,テクスチャ作るの面倒なのですよ。できればファイルに格納されているマテリアルを自分で書いたシェーダに渡す方法がわからなくてずっとなやんでいたのですが,「ひにけにXNA」あたりに書いてあるんじゃないかと思い,記事をあさっていたらありました。
http://blogs.msdn.com/ito/archive/2007/12/21/rendering-a-model-with-a-custom-effect.aspx
カスタムエフェクトを使うってやつです。Creators Club OnlineにあるXNAのサンプルを早速ダウンロードしていじってみました。
あとついでにアンチエイリアス(4xAA)もかけてみたのですが,劇的に違いますね。
ポリゴンのジャギーが全然気にならないですよ!
で,マテリアルの送り方なのですが
// ここで任意のエフェクトパラメーターの設定もできる
myMaterial.OpaqueData.Add("Shininess", basicMaterial.SpecularPower * 10);
ということろで,
myMaterial.OpaqueData.Add("ModelDiffuse", basicMaterial.DiffuseColor);
myMaterial.OpaqueData.Add("ModelSpecular", basicMaterial.SpecularColor);
という風にシェーダに送りたいパラメータを追加してやればよいみたいです。
サンプルなんかでは,エフェクトファイルを直接指定したりしているんですが,使い回すことが多い場合,いちいちcsファイルを立ち上げて変更するのは面倒です。
そんなわけで,プロパティの項目からエフェクトファイルを指定したりできるようにしてみたりしました。
何も知らない状態だと「XNAって面倒だな~」という風に思うのですが,知っている状態だと「意外と便利!」と思えます。
日本ではXNA GSについての本がやたらと少ない(DirectX 10もそうだけど…)ので,誰か現役のゲームプログラマーさんが書いてくれないかな~なんておもっているんですけどね。ホントだれか書いてくれないですかね?書いてくれたら即買いするんですけど。
この記事へのコメントは終了しました。
コメント