light_test3.hsp

sample\hgimg4\light_test3.hsp » Plain Format

#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