objrotfv.hspは↓から
第三章 回転と座標変換
http://www.geocities.jp/inaeggmon/hgimg3/03-03.html
#include "hgimg3.as"
#include "objrotfv.hsp"
screen 0,640,480,0
cls 4
hgini
setcolor 255
addbox mdid,5,5 ; BOXモデルを作成
regobj Center_objid,mdid ; BOXモデルをオブジェクトとして登録
addline m_line,,$00ffff ; 線分モデルの登録
addxfile xmdid,dir_exe+"\\sample\\hgimg3\\font_a.x" ; モデルを読み込む
modelorder xmdid,HGMODEL_ROTORDER_ZYX //通常モデルと同じ回転順序にする
DOTS=30
repeat DOTS
regobj mychr(cnt),xmdid
setpos mychr(cnt),25.0-0.1*rnd(500),25.0-0.1*rnd(500),25.0-0.1*rnd(500)
getpos mychr(cnt),xx,yy,zz
fvset vv,xx,-yy,zz //y軸反転してセット
fvface vv,0.0,0.0,0.0
selang mychr(cnt) //任意軸の回転させたいオブジェクト選択(objrotfvを使う準備)
fvset axis,0.0,0.0,0.0 //回転前の角度(obj初期値は全て0なので0設定)
fvdir axis,1.0 ,0.0 ,0.0 //x軸(euler2matrixの代わり)
objrotfv axis,vv //axis軸をvv分回転
fvset axis,0.0,0.0,0.0
fvdir axis,0.0 ,1.0 ,0.0 //y軸
objrotfv axis,vv(1)
fvset axis,0.0,0.0,0.0
fvdir axis,0 ,0 ,1 //z軸
objrotfv axis,vv(2)
//ラインオブジェクト設置
fvdir vv,0,0,-(sqrt(xx*xx+yy*yy+zz*zz)-5)
regobj lobj,m_line ; オブジェクト登録
setpos lobj, xx,yy,zz ; 座標の指定
setwork lobj, vv,vv(1),vv(2) ; 線分のオフセット
loop
*main
hgdraw ; 描画処理
hgsync 16 ; 時間待ち
stick k,127
if k&128 : goto *owari ; [ESC]で終了
fvset cfv,0.0, 0.0, 0.0
if k&2 : cfv+0.05
if k&8 : cfv-0.05
if k&1 : cfv(1)-0.05
if k&4 : cfv(1)+0.05
if k&16 : cfv(2)+0.05
if k&64 : cfv(2)-0.05
getang HGOJB_CAMERA,crx,cry,crz //現在のカメラ角度(これにcfvを各軸に加算)
selcang //カメラ選択(objrotfvを使う準備)
fvset axis,crx,-cry,crz //回転前の角度
fvdir axis,1.0 ,0.0 ,0.0 //x軸
objrotfv axis,cfv //axis軸をcfv分回転
fvset axis,crx,-cry,crz
fvdir axis,0.0 ,1.0 ,0.0 //y軸
objrotfv axis,cfv(1)
fvset axis,crx,-cry,crz
fvdir axis,0 ,0 ,1 //z軸
objrotfv axis,cfv(2)
getang HGOJB_CAMERA,crx,cry,crz
fvset vv,crx,-cry,crz
fvdir vv,0.0,0.0,100.0
selcpos
objsetfv vv
goto *main
*owari
end
fvfaceはz軸を回転させないので
目的の方向に向かせてz軸も回転させるには
> objrotfv axis,vv(2)
のvv(2)に角度を入れる