Skip to content

Instantly share code, notes, and snippets.

@hnakai0909
Created March 23, 2022 02:37
Show Gist options
  • Save hnakai0909/8e3feb766a787f945951faaefcf8c52b to your computer and use it in GitHub Desktop.
Save hnakai0909/8e3feb766a787f945951faaefcf8c52b to your computer and use it in GitHub Desktop.
#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