【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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX