ページ 11

テクスチャの位置が

Posted: 2012年9月19日(水) 21:43
by ヒューガ

コード:

void load(){
	my.model=MV1LoadModel("./dat/models/001/001.pmd");
	my.tex=LoadGraph("./dat/models/001/tex1.png");
	MV1SetTextureGraphHandle(my.model,1,my.tex,FALSE);
} 
上のようなコードでテクスチャの張替えを行おうとしたのですがテクスチャの位置?がずれてしまいます。
tex1.pngは001.pmdのもともとのテクスチャで、MV1SetTextureGraphHandleでmy.texの代わりに-1を入れると同じ画像がちゃんと貼られます。
なぜこうなるのでしょうか?

Re: テクスチャの位置が

Posted: 2012年9月19日(水) 22:07
by ISLe
DXライブラリはビデオメモリの消費量を減らすために内部で画像を分割する場合があるそうです。
そのため3D関係の関数では画像の一部だけが対象となり特にUV座標はズレてしまいます。

DxLib_Init() の呼び出し前に
SetUseDivGraphFlag(FALSE); // 画像分割を無効化
を追加して直れば上記の理由です。

直らなかったらすみません。

Re: テクスチャの位置が

Posted: 2012年9月19日(水) 22:39
by ヒューガ
治りませんでした・・・

Re: テクスチャの位置が

Posted: 2012年9月20日(木) 15:37
by ISLe
ヒューガ さんが書きました:治りませんでした・・・
そうですか。
提示されたコードだけではこれ以上は分かりませんね。

PMDはテクスチャ内包しているのでしたっけ。
内包しているとしたら何らかのサイズ変換が掛かっているかもしれないのでそのせいかもしれません。
要するにデータの中身を見ないと分からないということです。

Re: テクスチャの位置が

Posted: 2012年9月20日(木) 18:13
by ヒューガ
http://www1.axfc.net/uploader/O/so/218278
一応あげときます。000.pmdだけはなぜか正常に動きます。

Re: テクスチャの位置が

Posted: 2012年9月21日(金) 00:00
by ISLe
000で使っているテクスチャのサイズは2048x2048で、001は800x600ですね。

少なくともMV1SetTextureGraphHandle関数の公式リファレンスには『グラフィックハンドルの画像の幅や高さは 2 の n乗( 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 ... ) である必要があり、~』と書かれています。

テクスチャは2の累乗のサイズ(且つ正方形)にしておくと環境依存になりにくいです。

Re: テクスチャの位置が

Posted: 2012年9月21日(金) 00:27
by ヒューガ
画像サイズ変更してみたらできました!ありがとうございました!