#include "hgimg4.as" title "HGIMG4 Test" ; ポイントライト色変化テスト ; マウス/タッチドラッグでカメラを動かすことができます ; randomize gpreset gpresetlight 1,1 ; ポイントライトを1個追加する setcls CLSMODE_SOLID, $404040 ; 背景色 setcolor GPOBJ_LIGHT, 0.5,0.5,0.5 ; 標準ライトカラーを設定 setdir GPOBJ_LIGHT, 0.2,0.2,0.2 ; 標準アンビエントカラーを設定 ; 箱をライトとして設定します ; 何もないモデルをライトにする場合はgpnullで生成してください gpbox id_model, 0.5, $ffffff ; 箱ノードを生成する gplight id_model, GPOBJ_LGTOPT_POINT,10 ; ポイントライトとして設定する setcolor id_model, 1,1,1 ; ライトカラーを設定 gpuselight id_model ; ポイントライトを使用する ; モデルをたくさん配置する i=-1 mdx=10:mdz=10 ; X,Z方向の個数 px=20.0/mdx:pz=20.0/mdz ; 間隔を計算する z=-10.0 ; 配置開始Z座標 repeat mdz x=-10.0 ; 配置開始X座標 repeat mdx if i<0 { ;gpload id_base,"res/duck"; モデル読み込み gpbox id_base, 1 ; 箱ノードを生成する i=id_base } else { gpclone i, id_base ; クローンでモデルを作成する } setpos i, x,1,z x+=px loop z+=pz loop gpfloor id_floor, 40,40, $808080 ; 床ノードを追加 gosub *caminit myx=0.0:myy=3.0:myz=0.0 ; 光源の座標 px=0.0:pz=0.0 tx=0.0:tz=0.0 rate = 0.01 ; 光源が動く速さ hval=0 *main stick key,15+256 if key&128 : end gosub *cammove ; ライトの処理 dx=tx-myx:dz=tz-myz if (absf(dx)+absf(dz))<5 { ; 光源のターゲット座標を決定する tx=double(-10+rnd(20)) tz=double(-10+rnd(20)) } px=limitf(px+dx*rate,-0.3,0.3) pz=limitf(pz+dz*rate,-0.3,0.3) myx+=px myz+=pz setpos id_model, myx, myy, myz ; ライトの色を変化させる ; hsvcolorの値をRGB値に変換する hsvcolor hval,255,255 hval+:if hval>192 : hval=0 rval=double(ginfo_r)/255.0 gval=double(ginfo_g)/255.0 bval=double(ginfo_b)/255.0 setcolor id_model, rval,gval,bval ; ライトカラーを設定 redraw 0 ; 描画開始 addang id_model,0,0.02 ; ノード回転 gpdraw ; シーンの描画 color 255,255,255 pos 8,8:mes "HGIMG4 sample" redraw 1 ; 描画終了 await 1000/60 ; 待ち時間 goto *main *caminit camx=0.0:camy=3.0:camz=3.0 return *cammove ; タッチでカメラ位置を動かす a=key&256 if dragmd { ; ドラッグ中 if a { camx=0.05*(mousex-dragx)+cx camy=0.05*(mousey-dragy)+cz } else { dragmd=0 } } else { ; ドラッグなし if a { cx=camx:cz=camz dragx=mousex:dragy=mousey dragmd=1 } } setpos GPOBJ_CAMERA, camx,camy,camz ; カメラ位置を設定 gplookat GPOBJ_CAMERA, 0,1.8,0 ; カメラから指定した座標を見る return