ジンバルロック問題なのかそれ以前の問題なのか分からないが・・・
http://www.geocities.jp/inaeggmon/hgimg3/03-03.html
ここの objrotfv.hsp を使わせて頂いて
#include "hgimg3.as"
#include "objrotfv.hsp"
screen 0,640,480,0
hgini
setfont 16,16,12,1 ; font Tex select(cx,cy,px,mode)
texload dir_exe+"\\sample\\hgimg3\\fontchr.bmp" ; フォントテクスチャの登録
setuv 0,0,128,128
addmesh m_mesh,1,1,16,300,300
texload dir_exe+"\\sample\\hgimg3\\btex.bmp"
regobj obj_mesh, m_mesh
addbox m_model,1,1
regobj my_obj, m_model
setcolor 0,255,0
addbox m_modelg,1,1
repeat 200
regobj obj, m_modelg ; オブジェクトの登録
setpos obj,rnd(400)-200,-rnd(200)-20,rnd(400)-200
loop
clscolor $80 ; 背景色の設定
cammode CAM_MODE_NORMAL
my_x=0.0
my_y=-25.0
my_z=100.0
mrx=0.0
mry=0.0
mrz=0.0
//スペースが押されてるときだけ使用
cpos_x=0.0
cpos_y=-2.0
cpos_z=10.0
p=(atan(1)/90)
*main
stick key,$3ff
if key&128 : goto *owari
hgdraw ; 描画
fprt strf("my_x=%6.1f my_y=%6.1f my_z=%6.1f",my_x,my_y,my_z),8,8
fprt strf("mrx=%6.1f mry=%6.1f mrz=%6.1f",(mrx/p),(mry/p),(mrz/p)),8,8+16
hgsync 10 ; 時間待ち
ry=0.0
rx=0.0
rz=0.0
//ピッチング(上下)
if key&2 :rx=-0.01
if key&8 :rx=0.01
if key&64 {//ヨーイング(Ctrl+ 左 or 右)
if key&4 :ry=0.005
if key&1 :ry=-0.005
} else {//ローリング(左右)
if key&1 :rz=0.01
if key&4 :rz=-0.01
}
; モデルを回転させる
getang my_obj,mrx,mry,mrz //自機の角度取得
//ローリング処理
fvset axis,mrx,mry*-1,mrz //fvdir計算時に正負逆になるので予め逆にしとく
fvdir axis,0 ,0 ,1 //オブジェクトのローカルZ座標軸に串を刺すイメージ
selang my_obj //任意軸の回転させたいオブジェクト選択(objrotfvを使う準備)
objrotfv axis,rz //axis軸をrz回転
//ピッチング処理
fvset axis,mrx,mry*-1,mrz
fvdir axis,1.0 ,0.0 ,0.0
objrotfv axis,rx
//ヨーイング処理
fvset axis,mrx,mry*-1,mrz
fvdir axis,0.0 ,1.0 ,0.0
objrotfv axis,ry
//自機移動処理
getang my_obj,mrx,mry,mrz //自機の角度取得
fvset fv,mrx,mry*-1,mrz
fvdir fv,0,0,-0.1 //ローカルZ座標軸上を前進
my_x+fv //移動分を自機ワールド座標に加算
my_y+fv(1)
my_z+fv(2)
setpos my_obj,my_x,my_y,my_z //自機座標設定
//カメラ回転と座標設定
getang my_obj,mrx,mry,mrz //自機の角度取得
setang HGOBJ_CAMERA,mrx,mry,mrz //自機の角度をカメラに設定
fvset axis,mrx,mry*-1,mrz
//スペースを押してる間は三人称視点
if key&16 {fvdir axis,cpos_x,cpos_y,cpos_z}else{fvset axis} //角度に合わせたカメラ位置計算
fvadd axis,my_x,my_y,my_z //カメラローカル座標に自機の座標を加算
selcpos //カメラ座標選択
objsetfv axis //カメラ座標設定
goto *main
*owari
end