トップページ > 記事閲覧
MV1LoadModel 関数がフリーズする条件の報告
名前:CYARACON 日時: 2015/02/27 01:56

いつもお世話になっております。 MV1LoadModel 関数で読み込むと、MV1LoadModel 関数から処理が戻らず、そのままプログラムがフリーズしてしまう MMDモデルがみつかりましたので、参考までにご報告します。 条件として、モーションデータがある場合のみフリーズします。 モーションデータが無い場合は、フリーズせず、モデルデータも読み込めます。 おそらく、MMDモデルの形状とモーションデータのボーン構造が一致していないために、 MV1LoadModel 関数がフリーズしているのかと想像しております。 MMDモデルが正常に読み込めなくてもかまわないので、せめて MV1LoadModel 関数がフリーズしない (エラーを返して戻ってくる)ようになると助かります。 プログラム/再現方法 −−−−−−−−−−−−−−−−−−−−−−−−−−−− 1)以下の動画URLから【暗殺教室】殺せんせーモデル配布【MMD】をDLしてください。   (再配布はできないと思うので、お手数ですが動画情報からDLをお願い致します)   wが3つ.nicovideo.jp/watch/sm18550562 2)実行形式プログラム、ソースファイル、モーションファイルをDLしてください。   wが3つ.imageproduce.com/user/id995846D/test/test_freez.zip 3)1)のMMDモデルデータを、2)と同じディレクトリに入れてください。 4)MMDモデルのファイル名を、「殺せんせーVer.1.1 .pmx」から「model001.pmx」に変更してください。 5)まずは、モーションデータ「MODEL001000.vmd」を、別のファイル名にして読み込まれないようにしてから   プログラムを実行してください。   すると、問題なくMMDモデルが読み込めます。 6)次に、モーションデータのファイル名を元の「MODEL001000.vmd」に戻して、プログラムを実行してください。   すると、MMDモデルデータ読み込み中のまま、プログラムがフリーズします。   ※ MV1LoadModel 関数が、 model001.pmx と一緒に MODEL001000.vmd を読み込むとフリーズする。     MODEL001000.vmd が無ければ、フリーズしない。   =================================   注意!! 再現すると、プログラムがフリーズします!!!!!        タスクマネージャを起動して、強制終了する必要があります。   ================================= 補足:   本来なら、モデルとモーションデータの構造が不一致になるのは使い方がおかしいのですが、   ユーザーが好きなMMDモデルを設定できるゲームを制作しているため、   通常と構造が異なるモデルをユーザーが読み込んでしまう場合があり、このような問題が発生します。   正常に動作しなくてもかまわないので、せめてフリーズしないようになると、大変助かります。   お忙しいと思いますので、急ぎません。 気長に待ちます。
メンテ

Page: 1 |

Re: MV1LoadModel 関数がフリーズする条件の報告 ( No.1 )
名前:CYARACON 日時:2015/02/27 02:09

すみません、環境の記載が抜けておりました。 ・ツール:Visual Studio Express 2013 for Windows Desktop ・OS: Windows 7 (64ビット版)
メンテ
Re: MV1LoadModel 関数がフリーズする条件の報告 ( No.2 )
名前:管理人 日時:2015/02/28 18:21

ご紹介いただいた手順で私の環境でもフリーズを確認できました 殺せんせーモデルについては恐らくモデルデータの不備が原因だと思います 殺せんせーモデルのボーン301番「ドリル回転」の「付与親」が「ドリル回転」自身となっていて、 これが無限ループの原因となっていました 「ローカル軸」の項目の「Z」の値もNanになっているので、不正なデータになってしまっていると思います CYARACONさんがご確認されたフリーズ現象の原因のすべてが殺せんせーモデルと同様の原因かは分かりませんが、 とりあえず殺せんせーモデルで発生している現象についてはデータが不正でもフリーズしないように プログラムを変更してみましたので、よろしければお試しください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) // ビューアー https://dxlib.xsrv.jp/temp/DxLibModelViewerTest.zip
メンテ
Re: MV1LoadModel 関数がフリーズする条件の報告 ( No.3 )
名前:CYARACON 日時:2015/03/01 22:00

素早いUPDATEありがとうございます。 が、自作ゲームプログラムでは、画面が真っ黒のままなにもうつらなくなってしまいました。 原因を調べますので、しばらくお時間をください。
メンテ
Re: MV1LoadModel 関数がフリーズする条件の報告 ( No.4 )
名前:CYARACON 日時:2015/03/01 22:22

追記です。他のスレッド 「Re: 3Dポリゴンの透過色について ( No.3 )」 名前:管理人 日時:2015/01/08 00:31 にて公開されたバージョン(解凍後、DxLibVCTestのタイムスタンプが2015/01/13 1:05 になっているもの) では、正規公開バージョンと同じく正常に画面表示されました。 このバージョンと、今回のバージョンの間で、なにか描画関連の仕様変更をされていますでしょうか? どの辺の仕様を変更したかわかれば、こちらでも原因を調べやすいのですが。
メンテ
Re: MV1LoadModel 関数がフリーズする条件の報告 ( No.5 )
名前:CYARACON 日時:2015/03/01 22:29

さらに追記です。他のスレッド Re: 文字列表示 ( No.1 ) 名前:管理人 日時:2015/02/27 01:24 にて公開されたバージョンにて、既に、画面が真っ黒になる症状がでています。 ただし、解凍後のDxLibVCTestのタイムスタンプは2015/01/13 1:05 で、画面が正常に表示されるものと同一になっています。 「Re: 3Dポリゴンの透過色について ( No.3 )」 名前:管理人 日時:2015/01/08 00:31 での公開バージョンと、 Re: 文字列表示 ( No.1 ) 名前:管理人 日時:2015/02/27 01:24 での公開バージョンとの間で、描画関係の仕様を変更されていまでしょうか? それがわかると原因を追跡しやすくなるのですが。 お忙しいと思いますので、気長にお待ちします。
メンテ
Re: MV1LoadModel 関数がフリーズする条件の報告 ( No.6 )
名前:CYARACON 日時:2015/03/01 23:01

追記です。 自作のプログラムでは、頂点シェーダーを読み込む関数がエラーで帰ってくるようになってしまったのが原因のようです。 // 頂点シェーダーを読み込む Vertex_Shader_H_BORN = LoadVertexShader( "shader\\SkinMesh4_VS.vso" ) ; // 1-4 if ( Vertex_Shader_H_BORN == -1 ) { error_disp ( 5 ) ; // 最近のバージョンでは、エラーで帰ってくようになった } 再現するソースプログラムを用意しますので、しばしおまちください。
メンテ
Re: MV1LoadModel 関数がフリーズする条件の報告 ( No.7 )
名前:管理人 日時:2015/03/01 23:31

すみません、自作シェーダーを使用されていたのですね 現在の暫定最新版では Direct3D 11 が使用できる環境では Direct3D 11 を使用するようになっていますので、 自作シェーダーも Direct3D 11 用にコンパイルされたものが必要になります なので、以下の記述を DxLib_Init を呼び出す前に実行して頂ければ SetUseDirect3DVersion( DX_DIRECT3D_9EX ) ; Direct3D 11 が使用できる環境でも Direct3D 9 を使用するようになりますので、Direct3D 9 用の自作シェーダーも 読み込むことができ、正常に動作するようになると思います よろしければお試しください m(_ _;m
メンテ
Re: MV1LoadModel 関数がフリーズする条件の報告 ( No.8 )
名前:CYARACON(解決済み) 日時:2015/03/02 00:10

シェーダーの読み込み、OKになりました! シェーダーをコンパイルし直すことも考えたのですが、ゲームを使用するユーザーの環境がわからないため、SetUseDirect3DVersion( DX_DIRECT3D_9EX )を使用することにしました。 対応、ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存