Flashなどでありそうな3Dの画像ビューア。のサンプル。
マウスのホイールに連動して回転します。#include "d3m.hsp"
#include "hspmath.as"
#const TILE_NUM 16
#const SHIFT_TURN 5
#const BUFFER_WIDTH 200
#const BUFFER_HEIGHT 200
// タイルを表示するための配列変数
tile_x = 100, 300, 300, 100
tile_y = 0, 0, 0, 0
tile_z = 200, 200, 0, 0
// タイル用のバッファを作成
repeat TILE_NUM, 1
buffer cnt, BUFFER_WIDTH, BUFFER_HEIGHT
color , 255 : boxf
color 255, 255, 255
font msgothic, 32, font_bold
mes cnt
loop
// メイン画面の初期化・カメラ設定
screen 0, 240, 200, screen_normal
title "ホイールで回転"
d3setcam -250,-300,100, 250,0,100
// 各種初期化作業
gmode GMODE_ALPHA, , , 128
theta_shift = 0.0 // タイルの回転量
theta_add = 0.0 // タイルの角速度
moving = 0 // 回転中フラグ
need_to_draw = 1 // 描画フラグ
// ★メインループ
*main
gosub *move
gosub *draw
wait 5
goto *main
// 移動計算
*move
mw = mousew
if moving > 0 {
// 移動中
moving--
theta_shift += theta_add
} else : if mw != 0 {
// 静止中かつホイールが動いたとき
moving = SHIFT_TURN // SHIFT_TURN回動く
need_to_draw = 1 // 描画フラグON
// 角速度を決定
theta_add = M_PI * 2.0 * sgn(mw) / SHIFT_TURN / TILE_NUM
}
return
// 描画処理
*draw
if need_to_draw == 0 : return
if moving == 0 : need_to_draw = 0
redraw 0
color : boxf
vect_x = cos(theta_shift)
vect_y = sin(theta_shift)
// 2.0 * M_PI / TILE_NUMだけ角度(位置)を変えながら、タイルをTILE_NUM個描画
repeat TILE_NUM
d3rotate vect_x, vect_y, vect_x, vect_y, 2.0 * M_PI / TILE_NUM
d3setlocal 0,0,0, vect_x,vect_y,0, -vect_y,vect_x,0, 0,0,1
d3texture tile_x, tile_y, tile_z, cnt + 1, 0, 0, BUFFER_WIDTH, BUFFER_HEIGHT, 1
loop
redraw 1
return
2007年12月20日木曜日
3D画像ビューア サンプル
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿