Created
March 23, 2022 02:37
-
-
Save hnakai0909/8e3feb766a787f945951faaefcf8c52b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "hgimg4.as" | |
#packopt name pronama_box | |
#packopt xsize 960 | |
#packopt ysize 640 | |
; 暮井 慧(プロ生ちゃん) 3D model (C) Pronama LLC | |
; | |
; HGIMG4対応 HSP3用スクリプトサンプル | |
; ※このスクリプト及びサンプルデータは、ライセンス規約のもと | |
; 自作ソフトで自由にお使い頂けます | |
; ※詳しくは、 https://kei.pronama.jp/ | |
; | |
; 背景キューブマップ素材(res/cubemap.png)は、 | |
; http://www.hdri-hub.com/ | |
; で公開されているデータを使用させて頂きました。 | |
; | |
; hsp36/sample/pronama3d/pronama_box.hsp, hsp36/sample/hgimg4/freemesh.hsp を改変 | |
; 2022/03/23 hnakai | |
title "HGIMG4 Test" | |
gpreset | |
setreq SYSREQ_LOGWRITE,1 ; 終了時にログを出力 | |
setcls CLSMODE_SOLID, $00c0c0 | |
gpload id_model,"res/pronamachan_l" ; モデル読み込み | |
setscale id_model, 0.025,0.025,0.025 | |
gpaddanim id_model,"look" ; "look"クリップを設定 | |
gpact id_model,"look" | |
gpusermat id_cubemat, "res/shaders/skybox.vert", "res/shaders/skybox.frag" | |
gpmatprmt id_cubemat, "u_diffuseTexture", "res/cubemap.png", GPOBJ_MATOPT_NOMIPMAP|GPOBJ_MATOPT_CUBEMAP | |
gpmatprm4 id_cubemat, "u_voffset", 0,14.0,0,0 | |
gpbox id_sky,-30,-1, id_cubemat | |
setpos id_sky,0,13,0 | |
gpfloor id_floor, 30,30, $404040 ; 床ノードを追加 | |
setpos id_floor, 0,-2 | |
gppbind id_floor, 0 ; 床の物理設定を行なう | |
setobjmode id_floor,OBJ_HIDE | |
setpos GPOBJ_CAMERA, 0,5.6,5 ; カメラ位置を設定 | |
; 自由な形状(Mesh)を表示する | |
; | |
; gpboxと同様の立方体を作成します(24頂点・4角形6面) | |
; 1つの頂点を( X,Y,Z, NX,NY,NZ, U,V )というグループで登録して、 | |
; そのインデックスを組み合わせてポリゴン(3角形or4角形)を登録します | |
; | |
gptexmat id_texmat, "res/dice.png" ; テクスチャマテリアルを作成 | |
gpmeshclear ; 登録をクリアする | |
a=0.5 ; サイズ | |
; 座標の登録 ( X,Y,Z, NX,NY,NZ, U,V ) | |
gpmeshadd p1, -a, -a, a, 0.0, 0.0, 1.0, 0.0, 1.0/6 | |
gpmeshadd p2, a, -a, a, 0.0, 0.0, 1.0, 1.0, 1.0/6 | |
gpmeshadd p3, -a, a, a, 0.0, 0.0, 1.0, 0.0, 2.0/6 | |
gpmeshadd p4, a, a, a, 0.0, 0.0, 1.0, 1.0, 2.0/6 | |
; ポリゴンの登録 | |
gpmeshpolygon p1,p2,p3,p4 | |
; 座標の登録 ( X,Y,Z, NX,NY,NZ, U,V ) | |
gpmeshadd p1, -a, a, a, 0.0, 1.0, 0.0, 0.0, 2.0/6 | |
gpmeshadd p2, a, a, a, 0.0, 1.0, 0.0, 1.0, 2.0/6 | |
gpmeshadd p3, -a, a, -a, 0.0, 1.0, 0.0, 0.0, 3.0/6 | |
gpmeshadd p4, a, a, -a, 0.0, 1.0, 0.0, 1.0, 3.0/6 | |
; ポリゴンの登録 | |
gpmeshpolygon p1,p2,p3,p4 | |
; 座標の登録 ( X,Y,Z, NX,NY,NZ, U,V ) | |
gpmeshadd p1, -a, a, -a, 0.0, 0.0, -1.0, 0.0, 0.0/6 | |
gpmeshadd p2, a, a, -a, 0.0, 0.0, -1.0, 1.0, 0.0/6 | |
gpmeshadd p3, -a, -a, -a, 0.0, 0.0, -1.0, 0.0, 1.0/6 | |
gpmeshadd p4, a, -a, -a, 0.0, 0.0, -1.0, 1.0, 1.0/6 | |
; ポリゴンの登録 | |
gpmeshpolygon p1,p2,p3,p4 | |
; 座標の登録 ( X,Y,Z, NX,NY,NZ, U,V ) | |
gpmeshadd p1, -a, -a, -a, 0.0, -1.0, 0.0, 0.0, 3.0/6 | |
gpmeshadd p2, a, -a, -a, 0.0, -1.0, 0.0, 1.0, 3.0/6 | |
gpmeshadd p3, -a, -a, a, 0.0, -1.0, 0.0, 0.0, 4.0/6 | |
gpmeshadd p4, a, -a, a, 0.0, -1.0, 0.0, 1.0, 4.0/6 | |
; ポリゴンの登録 | |
gpmeshpolygon p1,p2,p3,p4 | |
; 座標の登録 ( X,Y,Z, NX,NY,NZ, U,V ) | |
gpmeshadd p1, a, -a, a, 1.0, 0.0, 0.0, 0.0, 4.0/6 | |
gpmeshadd p2, a, -a, -a, 1.0, 0.0, 0.0, 1.0, 4.0/6 | |
gpmeshadd p3, a, a, a, 1.0, 0.0, 0.0, 0.0, 5.0/6 | |
gpmeshadd p4, a, a, -a, 1.0, 0.0, 0.0, 1.0, 5.0/6 | |
; ポリゴンの登録 | |
gpmeshpolygon p1,p2,p3,p4 | |
; 座標の登録 ( X,Y,Z, NX,NY,NZ, U,V ) | |
gpmeshadd p1, -a, -a, -a, -1.0, 0.0, 0.0, 0.0, 5.0/6 | |
gpmeshadd p2, -a, -a, a, -1.0, 0.0, 0.0, 1.0, 5.0/6 | |
gpmeshadd p3, -a, a, -a, -1.0, 0.0, 0.0, 0.0, 6.0/6 | |
gpmeshadd p4, -a, a, a, -1.0, 0.0, 0.0, 1.0, 6.0/6 | |
; ポリゴンの登録 | |
gpmeshpolygon p1,p2,p3,p4 | |
gpmesh id_box,,id_texmat ; メッシュノードを追加 | |
setpos id_box,-3,5,0 | |
setangr id_box,50,50 | |
gppbind id_box, 4, 0.5, GPPBIND_MESH ; メッシュ形状を物理設定する | |
camx=0.0:camy=3.0:camz=10.0 | |
*main | |
gosub *render | |
; スペースキーまたはクリックで箱を追加 | |
if key&$110 { | |
gpclone i, id_box ; 最初の箱をクローン | |
x=rnd(8)-4:y=rnd(4)+8:z=rnd(8)-4 | |
setpos i, x, y, z ; 落とす位置を微調整 | |
setangr i, rnd(256), rnd(256), rnd(256) | |
gppbind i, 4, 0.5 ; 箱の物理設定を行なう | |
;gppset i,GPPSET_GRAVITY,0,-400,0 | |
gppset i,GPPSET_ANGULAR_VELOCITY,double(rnd(100)-50)/5.0,double(rnd(100)-50)/5.0,double(rnd(100)-50)/5.0 | |
gppset i,GPPSET_LINEAR_VELOCITY,double(rnd(100)-50)/10.0,double(rnd(100)-50)/10.0,double(rnd(100)-50)/10.0 | |
} | |
; タッチでカメラ位置を動かす | |
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 | |
await 1000/60 ; 待ち時間 | |
goto *main | |
*render | |
stick key,15+64 | |
if key&128 : end | |
setpos GPOBJ_CAMERA, camx,camy,camz ; カメラ位置を設定 | |
gplookat GPOBJ_CAMERA, 0,1.8,0 ; カメラから指定した座標を見る | |
gsel 0 | |
redraw 0 ; 描画開始 | |
gpdraw ; シーンの描画 | |
color 255,255,255 | |
pos 8,8:mes "HGIMG4 sample" | |
redraw 1 ; 描画終了 | |
return | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment