ページ 11

DXライブラリ側でのテクスチャの読み込み

Posted: 2013年9月12日(木) 01:41
by ても
当方VC++とDXライブラリを用いて3Dゲームの製作を試みているのですが、製作したモデルのテクスチャの読み込みで行き詰っています。

Blenderにて製作したモデルを用いているのですが、テクスチャのパスまで書き出してくれない(○○.jpgとだけ)為に、モデルと同じ階層にテクスチャ画像を置かないと、マテリアルそのままのモデルが表示されてしまいます。
同じ場所に置けば上手く表示してくれますが、出来ればモデルならData\Model テクスチャならData\Texture と言う風にフォルダ分けしたいのです。

こちらで試みた手段は、
1.エクスポートしたモデルファイル(xファイル)のテクスチャのパスを直に書き換えてやる
2.DXライブラリのMV1SetTextureGraphHandle関数を用いて、グラフィックハンドルを指定したいテクスチャにする
の二つなのですが、
1はxファイルの階層下にテクスチャファイルが無ければ認識してくれない、モデルをエクスポートする都度書き換えるのは手間、と言う問題があり、
2のMV1SetTextureGraphHandle関数はテクスチャの画像サイズが2のn乗でなければちゃんと表示されない為、
 関数の仕様を留意してテクスチャファイルを作らなければならない&UVマッピングしなければならない、と言う制約があります。

どうにかVC++側で、モデルにテクスチャのパスを渡す事はできないでしょうか。
DXライブラリからゲーム製作に入ったモノで、DirectXについてはまるで知らない状態です。

Re: DXライブラリ側でのテクスチャの読み込み

Posted: 2013年9月12日(木) 10:18
by h2so5
MV1LoadModelが自動でやってくれるモデルやテクスチャ、モーションの読み込みを手動で行いたいときはMV1LoadModelFromMemを使います。
独自の読み込み関数を定義すれば、任意の場所からテクスチャを読み込むことができます。

Re: DXライブラリ側でのテクスチャの読み込み

Posted: 2013年9月12日(木) 10:58
by softya(ソフト屋)
> 1はxファイルの階層下にテクスチャファイルが無ければ認識してくれない、モデルをエクスポートする都度書き換えるのは手間、と言う問題があり、

相対パス指定とテキスト置換ツールなどで自動書き換えで解決できると思います。

Re: DXライブラリ側でのテクスチャの読み込み

Posted: 2013年9月17日(火) 00:07
by ても
>h2so5様
ご教授頂きありがとうございます。ただ、関数を教えて貰ってから三日ほど調べてみたのですが、結局読み込み用の関数の作り方がわかりませんでした。

コード:

MV1LoadModelFromMem( *FileImage, FileSize, (* FileReadFunc )( *FilePath,  **FileImageAddr,  *FileSize,  *FileReadFuncData ), 
           (* FileReleaseFunc )(  *MemoryAddr,  *FileReadFuncData ), *FileReadFuncData ) ;
FileReadFuncの引数FilePathに直接画像ファイルのパスを渡して見ると、別のテクスチャ画像を設定したメッシュも含めて、全てのメッシュにパスを渡した画像が貼り付けられる(半透明でしたが)ので、ここにパスを渡せばよいとは思うのですが、ただフォルダのパスを渡すだけではダメでした。
具体的にどのように読み込んで渡せば良いのでしょうか?

>softya様
申し訳ありません、手動でのファイルパスの書式にミスがありました(¥と/を間違えていました…)。階層別のフォルダでも普通に読み込んでくれました。
ただ、この方法で設定できるのはテキスト形式で編集できるファイルの場合のみかと思うので(現状扱うのはxファイルのみの予定なので問題ありませんが)、上記の関数が理解できなかった場合にこちらの方法にしようかと思います。

Re: DXライブラリ側でのテクスチャの読み込み

Posted: 2014年1月09日(木) 13:21
by ても
長らく放置してしまいました…。
とりあえず、xファイルのテクスチャのパスを書き換えた上で、MV1LoadModelFromMemを使って読み込めば(MV1LoadModelではダメでした…)指定のフォルダからテクスチャを読み込んでくれるようなので、この方法で行きたいと思います。
softya様、 h2so5 様、有難うございました。

Re: DXライブラリ側でのテクスチャの読み込み

Posted: 2014年1月09日(木) 18:04
by ISLe
ても さんが書きました:2のMV1SetTextureGraphHandle関数はテクスチャの画像サイズが2のn乗でなければちゃんと表示されない為、
 関数の仕様を留意してテクスチャファイルを作らなければならない&UVマッピングしなければならない、と言う制約があります。
MV1SetTextureGraphHandle関数に渡すテクスチャの画像を読み込む前に
SetUseDivGraphFlag(FALSE);
とすると2のn乗でなくてもちゃんと表示されるようになるかもしれません。

テクスチャは2のn乗サイズにしておいたほうが何かと効率が良いですが。