#include "hgimg4.as" #packopt name pronama3 #packopt xsize 960 #packopt ysize 640 ; 暮井 慧(プロ生ちゃん) 3D model (C) Pronama LLC ; ; HGIMG4対応 HSP3用スクリプトサンプル ; ※このスクリプト及びサンプルデータは、ライセンス規約のもと ;  自作ソフトで自由にお使い頂けます ; ※詳しくは、 https://kei.pronama.jp/ ; ; 背景キューブマップ素材(res/cubesky.png)は、 ; http://www.custommapmakers.org/ ; で公開されている、Colin Lowndes氏のデータを使用させて頂きました。 ; ; *2022/5 K-sさんによる鏡面反射の修正を反映 title "HGIMG4 Test" #define GRP_SKY $8000 gpreset setreq SYSREQ_LOGWRITE,1 ; 終了時にログを出力 setcls CLSMODE_SOLID, $404040 gpload id_model,"res/pronamachan" ; モデル読み込み setscale id_model, 0.025,0.025,0.025 gpaddanim id_model,"WALK00_F" ; アニメーションクリップを設定 gpact id_model,"WALK00_F" ; アニメーションクリップを再生 ;setalpha id_model,128 sx=960:sy=640:id_render=1 buffer id_render,sx,sy,screen_offscreen sdx=512:sdy=512:id_shadow=2 buffer id_shadow,sdx,sdy,screen_offscreen gpusermat id_cubemat, "res/shaders/skybox.vert", "res/shaders/skybox.frag" gpmatprmt id_cubemat, "u_diffuseTexture", "res/cubesky.png", GPOBJ_MATOPT_NOMIPMAP|GPOBJ_MATOPT_CUBEMAP gpmatprm4 id_cubemat, "u_voffset", 0,8.0,0,0 gpbox id_box,-30,-1, id_cubemat setpos id_box,0,3,0 setobjrender id_box, GRP_SKY setobjrender GPOBJ_CAMERA, -1 gpscrmat id_texmat, id_shadow, GPOBJ_MATOPT_NOLIGHT|GPOBJ_MATOPT_NOMIPMAP|GPOBJ_MATOPT_MIRROR gpfloor id_floor, 8,8, -1,id_texmat ; 床ノードを追加 setalpha id_floor,128 gpnull id_camera gpcamera id_camera, 45.0, 1.0, 0.5, 768 camx=0.0:camy=3.0:camz=3.0 gsel 0 *main ; タッチでカメラ位置を動かす if dragmd { ; ドラッグ中 getkey a,1 if a=1 { camx=0.05*(mousex-dragx)+cx camy=0.05*(mousey-dragy)+cz } else { dragmd=0 } } else { ; ドラッグなし getkey a,1 if a { cx=camx:cz=camz dragx=mousex:dragy=mousey dragmd=1 } } ; カーソルキーでカメラ位置を動かす if key&1 : camx -=0.2 if key&4 : camx +=0.2 if key&8 : camz +=0.2 if key&2 : camz -=0.2 ;addang id_model,0,0.02 ; ノード回転 gosub *render await 1000/60 ; 待ち時間 goto *main *render stick key,15+64 if key&128 : end gpusecamera id_camera ; 使用するカメラを選択する gpcnvaxis dx,dy,dz,0,-3,3, 3 setpos id_camera, camx, -camy, camz gplookat id_camera, 0,0,0 ; カメラから指定した座標を見る addang id_camera, 0, 0, atan(-camz, camx) - M_PI / 2 rt = sqrt(camx * camx + camy * camy + camz * camz) / 8 ; 8はid_floorの大きさ(大きさを変えてたらここも変える) bs = 0.025 ; モデルのスケール setscale id_model, bs * rt, bs * rt, bs * rt ; カメラの距離に応じてスケール変える gsel id_shadow redraw 0 ; 描画開始 gpdraw GPDRAW_OPT_DRAWSCENE|GPDRAW_OPT_DRAWSCENE_LATE ; シーンの描画 redraw 1 ; 描画終了 gpusecamera GPOBJ_CAMERA ; 使用するカメラを選択する setpos GPOBJ_CAMERA, camx,camy,camz ; カメラ位置を設定 gplookat GPOBJ_CAMERA, 0,1.8,0 ; カメラから指定した座標を見る setscale id_model, bs, bs, bs ; スケール戻す gsel id_render redraw 0 ; 描画開始 gpdraw ; シーンの描画 redraw 1 ; 描画終了 gsel 0 redraw 0 ; 描画開始 gmode 0 pos 0,0:celput id_render ;pos 0,0:celput id_shadow,0,0.25,0.25 color 255,255,255 pos 8,8:mes "HGIMG4 sample" redraw 1 ; 描画終了 return