スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

マテリアルの受け渡し

メタセコで素材の設定を行ったとしてそれをエルフレイナでXファイルにする。

コンテントパイプラインでそれを受け取りエフェクトにパラメータを設定してやる。

effectMaterial.Effect = new ExternalReference(effectFile);
effectMaterial.OpaqueData.Add("ModelDiffuseColor", basicMaterial.DiffuseColor);
effectMaterial.OpaqueData.Add("ModelSpecularColor", basicMaterial.SpecularColor);
effectMaterial.OpaqueData.Add("ModelEmissiveColor", basicMaterial.EmissiveColor);

といった感じで設定できる。

ここでメタセコのデータがこちらまで届いていないことが分かる。

結論からいうとエルフレイナのXファイル書き出しを行った時点でスペキュラなどの値はデフォルトに一律設定されてしまうようだ。

また
Xファイル内で
Material {
1.000000;1.000000;1.000000;1.000000;;
0.000000; ←ここが SpecularPower
1.000000;1.000000;1.000000;; ←ここが SpecularColor
0.400000;0.400000;0.400000;;


SpecularPowerが0の場合上記の方法でエフェクトに登録しようとエラーになるバグがあるようだ。
0で無ければエラーにはならないし、basicMaterial.SpecularPowerを使わずに数値で0を設定すればエラーにならない。
多分XNA側の問題だろう。
try
{
effectMaterial.OpaqueData.Add("SpecularPower", basicMaterial.SpecularPower.Value);
}
catch (Exception)
{
effectMaterial.OpaqueData.Add("SpecularPower", 0.0f);
}
で切り抜けよう。


さて、素材パラメータを手動で設定する作業がどこかで必要になる。
以前ブログで紹介した「モデルじゃなくてテクスチャごとにするべきだった!」のところを結局いじることになる。
テクスチャごとにXMLファイルを用意して高さ情報から素材感を表すパラメータ、光の当たり方などのデータを全部持たせることにした。柔軟性もあるし作ってしまえば満足の仕様。うん。よし。

おおまかな「表示する」ためのプログラムまわりが出来てきたように思える。
@ちょっとでモーションにいけそうな気がしないでもない。
そして猫ペイント楽しい。

もやっと。

コメントの投稿

非公開コメント

プロフィール

あしゅ

Author:あしゅ
ぷぃぷぃ日常。
いつのまにか雑記ブログに。

カテゴリ
最新記事
検索フォーム
最新コメント
リンク
このブログをリンクに追加する
ブロとも申請フォーム

この人とブロともになる

カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。