トップページ > 過去ログ > 記事閲覧
pmdファイルのロード失敗
名前:bluefish 日時: 2010/06/29 19:21

はじめまして 質問というよりもバグ?報告になるのですが、 解決法があるかとも思い投稿させていただきます。 MV1LoadModel関数でpmdファイルを読み込んだ際 2つ目以降のpmdファイルがロードされません。 int A = MV1LoadModel( "aaa.pmd" );←成功 int B = MV1LoadModel( "bbb.pmd" );←失敗して-1を返す VC++の出力ログを確認する限り 3901:Read Model Convert Error : 頂点座標と頂点法線を一時的に格納するメモリ領域の確保に失敗しました この一文が怪しいと考えています。 (ためしに、5個ほど連続してpmdを読ませてみたのですが、このエラーが4回ほど出ています。) ただ、上の2行を逆に書くとロードできたり、 pmdファイルの破損を考え、 ファイルを逆にしたり、両方とも同じにしたら読み込まなかったりで 今ひとつ再現度が低いのが困りものですが。 mv1に変換してから読み込ませるとエラーも無く すんなりとロードできるので、現在はこれで 対処しています。 (STGを作ってみようと思っているので、それほど複雑なモーションも必要なく、現状ではこれで十分と考えています)

Page: 1 |

Re: pmdファイルのロード失敗 ( No.1 )
名前:管理人 日時:2010/07/03 23:41

ログの出力通りメモリが足りなくなっているようです pmdファイルは読み込み時に作業用バッファとして数十MBのメモリをしようしますので、 読み込みに必要な空きメモリ領域がギリギリなのかもしれません ( mv1ファイルはDXライブラリネイティブのモデル形式なので、読み込み時に必要な 作業用バッファの容量は非常に少ないです ) ・・・とはいえ、現在のPCは軒並み1GBを越えたメモリを搭載しているので、 ちょっと考えにくい現象だったりもします bluefishさんがお使いのPCに搭載されているメモリの容量はどのくらいでしょうか?
Re: pmdファイルのロード失敗 ( No.2 )
名前:bluefish 日時:2010/07/06 02:47

ありがとうございます。 OSはWindows7の64bit版 メモリは4GB、VRAMは512MB(GeForce210)です。 容量だけ見れば単純にメモリが足りないということはないとおもいます。 いくつか試してみた感想としては、 ・2つめのpmdファイルでエラーが出る ・1つだけロードした場合は問題がない などから、pmd→mv1変換に使ったメモリ領域を アンロックし忘れているのではないかと思います。 (でも、その場合は一般保護法エラーになりそうな感じですが) どちらにしても、事前にmv1に変換してしまえば問題はないので、 そこまで重要度の高い問題ではないように思います。
Re: pmdファイルのロード失敗 ( No.3 )
名前:いっち 日時:2010/07/06 19:04

私の環境でも試してみたいので、事象の発生するソースとpmdファイルをご提供いただけますでしょうか? > どちらにしても、事前にmv1に変換してしまえば問題はないので、 > そこまで重要度の高い問題ではないように思います。 潜在的なバグの解消につながるかもしれないので、できれば原因の追究を行って頂きたいです。
Re: pmdファイルのロード失敗 ( No.4 )
名前:bluefish 日時:2010/07/07 15:52

>私の環境でも試してみたいので、事象の発生するソースとpmdファイルをご提供いただけますでしょうか? 最初に現象を確認したソースがスパゲッティになっちゃってるので プロジェクトを作り直しました。 (こちらでも同様のエラーが発生します) URL: ttp://www.dotup.org/uploda/www.dotup.org1012862.zip.html パスワード: dxlib です。 また、追試としてほかのpmdファイルを読ませてみましたが、ポリゴン数が少ないのかボーンが少ないのか わかりませんがうまくロードできています。 pmdの破損かと思うのですが、前述のとおりロード順を入れ替える、 片方のpmdだけ2回ロードさせるなどの方法でもロードできないのが不明です。 (pmdが破損しているなら、どちらも同じ箇所が破損している可能性が高いです。その場合ロード順の変更で結果が変わることは考えにくいですし、 どちらか片方のpmdだけロードした場合はうまくいくはずです。)
Re: pmdファイルのロード失敗 ( No.5 )
名前:いっち 日時:2010/07/07 22:08

ソースにある4つのセットを試してみましたが、特に問題なく読み込めているように見受けられました。 (テクスチャの読み込みでエラーは出ていましたが) 主な環境は以下の通りです。 WinXP Pro SP3 + VS2008 EE SP1 + DxLib 3.02f(06/27あたり版) + RAM 2GB + VRAM 128MB
Re: pmdファイルのロード失敗 ( No.6 )
名前:bluefish 日時:2010/07/08 01:08

検証ありがとうございます。 となると環境との相性になるのかもしれませんね。 (ただでさえ64bitOSはいろいろとアレですし)
Re: pmdファイルのロード失敗 ( No.7 )
名前:いっち 日時:2010/07/08 19:03

テクスチャ用のファイルを退避した状態(つまりテクスチャの読み込みに失敗する状態)でテストを行った場合、 bluefishさんの環境ではどのような結果になりますでしょうか?
Re: pmdファイルのロード失敗 ( No.8 )
名前:sss 日時:2010/07/08 21:19

ビルドする環境が手元になかったので、同梱されているexeを実行してみました。 テクスチャのロード以外は、エラーも出ずにモデルが2つ表示されました。 環境は、   OS: Windows7 64bit メモリ: 4GB  VRAM: 1GB(GeForce GTS250) 同梱されているLOGファイルの内容が、書かれている環境の物と違うのは、色々と試していた結果なのかな。 メモリ総容量 2GBで、空きも 2GBって、どんな環境なんだろうと思いましたが^^; (Virtual PCかなにか?)
Re: pmdファイルのロード失敗 ( No.9 )
名前:管理人 日時:2010/07/11 14:07

のそのそしていたらアップしていただいたファイルが期限切れで消えてしまいました orz 原因が64bitOSかどうかは・・・分かりません > sssさん メモリ総容量と空きメモリ容量がどちらも2GBになっているのはライブラリのプログラムが原因です 4GB以上のメモリを搭載したPCでは正常に動作しないAPIを使用していたので、4GB以上の メモリを搭載していても正常に動作するAPIを使用するように修正しました こちらにその修正を施したバージョンを置いておきます m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: pmdファイルのロード失敗 ( No.10 )
名前:sss 日時:2010/07/12 23:31

私の所では、64bitOSでも問題ないので、64bitOSだからということはないと思います。 > 4GB以上のメモリを搭載したPCでは正常に動作しないAPIを使用していたので そんなのもあったんですね。 対応お疲れ様です。 ただ、書いた通り私の環境もメモリ 4GBですが、正常に表示されているように見えました。 (メモリ総量:4087.05MB 空きメモリ領域:2652.14MB) そして、bluefishさんが書かれた環境が、Win7 64bitなのに、同梱のLOGでは WinXPsp3ぽかったので 何かのテスト環境なのかなと思ったのでした^^; さて、ノートPCでも実行してみたところ、現象を確認しました。 (OSは、Windows XP sp2 もちろん32bit) ただ、こちらは本当にメモリ不足の可能性も? (メモリ総量:1021.48MB 空きメモリ領域:655.32MB) まぁ、これで足りないとなると、ゲームを作ったときに 要求される実行環境が怖いことになりそうな気もします^^; 関係ないと思いつつ、DirectXの更新もしましたが変わりませんでした。 (グラフィックドライバの更新はしていませんが) bluefishさんのLOGと同じくTotal size 114MB弱くらいで Alloc num:854で落ちているので このあたりが鍵となるかと思ったのですが、モデルを変えると値が変わりますね^^; (考えて見れば当たり前だ><)
Re: pmdファイルのロード失敗 ( No.11 )
名前:bluefish 日時:2010/07/14 00:50

しばらく見ないうちに・・・ 皆様アドバイスありがとうございます。 >いっち 様 pmdのみ別フォルダにおいてロードしてみたのですが テクスチャは貼れているようです。 テクスチャデータを内包しているだけかもしれませんが。 >sss 様 私もタスクマネージャを開いたときはびっくりしました。 LOGの内容が違うのは、研究室のPCで勝手に・・・もとい、 別のPCでも試した結果です。そっちはXPのSP3ですので。 (ちなみに、どちらも同じ症状が出ました。) >管理人 様 ttp://www1.axfc.net/uploader/Li/so/71937.zip こちらの方に再アップしました。 本来ならメールで送るべきなのでしょうが、 ほかの方にも試してもらいたいと思い、アップローダーの形をとりました ご容赦ください。 メモリ使用量を改善したDxLibVCTest.exeですが ライブラリを上書きするとClearDrawScreenが LNK1120エラーを吐くようです。 ClsDrawScreenは問題なく使えるのですが・・・
Re: pmdファイルのロード失敗 ( No.12 )
名前:管理人 日時:2010/07/18 03:57

ファイルの再アップありがとうございます 私も Win7 64bit の環境があるので試してみましたが、ご報告いただいた現象は発生しませんでした ( コメントアウトされている3つのパターン全部試してみました ) お渡ししたバージョンからまた幾つか大きな変更を加えていて、もしかしたら手元のバージョンでは 正常に読み込むことができるかもしれませんので、よろしければこちらをお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) // ビューアー http://homepage2.nifty.com/natupaji/DxLib/DxLibModelViewerTest.zip ClearDrawScreen が Link エラーを発生する原因はわかりません、ライブラリファイルを上書きした後 「ビルド」ではなく「リビルド」をしても Link エラーが発生するのでしょうか?
Re: pmdファイルのロード失敗 ( No.13 )
名前:bluefish 日時:2010/07/30 18:10

返信が遅くなりました。 管理人様の環境でエラーが出ないということは OSかDirectXか、そのあたりの問題かもしれません。 >ClearDrawScreenについて URLを張っていただいたライブラリを上書きしてみたのですが LINK : fatal error LNK1104: ファイル 'DxDrawFunc.lib' を開くことができません。 とのエラーが出てしまいます。 ファイル自体はきちんとフォルダに存在していますので 何が原因か良くはわからないのですが・・・
Re: pmdファイルのロード失敗 ( No.14 )
名前:管理人 日時:2010/08/03 09:01

ファイル自体はフォルダに存在しているのですか・・・ そうなりますと、bluefishさんが「このフォルダのDXライブラリ郡をリンカーは参照している」と お考えになっているフォルダとは別のフォルダにあるDXライブラリ郡をリンカーが参照して しまっているかもしれません DxLib.h 等のヘッダファイルの在り処を指定する設定と DxLib.lib などのライブラリファイルの 在り処を指定する設定は別々に行いますので、ヘッダファイルの在り処の設定とライブラリファイルの 在り処の設定が一致しているかどうかご確認になってみて頂けますでしょうか? 因みに、DXライブラリは関数郡がバージョン毎に殆ど変わらないので、インクルードしている ヘッダファイルとライブラリファイルのバージョンが一致していなくても一見正常にコンパイル・リンクが できてしまったりしますが、そうして作成された実行ファイルは正常に動作しない可能性があります

Page: 1 |