擬似ワイヤーフレームレンダリング d3moduleモジュール

S.Programs NETのsprocketさんが製作されたHSP向けモジュール『d3module』。 擬似的な3D(ワイヤーフレーム)レンダリング機能をサポートしてます。このモジュールは無料のスクリプト言語システム「HSP」(Hot Soup Processor)のバージョン3.1から 標準で同封されてます。モジュール内の描画処理は、HSPの標準命令(GDI)だけで済ましてるので、動作パフォーマンス面はちょっと難あり。(その一方で、HSPLet+インターネットブラウザでの動作が実現)

2003年から毎年開催されてるHSPプログラムコンテストの2005年版にて、モジュール本体とこれを利用したクールなデモプログラム(メガデモ)が最優秀賞を受賞してます。

↓ は「d3module」モジュールを利用したsprocketさん製作のtechdemoプログラム。(約6分の動画、音楽なし)

<br />動画の再生には<a href="http://www.adobe.com/jp/products/flashplayer/">Adobe Flash Player</a>が必要です. <small>(<a href="http://l.yimg.com/a/p/i/bcst/videosearch/7309/79985693.jpeg">techdemo ☆ サムネイル画像</a>)</small>
@ Yahoo! Video

d3timer関数 & d3getfps関数

「d3module」がサポートしている関数です。

この2つは他でも有用な処理でしょう。ただ、この関数のためだけにモジュール本体「d3m.hsp」をインクルードすると、コンパイル時に メインとなる描画処理部分のモジュールデータも含まれてしまう(実行ファイルがその分大きくなる)ため、ちょっと無駄です。そこで、 この処理だけ、モジュールから切り出してみましょう。

d3timer関数は、システムに含まれるwinmm.dllの「timeGetTime関数」を モジュール内で単純に呼び出してるだけです。関数宣言が含まれてる定義ファイル「winmm.as」をインクルードすれば利用できます。 ただ、関数形式ではなく命令形式になるので、結果がシステム変数statに返ることになります。

//	d3timer関数に相当するコード

#include "winmm.as"

	timeGetTime
	mes stat

次に、d3getfps関数は上のd3timer関数、つまりはWin32 API関数の timeGetTime関数の利用に加えて若干の演算処理を含んだものです。そこの部分をちょっと修整しておきます。

//	d3getfps関数に相当するコード

#include "winmm.as"

#module

#defcfunc d3getfps

//	修整部分
	timeGetTime
	a = stat / 200

	fpss(a&31)++ ; フレームカウント

	if bktp ! a {
		bktp = a
		cfps = 0

		; 過去 1000ms 分のカウントを集計
		repeat 5, 1
			cfps += fpss((a-cnt)&31)
		loop

		; 先 4000ms 分のカウントをリセット
		repeat 20, 1
			fpss((a+cnt)&31) = 0
		loop
	}

	return cfps

#global

	mes d3getfps()

もしfps取得まわりを別ファイルにしたいなら、「#module〜#global」の部分をコードを切り取って別ファイル名で 保存しておきます(ここでは「d3getfps.as」というファイル名)。必ず「winmm.as」をインクルードした後に、この モジュールファイルをインクルードするようにします。

//	d3getfps関数に相当するコードをモジュールファイルで

#include "winmm.as"
#include "d3getfps.as"

	mes d3getfps()

キーワード de HSP

HSPミニ講座

★ Yahoo!経由用ページ : ファイル | フォルダ | メニュー | マウス | ウィンドウ | オブジェクト | 文字列 | システム | 関数 | sendmsg命令 | その他 | サイトマップ | リンク