【HSP3】HSPから呼び出したDXライブラリを使ってMMD(.pmd)を表示してみる

表示するだけのコード。MV1LoadModel のファイル名は適宜変えてください。DxLib.as は http://tkooler.moe.hm/hsp/img/DxLib.as から入手可能です。DLLはC#版に付属しています。以前 DxLib.as をダウンロードされた方は古いかもしれませんので新しいのに差し換えてください。

表示するだけのコード。MV1LoadModel のファイル名は適宜変えてください。DxLib.as は http://tkooler.moe.hm/hsp/img/DxLib.as から入手可能です。DLLはC#版に付属しています。以前 DxLib.as をダウンロードされた方は古いかもしれませんので新しいのに差し換えてください。

// 参考
// http://blog.ness3.com/?p=2624

#include "DxLib.as"
// http://sprocket.babyblue.jp/html/hsp_koneta3.htm
#module
#defcfunc todouble int p1
	temp = 0.0
	lpoke temp, 4, (p1 & 0x80000000) | (((p1 & 0x7fffffff) >> 3) + ((p1 & 0x7fffffff) ! 0) * 0x38000000)
	lpoke temp, 0, p1 << 29
return temp
#global

	// アンチエイリアスの設定
	SetFullSceneAntiAliasingMode 4, 2
	// ウィンドウサイズと色数
	;SetGraphMode ginfo_dispx, ginfo_dispy, 32
	
	// ウィンドウモードにするか?
	ChangeWindowMode TRUE
	if stat != DX_CHANGESCREEN_OK : end
	
	DxLib_Init
	if stat == -1 : end
	SetDrawScreen DX_SCREEN_BACK
	
	onexit gosub *e
	
	// モデルデータを読み込む
	MV1LoadModel "MMD_YUKARI\\結月ゆかり.pmd"
	hModel = stat
	
	if hModel == -1 : dialog "失敗" : gosub *e
	
	// モデルの輪郭線の太さを変える
	/*
	MV1GetMaterialNum hModel
	repeat stat
        MV1GetMaterialOutLineDotWidth hModel, cnt
        MV1SetMaterialOutLineDotWidth hModel, cnt, todouble(stat)/2
	loop
	*/
	
	// 環境光色
	SetGlobalAmbientLight 0.5f, 0.5f, 0.5f, 0.0f
	
	// スケール
	;MV1SetScale hModel, 2.0f, 2.0f, 2.0f
	
	// カメラの 手前クリップ距離と 奥クリップ距離を設定
	SetCameraNearFar 10.0f, 10000.0f
	
	x = 0.0 : y = 20.0 : z = -20.0
	
	// ループ
	repeat
		ProcessMessage
		if stat != 0 : break
		CheckHitKey KEY_INPUT_ESCAPE
		if stat != 0 : break
	
		RECT = -1, -1, -1, -1
		ClearDrawScreen varptr(RECT)
	
		CheckHitKey KEY_INPUT_UP
		if stat == 1 : y += 1.0
	
		CheckHitKey KEY_INPUT_DOWN
		if stat == 1 : y -= 1.0
	
		CheckHitKey KEY_INPUT_LEFT
		if stat == 1 : x -= 1.0
	
		CheckHitKey KEY_INPUT_RIGHT
		if stat == 1 : x += 1.0
		
		// カメラの位置と注視点をセット、注視点は原点
		SetCameraPositionAndTarget_UpVecY x, y, z, 0.0f, 10.0f, 0.0f
	
		//線の描画
		GetColor 255, 0, 0
		DrawLine3D VGet(0.0f, 0.0f, 0.0f), VGet(10000.0f, 0.0f, 0.0f), stat //X
		GetColor 0, 255, 0
		DrawLine3D VGet(0.0f, 0.0f, 0.0f), VGet(0.0f, 10000.0f, 0.0f), stat //Y
		GetColor 0, 0, 255
		DrawLine3D VGet(0.0f, 0.0f, 0.0f), VGet(0.0f, 0.0f, 10000.0f), stat //Z

		// モデルの描画
		MV1DrawModel hModel
		if stat == -1 : dialog "モデルの描画に失敗" : gosub *e
		
		ScreenFlip

		WaitTimer 10
	
		title "x:"+x+" y:"+y+" z:"+z
		
	loop
	
	gosub *e
stop

*e
	DxLib_End
	end
return