あるPMX+VMDを、DxLibModelViewerで読み込ませた時と、自作プログラムでMV1LoadModelで読み込ませた時とで、挙動が異なります。
自作プログラムでは、左足首が最初からくねくねしたり、スカート等の挙動が途中からおかしかったりします。
DxLibModelViewerで読み込んだ場合の挙動は、全く問題がありません。
Viewerで変換したMV1を自作プログラムに読み込ませた場合には問題ありませんが、自作プログラム(ツール)の特性上、
PMX/PMDの読み込みが必要なため、どうしても解決したいのです。よろしくお願いいたします。
ソースとしては MV1SetLoadModelUsePhysicsMode のサンプルにあったものを、LOADCALCにして、C#版にしたものを記載します。
DxLibModelViewerで読み込ませた場合と同じ挙動になるようにするためには、例えば下記コードにどのような関数を追加する
必要がありますでしょうか? (MV1LoadModelの前? 読み込んだ後? 描画の前?)
static void Main()
{
int ModelHandle, AttachIndex;
float TotalTime, PlayTime;
DX.ChangeWindowMode(DX.TRUE);
if (DX.DxLib_Init() < 0) return;
DX.MV1SetLoadModelUsePhysicsMode(DX.DX_LOADMODEL_PHYSICS_LOADCALC);
ModelHandle = DX.MV1LoadModel("〇〇〇〇〇.pmx"); // PMX+VMD
DX.SetDrawScreen(DX.DX_SCREEN_BACK);
DX.SetCameraNearFar(10.0f, 1000.0f);
DX.SetCameraPositionAndTarget_UpVecY(DX.VGet(0.0f, 19.0f, -22.5f), DX.VGet(0.0f, 10.0f, 0.0f));
AttachIndex = DX.MV1AttachAnim(ModelHandle, 0, -1, DX.FALSE);
TotalTime = DX.MV1GetAttachAnimTotalTime(ModelHandle, AttachIndex);
PlayTime = 0.0f;
while (DX.ProcessMessage() == 0 && DX.CheckHitKeyAll() == 0)
{
DX.ClearDrawScreen();
PlayTime += 0.5f;
if (PlayTime >= TotalTime)
{
PlayTime = 0.0f;
}
else
{
DX.MV1SetAttachAnimTime(ModelHandle, AttachIndex, PlayTime);
}
DX.MV1DrawModel(ModelHandle);
DX.ScreenFlip();
}
DX.MV1DeleteModel(ModelHandle);
DX.DxLib_End();
}
また、ViewerのSetting.iniは以下の通りです。
BackgroundColorR=30
BackgroundColorG=65
BackgroundColorB=90
AntiAliasing=1
WindowX=128
WindowY=52
WindowSizeMaximize=0
WindowWidth=1120
WindowHeight=494
NormalRemake=0
NormalRemakeSmoothingAngle=89.500000
IgnoreScaling=0
PositionOptimize=0
TriangleListUseMaxBoneNum=0
PlaySpeed=30.000000
UseLighting=1
UseVertexColor=0
TextureExRate2=1
WireFrame=0
DispFrame=0
PhysicsMotionLoopReset=1
SaveNormal8bit=0
SavePosition16bit=0
SaveBoneWeight8bit=0
SaveAnimKey16bit=0
AddAnimNameCheck=1
HardwareVertexProcessing=1
StereoView=0
FPS=60
MouseWheelReverse=1
Blur=0
PixelLighting=0
ShowPolygonPosition=0
NotUseFrameRotation=0
PmdLoadUsePhysics=1
PmdLoadPhysicsFPS=60
PmdLoadAnimFPS=30
LoadAndSave=0
(環境: Windows 10 x64 Pro, VSC2017, DirectX11, DxLib-C#-Unicode)