基本的な使い方
はじめるまえに
Easy3Dは普通のHSP用プラグインです。通常のプラグイン同様に使用する準備をしておいてください。
具体的に説明すると…
・commonフォルダにe3dhsp3.asをコピーする。
・hspのインストールフォルダ(hsp3.exeが置いてあるフォルダに)e3dhsp3.dllをコピーする。
・HSファイルがある場合はhsphelpフォルダにHSファイルをコピーする。
マニュアルやサンプルは消さずにどこか分かる場所に置いておきましょう。
あとで非常に参考になります。
基本的な使い方
まずは大まかな構成だけを説明します。
最初にe3dhsp3.asをインクルードしておきます。
E3DInit で初期化。
各初期設定終了後メインループに突入します。
メインループは次のように書きます。
*main
E3DChkInView scid, hsid1 ;描画準備
E3DBeginScene scid ;-----シーンスタート
…(作画処理)…
E3DEndScene ;-----シーン終了
E3DPresent scid ;描画処理
E3DWaitByFPS 60, chkfps1 : await 0 ;時間待ち
goto *main
作画処理の部分を上のようにして挟み込んでやって記述します。
最低限の構成として書いたので必要に応じて作画処理の部分以外の部分の書き換えもありえます。
ループのイメージはE3DBeginScene~E3DEndSceneの間にバックバッファという仮想画面に描画しておき、
E3DPresentを実行すると、仮想画面に描画した内容をプライマリバッファという実際の
画面に描画する…というしくみみたいです。
E3DBeginScene~E3DEndSceneの間がredraw 0になっていて、
E3DPresentがredraw 1に相当するという感じでしょうか?
あとはサンプルとにらめっこして、一つ一つ命令を追っかけていってください。
scidって何?
HSP3からscidという引数が増えました。
scidはスワップチェインを行なうためのIDで、このIDを使うとスワップチェイン(複数の画面に描画を行なうこと)が出来るようになります。
つまりはマリオカートみたいな2人プレイ用の画面分割などが出来るようになるわけです。
ぜひ使ってみたい命令です。
今回は…というかしばらくはこの機能は使いませんので、scidは特に気にせずE3DInitで取得した値をそのまま使っておけば問題ありません。
サンプルの使い方
おそらく今後はほぼ毎回サンプルスクリプトを掲載することになると思います。
ですので、あらかじめ共通する使い方を最初に説明しておきます。
まずサンプルのファイルを置くための場所(フォルダ)を1個用意してください。ここでは説明のためsampleフォルダを作ったとしましょう。
次に素材データを入れるためのフォルダを作成します。sampleフォルダの中にmediaフォルダを作成します。
サンプルスクリプトをコピーまたはダウンロードしたら、スクリプトファイルはsampleフォルダの中に入れてください。
使用する素材ファイルはmediaフォルダに入れてください。
あとはサンプルスクリプトを開いて実行するだけです。
必要な素材ファイルはEasy3Dのサンプルに含まれるものを使用するか、ここでダウンロードできるようにしています。
Easy3Dのサンプルに含まれるものはEasy3DのMediaフォルダ内にありますので、自力で探してコピーして下さい。
サンプル
タコのモデルを表示させるだけのサンプルです。
タコのモデルファイルはEasy3Dのサンプルにtako.sigというファイル名で含まれています。
タコのモデル用のテクスチャファイルはtako.sigと同じフォルダ内にtako01.bmpというファイル名で含まれています。
tako.sigとtako01.bmpをmediaフォルダにコピーしてから実行してください。
; ; 形状データを表示するだけの最低限のプログラム ; #include "e3dhsp3.as" ; ; 初期化 ; wid = 0 ;ウインドウID objid = -1 ;オブジェクトID fullscreenflag = 0 ;フルスクリーンフラグ bits = 16 ;色数ビット数(fullscreenflag = 1 のときのみ有効) multisamplenum = 0 ;アンチエイリアスのマルチサンプル数(0,2~16) ;scid スワップチェインID E3DInit wid, objid, fullscreenflag, bits, multisamplenum, scid ; ; 形状データのロード ; sdim mediadir, 2048 mediadir = dir_cur + "\\Media\\tako.sig" E3DSigLoad mediadir, hsid1 ; E3DSetPos hsid1, 0, 0, 0 frameno1 = 0 ;モーションは使用しない。 ; ; メインループ ; *main E3DChkInView scid, hsid1 ;モデルが、視野内にあるか判定 E3DBeginScene scid ;-----シーンスタート ;バックバッファへの書き込み作業を行う stick key if key&128 : goto *bye E3DRender scid1, hsid1, 0, frameno1, 0 ;バックバッファにレンダリングする。(タコ描画) E3DEndScene ;-----シーン終了 E3DPresent scid ;バックバッファの内容を、プライマリバッファに転送。描画する。 ;FPSの調整と表示 E3DWaitByFPS 60, chkfps1 : await 0 title ""+chkfps1 + " FPS" goto *main ; ; 終了処理 ; *bye E3DBye end
サンプル実行結果。
光源を設定していないのでちょっと薄暗い。