Chapter4. 拡張関数


4.6 3Dグラフィックス関数

関数名
G3@FRMGETDATA
機能
フレームの情報を取得する。例えば指定のフレームが描画される画面の座標を取得できる。これはG2関数をつかった2D描画との連動に便利です。また3D上の座標を取得することができる。これらの位置情報は階層構造をもつフレームでも取得することができる。
書式
G3@FRMGETDATA(Frm, type )
《パラメーター》
Frmint。情報を取得するフレーム(G3@FRMMAKE の戻り値)。
typeint。取得したい情報の番号
0 :描画する画面上のX座標
1 :描画する画面上のY座標
2 :3D空間上のフレームのX軸の絶対座標
3 :3D空間上のフレームのY軸の絶対座標
4 :3D空間上のフレームのZ軸の絶対座標
用例
フレームの階層構造を持ちウネウネ動く多間接オブジェクトで、先端になるフレームの中心を G@PRINT関数で描く記号で指し示し続けさせる。

DIM     BOX(32)

//画面設定
CH1=G@SETUP(640,480,16,1)
RANDSET(0)

LT1=G3@LIGHTMAKE(3,65536,65536,65536)
G3@ADD(LT1,0)
KYUMS = G3@MESHLOAD("Kyuutai.x")

FMB = 0
FOR I=0 TO 31
  FM = G3@FRMMAKE()
  G3@ADD( FM , FMB )
  G3@ADD( KYUMS , FM )
  IF I=0 THEN
    G3@FRMSETPOS( FM , 0 , 0 , 20.0 )
  ELSE
    G3@FRMSETPOS( FM , 3.0 , 0 , 0.0 )
  ENDIF
  G3@FRMSETCOLOR( FM , RAND()+0.5, RAND()+0.5, RAND()+0.5 )
  G3@FRMSETMATERIALMODE( FM , 2 )
  G3@FRMSETROTAUTO( FM , RAND() , RAND() , RAND() )
  BOX(I) = FM
  FMB = FM
NEXT

LOOP
  //描画
  G@CHRCLEAR(CH1)
  G3@RENDER()
  X = G3@FRMGETDATA(BOX(31),0)/1.0
  Y = G3@FRMGETDATA(BOX(31),1)/1.0
  G@PRINT(CH1, X , Y ,"\")
  G@PRINT(CH1, X+20 , Y+20 ,STR( X ) +" : "+ STR( Y ));
  G@FLIP()
ENDLOOP


<「kyuutai.x」ダウンロード>