しかし、ゲーム等に使えそうな利用方法を思い付いたので、何とかプログラムしてみました。
下記からダウンロードして試して頂けると、有難いです。
#include "hgimg4.as" title "HGIMG4 Test" ; ポイントライト[1] スポットライト[2] テスト randomize gpreset gpresetlight 1,1,2 ; ポイントライトを1個、スポットライトを2個、追加する setcls CLSMODE_SOLID, $404040 ; 背景色 // setdir GPOBJ_LIGHT, 0.5,0.5,0.5 ; 標準アンビエントカラーを設定 setdir GPOBJ_LIGHT, 0.2,0.2,0.2 ; 標準アンビエントカラーを設定 setcolor GPOBJ_LIGHT, 0.02,0.02,0.02 ; 標準ライトカラーを設定 ;〓〓 汽車モデル設定用 (汽車ライト設定用)〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 loco_x=40.0 : loco_y=0.0 : loco_z=5.0 angr_y= 0 ;〓〓ポイントライト1(汽車ライト)〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 Plight1_x=loco_x Plight1_y=loco_y+8.0 Plight1_z=loco_z ;━━━━━━━━━━━━━━━━━━━━━━━━━ // gpnull id_Plight1 ; 何もないモデルをライトにする場合はgpnullで生成 ;━━━━━━━━━━━━━━━━━━━━━━━━━ gpbox id_Plight1, 1.0, $ffff00 ; 黄色箱ノードを生成する gplight id_Plight1, GPOBJ_LGTOPT_POINT, 10 ; ポイントライトとして設定する // setcolor id_Plight1, 1,1,1 ; ライトカラーを設定 setcolor id_Plight1, 2.0, 2.0, 0.0 ; ライトカラーを設定 setpos id_Plight1,Plight1_x,Plight1_y,Plight1_z gpuselight id_Plight1,0 ; ポイントライト1を使用する ;〓〓スポットライト1(汽車ライト)〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 Slight1_x=loco_x+(3.4-3.4*cos(deg2rad(360*angr_y/256))) Slight1_y=loco_y+2.9 Slight1_z=loco_z+3.4*sin(deg2rad(360*angr_y/256)) ;━━━━━━━━━━━━━━━━━━━━━━━━━ // gpnull id_Slight1 ; ノードを生成する ;━━━━━━━━━━━━━━━━━━━━━━━━━ gpbox id_Slight1, 0.5, $ff0000 ; 赤色箱ノードを生成する(0.4) gplight id_Slight1, GPOBJ_LGTOPT_SPOT,50,0.5,1.0 ; スポットライトとして設定する // setcolor id_Slight1, 1.0, 0.4, 0.0 ; ライトカラーを設定 setcolor id_Slight1, 1.0*5, 0.4*5, 0.0*5 ; ライトカラーを設定 setpos id_Slight1, Slight1_x, Slight1_y, Slight1_z gpuselight id_Slight1,0 ; スポットライト1を使用する ;〓〓スポットライト2(空ライト)〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 // gpnull id_Slight2 ; ノードを生成する ;━━━━━━━━━━━━━━━━━━━━━━━━━ gpbox id_Slight2, 1.0, $0000ff ; 青色箱ノードを生成する gplight id_Slight2, GPOBJ_LGTOPT_SPOT,50,0.5,1.0 ; スポットライトとして設定する // setcolor id_Slight2, 1,1,1 ; ライトカラーを設定 setcolor id_Slight2, 1,2,16 ; ライトカラーを設定 // setpos id_Slight2, 10, 20, 30 setpos id_Slight2, 5, 14, 20 gpuselight id_Slight2,1 ; スポットライト2を使用する a=0.0 ; スポットライト2move用 ;〓〓 床ノード 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 gptexmat id_tex, "res/land/land0.png" ; テクスチャマテリアル作成 モデル読み込み gpfloor id_texmat1, 100, 100, , id_tex ; 床ノードを追加 ;〓〓 山山 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 gpload id_Mt,"res/land/MtMt_AA" ; [山]モデル読み込み setscale id_Mt, 0.5, 0.75, 0.5 setpos id_Mt, -10.0, 0.0, -15.0 ;〓〓 樹木(板ノード)設定 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 repeat 3 gptexmat id_tex, "res/tree_plate/tree"+cnt+".png",GPOBJ_MATOPT_NOZWRITE gpplate id_tree_plate(cnt), 5, 5, , id_tex setobjmode id_tree_plate(cnt), OBJ_XFRONT|OBJ_LATE|OBJ_SORT setpos id_tree_plate(cnt), (-5-2*cnt), 2.5, 10+2*cnt loop ;〓〓 モデル配置 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 ; tamane gpload id_tamane,"res/player+/tamane+/tamaneAB" setscale id_tamane, 0.01,0.01,0.01 setpos id_tamane, 0,0,0 gpact id_tamane ; seiuti gpload id_seiuti,"res/player+/seiuti+/seiuti+" setscale id_seiuti, 0.006,0.006,0.006 setpos id_seiuti, -2,0,-6 gpact id_seiuti ; 汽車モデル // loco_x=40.0 : loco_y=0.0 : loco_z=5.0 // angr_y= 0 ;━━━━━━━━━━━━━━━━━━━━━━━━━ gpload id_loco,"res/train/loco" setscale id_loco, 0.015,0.015,0.015 setpos id_loco, loco_x,loco_y,loco_z setangr id_loco, 0, angr_y, 0 ;〓〓 カメラ配置 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 // setpos GPOBJ_CAMERA, 0.0, 100.0, 5.1 ; カメラ位置を設定 // setpos GPOBJ_CAMERA, 0.0,20.0,60.0 ; カメラ位置を設定 setpos GPOBJ_CAMERA, 0.0,15.0,40.0 ; カメラ位置を設定 gplookat GPOBJ_CAMERA, 0.0, 0.0, 5.0 ; カメラから指定した座標を見る ;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 ;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 *main main_cnt++ stick key,15 if key&128 : end ;━━ 汽車move ━━━━━━━━━━━━━━━━━━ if main_cnt\5=0 { loco_x=loco_x-0.1 angr_y++ : if angr_y=256 : angr_y=0 } setpos id_loco, loco_x,loco_y,loco_z setangr id_loco, 0, angr_y, 0 ;〓〓 汽車move → ポイントライト1move (pos) 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 Plight1_x=loco_x Plight1_y=loco_y+8.0 Plight1_z=loco_z ;━━━━━━━━━━━━━━━━━━━━━━━━━ setpos id_Plight1,Plight1_x,Plight1_y,Plight1_z ;━━━━━━━━━━━━━━━━━━━━━━━━━ ;〓〓 汽車move → スポットライト1move (pos/lookat) 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 Slight1_x=loco_x-3.4*cos(deg2rad(360*angr_y/256)) Slight1_z=loco_z+3.4*sin(deg2rad(360*angr_y/256)) ;━━━━━━━━━━━━━━━━━━━━━━━━━ setpos id_Slight1, Slight1_x, Slight1_y, Slight1_z ;━━━━━━━━━━━━━━━━━━━━━━━━━ XX=20.0*cos(deg2rad(360*angr_y/256)) Slight1_XX=Slight1_x-XX ZZ=20.0*sin(deg2rad(360*angr_y/256)) Slight1_ZZ=Slight1_z+ZZ ;━━━━━━━━━━━━━━━━━━━━━━━━━ gplookat id_Slight1, Slight1_XX, 0, Slight1_ZZ ; ライトの方向を設定する ;━━━━━━━━━━━━━━━━━━━━━━━━━ ;〓〓 スポットライト2move (lookat) 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 if a_ok=0 : setcolor id_Slight2, 1,2,16 : a=a+0.5 : if a>50 : a_ok=1 if a_ok=1 : setcolor id_Slight2, 1,1,1 : a=a-0.5 : if a<-60 : a_ok=0 ;━━━━━━━━━━━━━━━━━━━━━━━━━ gplookat id_Slight2,-15,0,a ; ライトの方向を設定する ;━━━━━━━━━━━━━━━━━━━━━━━━━ redraw 0 ; 描画開始 gpdraw ; シーンの描画 color 255,255,255 pos 8,8:mes "HGIMG4 sample" redraw 1 ; 描画終了 await 1000/60 ; 待ち時間 goto *main ;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 ;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
hgimg4_light.zip
https://drive.google.com/file/d/17Yhg9nCFAmTxIumq52Yzf_8j_ecVssPW/view?usp=sharing
また、ツイッターに動画を載せています。
https://twitter.com/akiakinohiroro/status/1474950829778309127