DirectX9でMMEのエフェクトを使用したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
NullPo
記事: 2
登録日時: 10年前

DirectX9でMMEのエフェクトを使用したい

#1

投稿記事 by NullPo » 10年前

質問させていただきます。

現在、学校の授業の一貫でチームでのゲーム制作を行っております。APIはDirectX9を使用しております。DXLib等のライブラリは使用しておりません。
MMEのエフェクトを使用できないかと思って試行錯誤してみましたが上手く動作せずお手上げ状態です。

とりあえずビームマンPさん(http://www43.atwiki.jp/beamman/pages/13.html)のバーニアを使用しようと思いました。

コード:

//フィルライト色
float3 ParticleColor
<
   string UIName = "ParticleColor";
   string UIWidget = "Color";
   bool UIVisible =  true;
> = float3(0.1,0.5,1);
MMMのUI部分は<>内を消し
float4x4 world_matrix : World;
等は右側を消してアプリケーション側から渡すようにしています。

他は特に触らずそのままシェーダーを適用してモデルを描画しています。

しかし結果は何も出ませんでした。
ResourcesNameの部分で画像が上手く読み込めてない??と思いピクセルシェーダでfloat4(1,1,1,1)を返すと白い棒がV字にわかれたとてもバーニアには見えない物体が表示されました。


http://mosapui.blog116.fc2.com/blog-entry-42.html情報はこちらの方のしかなく、説明を読んでもあまり理解できませんでした。

MMEのシェーダーを使用するにはどうすればいいでしょうか。
なにかサンプルコード等があれば幸いです。

自身はHLSLを触るのは初めてで、C++の理解度は初心者~中級者レベルだと思います。

よろしくお願いします。

OS windows7
コンパイラ VisualStudio2013

アバター
lriki
記事: 88
登録日時: 14年前

Re: DirectX9でMMEのエフェクトを使用したい

#2

投稿記事 by lriki » 10年前

こんばんは。

HLSLを触るのは初めてということなので少し勘違いされているかもしれません。
DirectX9 であればシェーダのインターフェイスである ID3DXEffect を使用していると思いますが、
ID3DXEffect はアノテーションの名前、型、値までしか管理せず、そのアノテーションがプログラマにとって何を意味しているのかは関与しません。

つまり、今回のような ResourceName アノテーションを理解して自動で画像ファイルをロードしてくれたりはしません。
ResourceName というアノテーションが何をするのかを決めるのは、DirectXを使ってアプリやゲームを作るプログラマです。

具体的にはエフェクトを D3DXCreateEffectFromFile() 等で作成した後、
・エフェクトにはどのような変数が含まれているのか
・変数はどのようなアノテーションを持っているのか
・そのアノテーションの型と名前は何か
・アノテーションの値は何か
これらを自分でチェックして string 型の ResourceName が見つかったら、その値で
D3DXCreateTextureFromFile() 等を使用してテクスチャを読み取り、変数にセットしてあげる必要があります。

これを実現するためには以下の関数を使用します。
ID3DXEffect::GetParameter
ID3DXEffect::GetParameterDesc
ID3DXEffect::GetAnnotation
ID3DXEffect::GetString

ResourceName の対応だけならそれほど難しくはありませんし、
今回のバーニアエフェクトはそれだけでも足りると思います。

念のためですが、完全な MME の実装は相当に骨が折れますのでご注意を。

MME のエフェクトをそのまま使うのではなくあくまで参考にし、
自分のゲーム用に再実装する方が学習としても時間としても良いのかなと思います。


それでも!ということであればご参考までに・・・

C#ですがMMEの対応を進めているらしいOSSプロジェクトがあります。
https://mmflex.codeplex.com/

もうひとつ、MMEに8割ほど対応した拙作ゲームエンジンです。MMEの実装をしたのは学生の頃でしたが精根尽き果てて放置気味です。。。
https://lightnote.codeplex.com/
ソースは以下のファイルが参考になると思います。
LightNote/Source/Core/Graphics/Device/DirectX9/DX9Shader.cpp
LightNote/LightNote/Source/Core/Scene/SceneShader

NullPo
記事: 2
登録日時: 10年前

Re: DirectX9でMMEのエフェクトを使用したい

#3

投稿記事 by NullPo » 10年前

lrikiさんありがとう御座います。
ご指摘通りアノテーション等の理解度がまだまだ足りないみたいです。
とりあえず教えていただいた事を参考に実装してみたいと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る