トップページ > 過去ログ > 記事閲覧
物理演算について
名前:黎光 日時: 2011/12/21 00:44

以下のプログラムで物理演算を仕込んであるモデルをいくつか試したのですが、 モデルを移動させると物理演算をするボーンの付け根の位置が移動方向と逆側にズレてしまう現象が発生しております。 特に物理演算を仕込んでいる髪やスカートなどのボーンの付け根が移動速度を上げれば上げるほどズレていくようでした。 あとリアルタイムで物理演算をするとメモリリークが発生しているような気がします。 よってお忙しいとは思いますがこれらの現象の確認をお願いします。 #include <crtdbg.h> #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; float PosY ; // メモリリーク検出 _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF ) ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 3Dモデルの読み込み MV1SetLoadModelUsePhysicsMode( DX_LOADMODEL_PHYSICS_REALTIME ) ; ModelHandle = MV1LoadModel( "Test.pmd" ) ; // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // カメラの設定 SetCameraNearFar( 10.0f, 1000.0f ) ; // 物理のリセット MV1PhysicsResetState( ModelHandle ) ; // 座標を初期化 PosY = 0.0f ; // 何かキーが押されるかウインドウが閉じられるまでループ while( ProcessMessage() == 0 ) { // 画面をクリア ClearDrawScreen() ; if( CheckHitKey( KEY_INPUT_UP ) ) { PosY += 1.0f ; } else { PosY -= 1.0f ; if( PosY < 0.0f ) PosY = 0.0f ; } // 座標をセット MV1SetPosition( ModelHandle, VGet( 0.0f, PosY, 0.0f ) ) ; // 物理の計算 MV1PhysicsCalculation( ModelHandle, 1000.0f / 60.0f ) ; // カメラの設定 SetCameraPositionAndTarget_UpVecY( VGet( 0.0f, PosY + 19.0f, -22.5f ), VGet( 0.0f, PosY + 10.0f, 0.0f ) ) ; // 3Dモデルの描画 MV1DrawModel( ModelHandle ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Page: 1 |

Re: 物理演算について ( No.1 )
名前:管理人 日時:2011/12/25 00:14

ご報告ありがとうございます メモリリークと物理演算を仕込んでいるボーンの付け根の位置がずれてしまうバグを修正しましたので よろしければお試しになってみてください 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/DxLibGCCTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMinGWTest.exe // MinGW 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) // ビューアー http://homepage2.nifty.com/natupaji/DxLib/DxLibModelViewerTest.zip
Re: 物理演算について ( No.2 )
名前:黎光 日時:2011/12/30 13:51

修正ありがとうございます ちなみに気になるところがまだありまして 修正前にモデルをジャンプさせて着地した時に髪やスカートが下にすごく伸びるのはボーンの付け根の位置がずれてしまうからだと思っていたのですが、 修正後でも伸びていたので、剛体と剛体を繋いでるジョイントの長さがMMDと比べて伸びやすい気がします。 これは仕様でしょうか?
Re: 物理演算について ( No.3 )
名前:管理人 日時:2012/01/01 03:56

仕様です、というか、本家MikuMikuDance のようにしたいのですがどのように対処しているのかわからないので仕様とするしかないとうか・・・ ただ、CPU の負荷は高くなってしまいますが、1回辺りのモデルの移動と物理計算を分割することで伸びるのを抑えることはできます 例えば Y軸方向に -2.0f 移動する場合 [1回だと伸びる] PosY -= 2.0f ; MV1SetPosition( ModelHandle, VGet( 0.0f, PosY, 0.0f ) ) ; MV1PhysicsCalculation( ModelHandle, 1000.0f / 60.0f ) ; [複数回に分けると伸びが小さくなる] int DivNum = 2 ; for( int i = 0 ; i < DivNum ; i ++ ) { PosY -= 2.0f / DivNum ; MV1SetPosition( ModelHandle, VGet( 0.0f, PosY, 0.0f ) ) ; MV1PhysicsCalculation( ModelHandle, 1000.0f / 60.0f / DivNum ) ; }
Re: 物理演算について ( No.4 )
名前:黎光(解決) 日時:2012/01/07 14:59

すいません解決にするのを忘れてました ありがとうございました

Page: 1 |