DXライブラリ
Posted: 2016年5月18日(水) 23:47
DXライブラリについての質問です。
DXライブラリを使いmmdを動かしたいのですが、ハンドルモデルが表示されません。前まで表示されていたのですが、プログラミングを大きく書き直したところ、いつのまにかデバッグしてみたときには表示されなくなっていました。どこに原因があるのかわかりません。プログラミングを書くのが下手なので読みずらいと思いますが、どうしたら表示させることができるようになるか教えてください。自分が書いたプログラミングは以下のものです。
DXライブラリを使いmmdを動かしたいのですが、ハンドルモデルが表示されません。前まで表示されていたのですが、プログラミングを大きく書き直したところ、いつのまにかデバッグしてみたときには表示されなくなっていました。どこに原因があるのかわかりません。プログラミングを書くのが下手なので読みずらいと思いますが、どうしたら表示させることができるようになるか教えてください。自分が書いたプログラミングは以下のものです。
// ライブラリ関数 ///////////////////////////////////////////////////////////////////////
#include <DxLib.h>
#include <math.h>
// マクロ定義 ///////////////////////////////////////////////////////////////////////////
#define CAMERA_NEAR 0.1f //カメラ付近の描写範囲
#define CAMERA_FAR 1000.0f //カメラからの描写範囲
// プロトタイプ宣言 ////////////////////////////////////////////////////////////////////
int ModelHandle; //モデル
int StageHandle; //ステージ
float angleY = 0.0f; //Y軸アングル
static const float ROTATE_SPEED = DX_PI_F / 90; //回転スピード
float MoveVector = 0.3f; //移動距離
float MHX = 0, MHY = 0, MHZ = 0; //モデルポジション
VECTOR CAMERA_Pos = VGet(0, 20, 35); //カメラポジション
VECTOR CAMERA_Target = VGet(0, 10, 0); //カメラターゲット
MATRIX Matrix_Rot; //回転行列
MATRIX Matrix_PS; //平行行列
MATRIX Matrix_UR; //拡大&縮小行列
MATRIX Matrix_Set; //行列
float PlayTime_W = 0.0f; //走りモーション再生時間
float PlayTime_S = 0.0f; //立ちモーション再生時間
// 自作関数 ///////////////////////////////////////////////////////////////////////////
//輪郭修正
void material()
{
float dotwidth;
int i;
int MaterialNum = MV1GetMaterialNum(ModelHandle);
for (i = 0; i < MaterialNum; i++)
{
float dotwidth = MV1GetMaterialOutLineDotWidth(ModelHandle, i);
MV1SetMaterialOutLineDotWidth(ModelHandle, i, dotwidth / 20.0f);
}
}
//向き変換
void Vector(int i)
{
if (i == 0)//前
{
MHX += MoveVector*sin(angleY);
MHZ -= MoveVector*cos(angleY);
}
else if (i == 1)//左
{
MHX += MoveVector*cos(angleY);
MHZ += MoveVector*sin(angleY);
}
else if (i == 2)//右
{
MHX -= MoveVector*cos(angleY);
MHZ += MoveVector*sin(angleY);
}
else if (i == 3)//後ろ
{
MHX += MoveVector*sin(angleY);
MHZ += MoveVector*cos(angleY);
}
}
//立つモーション
void Mortion_Stand() {
float TotalTime;//アタッチの総タイム
float AttachIndex;//アタッチ番号
AttachIndex = MV1AttachAnim(ModelHandle, 0, -1, FALSE);
TotalTime = MV1GetAttachAnimTotalTime(ModelHandle, AttachIndex);
PlayTime_S += 0.2f;
if (PlayTime_S >= TotalTime)
PlayTime_S = 0.0f;
MV1SetAttachAnimTime(ModelHandle, AttachIndex, PlayTime_S);
}
//走るモーション
void Mortion_Walk(int i) {
float TotalTime;//アタッチの総タイム
float AttachIndex;//アタッチ番号
AttachIndex = MV1AttachAnim(ModelHandle, 1, -1, FALSE);
TotalTime = MV1GetAttachAnimTotalTime(ModelHandle, AttachIndex);
PlayTime_W += 0.2f;
if (PlayTime_W >= TotalTime)
PlayTime_W = 0.0f;
Vector(i);
Matrix_PS = MGetTranslate(VGet(MHX, MHY, MHZ));
SetCameraPositionAndTarget_UpVecY(VGet(MHX + CAMERA_Pos.x, MHY + CAMERA_Pos.y, MHZ + CAMERA_Pos.z),
VGet(MHX + CAMERA_Target.x, MHY + CAMERA_Target.y, MHZ + CAMERA_Target.z)); //カメラポジション&ターゲット
MV1SetAttachAnimTime(ModelHandle, AttachIndex, PlayTime_W);
}
// main関数 /////////////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
ChangeWindowMode(TRUE);
if (DxLib_Init() == -1)
return -1;
SetDrawScreen(DX_SCREEN_BACK);
MV1SetLoadModelUsePhysicsMode(DX_LOADMODEL_PHYSICS_REALTIME); //物理演算
ModelHandle = MV1LoadModel("古明地こいし/古明地こいし.pmx"); //モデルの読み込み
StageHandle = MV1LoadModel("地霊殿/地霊殿屋内/地霊殿ロビー.pmx"); //ステージの読み込み
ClearDrawScreen();
MV1DrawModel(StageHandle); //ステージ描写
SetCameraNearFar(CAMERA_NEAR, CAMERA_FAR); //奥行の描写範囲
SetCameraPositionAndTarget_UpVecY(VGet(0, 20, 35), VGet(0.0f, 10.0f, 0.0f)); //カメラポジションとターゲットアングル
//キー入力
while (ProcessMessage() == 0 && ScreenFlip() == 0 && ClearDrawScreen() == 0)
{
if (CheckHitKey(KEY_INPUT_W) == 1)//前
{
Mortion_Walk(0);
PlayTime_S = 0.0f;
}
else if (CheckHitKey(KEY_INPUT_A) == 1)//左
{
Mortion_Walk(1);
PlayTime_S = 0.0f;
}
else if (CheckHitKey(KEY_INPUT_D) == 1)//右
{
Mortion_Walk(2);
PlayTime_S = 0.0f;
}
else if (CheckHitKey(KEY_INPUT_S) == 1)//後ろ
{
Mortion_Walk(3);
PlayTime_S = 0.0f;
}
else if (CheckHitKey(KEY_INPUT_LEFT) == 1)//左
{
angleY -= ROTATE_SPEED;
Matrix_Rot = MGetRotY(angleY);
PlayTime_W = 0.0f;
PlayTime_S = 0.0f;
}
else if (CheckHitKey(KEY_INPUT_RIGHT) == 1) //右
{
angleY += ROTATE_SPEED;
Matrix_Rot = MGetRotY(angleY);
PlayTime_W = 0.0f;
PlayTime_S = 0.0f;
}
else if (CheckHitKey(KEY_INPUT_U) == 1)//拡大
{
Matrix_UR = MGetScale(VGet(2.0f, 2.0f, 2.0f));
PlayTime_W = 0.0f;
PlayTime_S = 0.0f;
}
else if (CheckHitKey(KEY_INPUT_R) == 1)//縮小
{
Matrix_UR = MGetScale(VGet(0.5f, 0.5f, 0.5f));
PlayTime_W = 0.0f;
PlayTime_S = 0.0f;
}
else
{
Mortion_Stand();
}
Matrix_Set = MMult(Matrix_UR, Matrix_Rot);
Matrix_Set = MMult(Matrix_Set, Matrix_PS);
MV1SetMatrix(ModelHandle, Matrix_Set);
MV1DrawModel(ModelHandle);
MV1DrawModel(StageHandle);
material();
}
DxLib_End();
return 0;
}