HGIMG4 二つのモデルの疑似親子
http://hsp.tv/play/pforum.php?mode=pastwch&num=74397
↑を応用すると出来る
#include "hgimg4.as"
#module
#undef fvdir
#deffunc fvdir array fv,double _vx,double _vy,double _vz
dup ay,fv(1) //実数の配列を3回以上参照するよりdupで変数にした方がちょっとだけ軽い
dup az,fv(2)
vx=_vx*cos(az)-_vy*sin(az)
vy=_vx*sin(az)+_vy*cos(az)
vx1=vx*cos(ay)+_vz*sin(ay)
vz1=-vx*sin(ay)+_vz*cos(ay)
fv(1)=vy*cos(fv)-vz1*sin(fv)
fv(2)=vy*sin(fv)+vz1*cos(fv)
fv=vx1
return
#global
gpreset
setcls CLSMODE_SOLID, $4040
setcolor GPOBJ_LIGHT, 1,1,1 ; ライトカラーを設定
setdir GPOBJ_LIGHT, 0.5,0.5,0.5 ; アンビエントカラーを設定
chdir dir_exe+"\\sample\\\hgimg4"
gpload id_model,"res/duck" ; モデル読み込み
gpclone id_model2, id_model //回転座標用モデル
xx=0.0
yy=0.0
zz=0.0
setpos id_model,3.0,2.0,0
getpos id_model,x,y,z
gpbox id_box, 0.1 ; 右上のアヒルに回転座標の中心表示用
gpbox id_boxx, 2.0,$0000ff ; 中央のアヒルのX軸表示用
setscale id_boxx,1.0,0.05,0.05
gpbox id_boxy, 2.0,$00ff00 ; 中央のアヒルのY軸表示用
setscale id_boxy,0.05,1.0,0.05
gpbox id_boxz, 2.0,$ff0000 ; 中央のアヒルのZ軸表示用
setscale id_boxz,0.05,0.05,1.0
setpos GPOBJ_CAMERA,0.0,00.0,10.0
gplookat GPOBJ_CAMERA, 0.0,0.0,0.0 ; カメラから指定した座標を見る
addx=0.0
addy=0.0
addz=0.0
font "MS ゴシック",32
repeat
stick key,$ff
if key&128 : end
redraw 0 ; 描画開始
; カーソルキーで回転座標を移動
if key&1 : addx-0.1 //ソルキー(←→)でX軸移動
if key&4 : addx+0.1
if key&64 {//Ctrl+カーソルキー(↑↓)でZ軸移動
if key&2 : addz-0.1
if key&8 : addz+0.1
}else{//ソルキー(↑↓)でY軸移動
if key&2 : addy+0.1
if key&8 : addy-0.1
}
//モデル回転
yy+0.04
xx+0.03
zz+0.01
setang id_model,xx,yy,zz
//回転座標をベクトルとして回転
fvset fv,xx,yy,zz
fvdir fv,addx, addy, addz
setpos id_model,x+addx,y+addy,z+addz //モデルの基点に回転座標を加算
addpos id_model,-fv,-fv(1),-fv(2) //回転したベクトルを減算
//可視用
setpos id_boxx,addx,addy,addz
setpos id_boxy,addx,addy,addz
setpos id_boxz,addx,addy,addz
setpos id_box,x+addx,y+addy,z+addz
color 255,255,255
pos 0,0
mes "addx="+addx
mes "addy="+addy
mes "addz="+addz
gpdraw ; シーンの描画
redraw 1 ; 描画終了
await 1000/60 ; 待ち時間
loop
中央のアヒルはどの場所が回転座標になってるか視覚的に分かるようにしてる
実際に回転するのは右上にいるアヒル