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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ても

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

#1

投稿記事 by ても » 10年前

当方VC++とDXライブラリを用いて3Dゲームの製作を試みているのですが、製作したモデルのテクスチャの読み込みで行き詰っています。

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

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

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 10年前

MV1LoadModelが自動でやってくれるモデルやテクスチャ、モーションの読み込みを手動で行いたいときはMV1LoadModelFromMemを使います。
独自の読み込み関数を定義すれば、任意の場所からテクスチャを読み込むことができます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

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

#3

投稿記事 by softya(ソフト屋) » 10年前

> 1はxファイルの階層下にテクスチャファイルが無ければ認識してくれない、モデルをエクスポートする都度書き換えるのは手間、と言う問題があり、

相対パス指定とテキスト置換ツールなどで自動書き換えで解決できると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ても

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

#4

投稿記事 by ても » 10年前

>h2so5様
ご教授頂きありがとうございます。ただ、関数を教えて貰ってから三日ほど調べてみたのですが、結局読み込み用の関数の作り方がわかりませんでした。

コード:

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

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

ても

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

#5

投稿記事 by ても » 10年前

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

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#6

投稿記事 by ISLe » 10年前

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

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

閉鎖

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