トップページ > 記事閲覧
MV1ファイルでの、物理演算方式の設定方法について
名前:CYARACON 日時: 2014/03/21 04:27

お世話になっております。 MMDモデルを使用したゲームにて、メモリを節約するため、PMDファイルのMMDモデルを、MV1ファイルで書き出した上で、 再度MV1を読み込み、ゲーム内で動かしています。 このとき、物理演算をOFFにしたい場合があるのですが、MV1ファイルを読む直前で MV1SetLoadModelUsePhysicsMode( DX_LOADMODEL_PHYSICS_DISABLE ) ; // 物理演算:OFF を実行しても、読み込んだMV1ファイルで物理演算が働いてしまうようです。 具体的には、 1)物理演算をリアルタイムに指定して、PMDファイルを読み込む。 MV1SetLoadModelUsePhysicsMode( DX_LOADMODEL_PHYSICS_REALTIME ) ; // リアルタイム物理演算 mmdhand = MV1LoadModel( FILENAME.PMD ) ; // PMD モデル 2)MV1 ファイルで書き出す/ハンドルを消去 MV1SaveModelToMV1File ( mmdhand, FILENAME.MV1, MV1_SAVETYPE_NORMAL, -1, FALSE, 0, 0, 0, 0 ) ; MV1DeleteModel( mmdhand ) ; // ハンドル消去 3)物理演算をOFFにして、MV1ファイルを読み込む MV1SetLoadModelUsePhysicsMode( DX_LOADMODEL_PHYSICS_DISABLE ) ; // 物理演算:OFF mmdhand2 = MV1LoadModel( FILENAME.MV1 ) ; // MV1 モデル読み込み この後、ゲーム内部で読み込んだMV1モデルを動かすと、物理演算が働いてしまいます。(リアルタイム計算が働いている感じです。) 2)でMV1ファイルを読み込む前に、物理演算:OFFにしているので、 MV1ファイルのMMDモデルは物理演算を行わないと思ったのですが、仕様はそうなっていないのでしょうか? PMDファイルをMV1ファイルに変換して使用する際、物理演算の方式の設定は、どこで指定するべきなのか ご指導いただけると助かります。
メンテ

Page: 1 |

Re: MV1ファイルでの、物理演算方式の設定方法について ( No.1 )
名前:管理人 日時:2014/03/21 22:25

すみません、MV1ファイルを読み込む前に MV1SetLoadModelUsePhysicsMode( DX_LOADMODEL_PHYSICS_DISABLE ) ; を実行しても物理演算が無効にならないのはバグです 修正版をアップしましたので、よろしければお使いください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
処理が一気に重くななりました ( No.2 )
名前:CYARACON 日時:2014/03/22 04:05

管理人様 素早い対応をありがとうございます。 が、なぜか処理が一気に重くなってしました。 ゲームプログラムのフレームレートが、これまで30FPS〜60FPSでていたものが、ライブラリィを入れ替えてコンパイルし直しただけで、6〜8FPSと、1/10程度にまで落ちてしまいました。 以前のライブラリィに戻すと処理速度も戻ります。 お手数ですが、ご確認いただけると助かります。 ・確認したライブラリィ:VisualC++ 用 ・OS:Win7−64ビット(プログラムは32ビットモードで使用) ・グラボ:GTX660 ・メモリ:16GB
メンテ
Re: MV1ファイルでの、物理演算方式の設定方法について ( No.3 )
名前:管理人 日時:2014/03/22 04:20

重くなってしまいましたか・・・・何故でしょう・・・ よろしければこれまで使用されていたライブラリのバージョンを教えて頂けないでしょうか?
メンテ
Re: MV1ファイルでの、物理演算方式の設定方法について ( No.4 )
名前:CYARACON 日時:2014/03/22 05:04

これまで使用していたのは修正版なので、残念ながらライブラリィのファイル名が今回と同じです。 ファイルのタイムスタンプとしては、DxDrawFunc_x64_d.lib が2014/02/22 19:49 となっているバージョンでは問題ありませんでした。 なお追記ですが、 ゲーム開始直後でMMDキャラクターが動いていないとFPSが重いのですが、ゲームの中でMMDが動き出すと軽くなり、通常のFPSになるという症状がでています。 現在、MMDモデル(MV1ファイル)読み込み後に、ダミーの物理演算リセット、物理演算計算実行、モーション処理などを入れて改善しないかテストをしています。が、まだ成果がでていません。
メンテ
SetFontSize 関数が重くなっています ( No.5 )
名前:CYARACON 日時:2014/03/22 07:10

管理人様。お世話になっております。 現時点でこちらで調べた範囲では、SetFontSize 関数が重くなっているようです。 SetFontSize 関数を記述した行を一行削除するだけで、一気に処理が軽くなります。 とりあえずご報告まで。
メンテ
さらに追記 ( No.6 )
名前:CYARACON 日時:2014/03/22 07:21

先に、「ゲーム開始直後でMMDキャラクターが動いていないとFPSが重いのですが」と書きましたが、 これも、ゲーム開始時に「カウントダウン表示」のため、SetFontSize 関数を使用してサイズが大きな文字を画面に表示していたためでした。 SetFontSize 関数を使用したカウントダウン表示を削除すると、ゲーム開始時も高速になりました。 ご報告まで。
メンテ
そもそもSetFontSize 関数は仕様として重いですよね ( No.7 )
名前:CYARACON 日時:2014/03/22 07:49

そもそも、SetFontSize 関数は仕様として重いので(関数の解説にそのような記述があります。) CreateFontToHandle を利用するなどして、プログラムの方での改良を試みてみます。 なぜ前のバージョンより重くなったのか興味もありますが、対応が難しければ諦めます。
メンテ
Re: MV1ファイルでの、物理演算方式の設定方法について ( No.8 )
名前:管理人 日時:2014/03/22 15:50

ご情報ありがとうございます SetFontSize を使用した場合ということで原因がわかりました 以前と同じ速度になるように修正したバージョンをアップしましたので、 よろしければお試しください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) 原因は『フォント画像のキャッシュ用テクスチャに対して作成時に初期化用の色値で全体塗りつぶしをするようにした』です フォント画像のキャッシュ時にそれまでの画像に上書きするので本来必要ないはずなのですが、 最近追加したフォントの float型座標指定版の文字列描画機能でバイリニアフィルタリングモードで描画をした場合、 キャッシュ画像に上書きした範囲から1ドット外れた上書きしていない部分のドットが描画に使用されてしまっていたので、 その対策として最初に『描画されても問題の無い色値』でキャッシュ用テクスチャ全体を塗りつぶす処理を追加しました それが処理が重くなった原因なので、フォント画像のキャッシュ時に今までより1ドット広い範囲を上書きする ようにすることで、初期化時の全体塗りつぶしはしないようにしました
メンテ
高速化、確認しました ( No.9 )
名前:CYARACON (解決済み) 日時:2014/03/22 21:14

管理人様。素早い対応をありがとうございます。 「VisualC++ 用」にて、SetFontSize 関数が前のバージョンと同様に高速化されたことを確認いたしました。 ありがとうございます。 今回の件を機会に、CreateFontToHandle を利用するよう、プログラムも改良をしてみます。
メンテ

Page: 1 |

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

   クッキー保存