以下のプログラムで物理演算を仕込んであるモデルをいくつか試したのですが、
モデルを移動させると物理演算をするボーンの付け根の位置が移動方向と逆側にズレてしまう現象が発生しております。
特に物理演算を仕込んでいる髪やスカートなどのボーンの付け根が移動速度を上げれば上げるほどズレていくようでした。
あとリアルタイムで物理演算をするとメモリリークが発生しているような気がします。
よってお忙しいとは思いますがこれらの現象の確認をお願いします。
#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 ;
}