sample_08_ball.hsp

sample\d3module\sample_08_ball.hsp » Plain Format

;============================================================
;                                                 2005/--/--
;	d3module  sample script
;	for HSP 3.0
;
;============================================================
;
; 紙風船形の球体を描画するサンプルです。
;
; このサンプルからは、タイマー d3timer() を使用して、
; アニメーション速度をフレームレートによらず一定にしています。
;
; 描画中のフレームレートは、d3getfps() で取得できます。
;
;============================================================

#include "d3m.hsp"

	title "S.Programs d3module sample"


	d3mkparticle 0, 255, 255, 64

	gmode 5, , , 192 ; パーティクルを描画するときのコピーモードを設定


	;------------------------------------------------------------
	; Windows が起動してからの経過時間を ms で取得

	time_start = d3timer()

	;------------------------------------------------------------


*mainloop

	; ループを開始してからの時間を取得
	time = d3timer() - time_start


	;------------------------------------------------------------
	; 現在のフレームレート (fps) を取得

	fps = d3getfps()

	; (1 フレームにつき 1 回だけ呼び出す必要があります)
	;------------------------------------------------------------


	title "fps = " + fps

	redraw 0

	color 24, 24, 24 : boxf


	; カメラ座標を回転させる
	d3setcam cos(0.001 * time) * 1000, sin(0.001 * time) * 1414, cos(0.001 * time) * 1000


	; 球体描画
	color 255, 255, 192


	POLYS = 20 ; 球体分割数
	dh = 6.2831853 / POLYS

	r = 500 ; 半径


	; oOOo
	repeat POLYS / 2 - 1, 1
		ph = dh * cnt

		d3initlineto

		repeat POLYS + 1
			th = dh * cnt

			x = 0
			y = 0
			z = r

			; 座標を回転置換
			d3rotate y, z, y, z, ph
			d3rotate x, y, x, y, th

			d3lineto x, y, z
		loop
	loop


	; (())
	repeat POLYS
		th = dh * cnt

		d3initlineto

		repeat POLYS / 2 - 1, 1
			ph = dh * cnt

			x = 0
			y = 0
			z = r

			; 座標を回転置換
			d3rotate y, z, y, z, ph
			d3rotate x, y, x, y, th

			d3lineto x, y, z
			d3particlem 0, 40
		loop
	loop


	redraw
	await


	goto *mainloop