;
; ビルボードを使用する
;
#include "e3dhsp.as"
;/////////////////
;
; 初期化
;
mes "Please wait..."
E3DInit
dim keybuf, 256 ;キー入力
E3DCreateFont 24,12,400,,,,"MS ゴシック",fontid ;フォントの設定
dim wtimeall,61 ;FPS表示を安定させるのに使用。
;/////////////////
;
; カメラの初期化
;
E3DSetProjection 100, 50000
;/////////////////
;
; ライトの設定
;
E3DCreateLight lid1 ;光源を作成
lightdirx1 = 0 ;平行光の向き
lightdiry1 = -1
lightdirz1 = -1
lightr1 = 255 ;平行光の色
lightg1 = 255
lightb1 = 255
E3DSetDirectionalLight lid1, lightdirx1, lightdiry1, lightdirz1, lightr1, lightg1, lightb1 ;光源を平行光源に設定
;/////////////////
;
; 形状データのロード
;
;ビルボード作成
sdim mediadir2, 2048
mediadir2 = curdir + "\\pict.bmp" ;適当なサイズのbmpファイルを指定してください。
;画像サイズ取得
buffer 2 : picload mediadir2
px = winx : py = winy
gsel 0, 1
;モデル配置
E3DCreateBillboard mediadir2, px*3, py*3, 1, bbid1, 1, 1 ;表示画像サイズの調整はここでやる。
E3DSetBillboardPos bbid1, 0, 0, 0
E3DCreateBillboard mediadir2, px*3, py*3, 1, bbid2, 1, 1
E3DSetBillboardPos bbid2, 100, 200, 0
;半透明などの処理
; E3DSetBlendingMode -1, bbid1, 1 ;加算モード
; E3DSetAlpha2 -1, 2, 3, bbid1 ;半透明
;////////////////////////////////////////////////////////////////
;/////////////////
;
; メインループ
;
*main
E3DGetKeyboardState keybuf ;キー状態取得
if keybuf.VK_ESCAPE = 1 : goto *bye ;[ESC]で終了
;バックバッファへの書き込み作業を行う
E3DBeginScene ;-----シーンスタート
;ビルボードの運動処理
; 自転
E3DRotateBillboard bbid1, 8,1,0
E3DRotateBillboard bbid2, 2,1,0
; 円周移動
E3DCos rr, 1500, rx
E3DSin rr, 1500, rz
E3DSetBillboardPos bbid1, rx+100, 200,rz
rr+=2 ;回転角度
if rr>=360 : rr = rr-360
E3DRenderBillboard ;全ビルボードの描画
E3DDrawTextByFontID fontid, 10,40, "" + wtime + " fps", 255,255,255,255
E3DEndScene ;-----シーン終了
E3DPresent ;バックバッファの内容を、プライマリバッファに転送。描画する。
;FPSを設定する。
E3DWaitbyFPS 60 : await 0
gosub *fps_antei
goto *main
;////////////////////////////////////////////////////////////////
;
; サブルーチン
;
;/////////////////
;
; 終了処理
;
*bye
E3DDestroyLight lid1 ;ライトを破棄
E3DBye
end
;/////////////////
;
; fps値の表示安定化
;
*fps_antei
;60回の実測値平均を取る。
;値が不安定だとどのくらいのFPSが出ているのか読み取れないので、この対策。
;FPSはE3DWaitbyFPSで指定した値以上にならないよう調整されるため、指定した値以下になっても以上にはならない。
; このため普通は設定値より少し小さいFPSが表示される。
i=0 : wtimesum = 0 : wtimeall.60 = stat
repeat 60
i++
wtimeall.cnt = wtimeall.i
wtimesum += wtimeall.cnt
loop
wtime = wtimesum / 60
return
|