------------------------------------------------------------------------------ HGIMG ver3.0 REFERENCE MANUAL High Performance Graphic Image Plugin HSP拡張DLLリファレンス copyright 2001-2005 (c) onion software ------------------------------------------------------------------------------ ・はじめに HGIMG3は、Hot Soup Processor ver3.0以降とともに使用することで、 画面の描画に関する様々な機能拡張を提供します。 HGIMG3は、Windows98、Me、2000、XP以降のDirectX8以上がインストール された環境で動作します。 ・インストール HGIMG3は、以下のようなファイル構成になっています。 hgimg3.txt (このファイル) hsp3hg.exe (実行用ランタイム) commonフォルダ (HGIMG3ヘッダファイル) hsphelpフォルダ (HGIMG3ヘルプファイル) runtimeフォルダ (HGIMG3カスタムランタイム) sampleフォルダ (HGIMG3サンプルスクリプト & データ) 圧縮ファイル、hgimg3.lzhを解凍したものをHSP3のインストールフォルダ (HSED3.EXEおよび、HSP3.EXEのあるディレクトリ)にコピーしてください。 common、hsphelp、runtime、sampleフォルダなどが上書きされますが、 重複ファイルを上書きすることはないので、そのままコピーして頂いて 構いません。 HGIMG3を使用したスクリプトを作成する場合には、スクリプトの先頭に 必ず「#include "hgimg3.as"」という行を追加してください。 以上で、HSPの機能が拡張され、このリファレンスで説明をしている命令を 使用することができるようになります。 まず最初に、付属のサンプルスクリプトを実行してみてください。 拡張された機能の簡単な使用例を見ることができるはずです。 サンプルスクリプトは、HSPインストールフォルダ以下のsample/hgimg3 にコピーされているはずです。 ・注意点 HGIMG3は、外部DLLファイルによる拡張プラグインではありません。 HSP3.0の機能を内包したランタイムファイルとして提供されています。 必ず、HGIMG3のランタイムに対応したバージョンのコンパイラ (hspcmp.dll)やスクリプトエディタをご使用下さい。 また、HSP3.0は実行ランタイムの切り替えが可能なバージョン (HSP3.0β4以降)をお使い下さい。 ・著作権および連絡先 著作権および、使用の規定についてはHot Soup Processor ver3.0と同様です。 HSPによって作成したEXEファイルと同様にHGIMG3ランタイムを自由に配布して 頂いて構いません。 また、付属のサンプルスクリプトも自由に改変、公開していただいて構いません。 onion softwareは本プログラムによって生じた、いかなる損害についても 保証いたしません。自己の責任の範囲で使用してください。 ・HGIMG3の概要 HGIMG3は、高度な2D、3Dグラフィックを使ったアプリケーションをHSPから 作成するための拡張プラグインです。 スプライトを使用した2Dゲームから、3Dモデルを使った本格的なソフトまで幅広く 利用することができます。 HGIMG3でサポートされる主な機能は以下の通りです。 ・DirectX、フルカラーモードを対象とした高度な描画システム ・2Dスプライト、3Dポリゴンなどを共通の命令で設定可能な描画エンジン ・2Dスプライトの回転拡大縮小、α合成、透明色抜き処理、タイリング(BG表示) ・3D座標上の2Dスプライトと3Dポリゴンを混在可能なワールド管理 ・3Dの階層構造を持ったポリゴンモデルの管理が可能 ・ボーンを用いた3Dワンスキンモデルのアニメーション表示が可能 ・アニメ風のレンダリング(トゥーンシェーディング)表示が可能 ・BMP、JPG、GIF、PNG、DDS、TGA、TIFF形式のテクスチャサポート ・アンチエイリアスを含めた日本語フォントのテクスチャレンダリング機能 ・アルファチャンネルを含むテクスチャ画像のサポート ・スプライトの表示、移動の管理および衝突判定機能 ・HSP3に対応した浮動小数によるジオメトリ演算 ・イベントリスト登録機能により自由度の高い自律処理を実現可能 ・独自フォーマット(mx)による3Dモデルの読み込み ・単位時間あたりの移動量から動きの計算を行なうタイムスケールモードを搭載 ・DXF形式の3Dデータ読み込みをサポート ・使いやすい直接描画命令を装備 主要な命令はVer2.61添付のバージョン(HGIMG2)と互換で動作しますが、 機能の整理統合により、一部の命令が非互換または廃止となっています。 また、フラグやモードなど細かい部分が異なっているため、以前のスクリプトを 移植して利用する場合には修正が必要です。 逆に、HSP3.0に合わせてより便利に拡張されている部分も多数あります。 HGIMG2の考え方や命令の仕組みはそのままで、HGIMG3を習得することが できるはずですので、是非ともHGIMG3の新機能をご活用ください。 Ver2.61添付のバージョン(HGIMG2)と比べて以下の機能が削除されています。 ・独自のアニメーション形式(ma)によるモーション再生 ・ポリゴン情報、および階層情報の参照と変更、mx形式でのセーブ ・画面上の2D位置から該当するポリゴンを検索するポリゴンスキャン機能 ・objmov系のMOCパラメーター自動変更の仕様が変更されています ・フォールオフレンダリング機能は削除されタイムスケールモードが搭載されています HGIMG3は、以前のバージョン(HGIMG2)に比べて、機能は増えていますが、 より習得しやすく、通常使用するための命令数やパラメーターは削減されています。 初心者から、上級者まで手軽に2D・3Dの高度な機能を活用することを目指して 設計されています。 ・現バージョンでの注意点 以下の機能は未実装です。将来のバージョンでサポートされる予定です。 ・mx形式モデルの読み込み ・タイムスケールモード ・追加のライトパラメーター ・制限のないオブジェクト・モデル登録 ・より高度なコリジョン(当たり判定)システム ・更新履歴 2005/07/13 ( Ver3.0β8 ) HSP3.0β12ライブラリでビルド。 2005/06/23 ( Ver3.0β7 ) 回転アニメーションの補間方法を球面線形に修正。 ボーンのないモデルの光源計算が間違っていたのを修正。 getxinfo命令のパラメーター仕様を一部変更。 getxinfo、setxinfo命令によるマテリアル情報の読み書きに対応。 2005/06/22 ( Ver3.0β6 ) ライト色、アンビエント色の反映がおかしかった部分を修正。 1本のボーンに100%依存するメッシュの表示に対応。 カメラ画角(FOV)、表示範囲(near,far)パラメーターが反映するように修正。 ウインドゥサイズに合わせてカメラアスペクト比を補正するように修正。 hggetreq命令でDirectXのCOMポインタを取得できるように修正。 getxinfo、setxinfo命令を追加。 2005/06/15 ( Ver3.0β5 ) HSP3.0β10ライブラリでビルド。 ライト色、アンビエント色が正しく反映されていなかったのを修正。 アニメーション切り替え時にスピードをデフォルトに戻すように修正。 reglight、objlight命令を追加。 2005/05/27 ( Ver3.0β4 ) HSP3.0β8ライブラリでビルド。 hgline、hgcapture命令を追加。 ボーンを含む一部のモデルが正しく表示されない不具合を修正。 addspr、addplate命令にテクスチャID指定のパラメーターを追加。 event_set系の命令でパラメーター省略時に正しく動作しない不具合を修正。 2005/04/12 ( Ver3.0β3 ) HSP3.0β7ライブラリでビルド。デバッグウインドゥに対応。 modelspeed命令を追加。 2005/03/23 ( Ver3.0β2 ) xファイル読み込み時の法線再計算を行なわないように修正。 fvouter,fvsub,fvdiv命令の計算順序が逆になっていた不具合を修正。 複数アニメーション登録のためのaddxanim命令を追加。 アニメーション設定のためのobjact,objspeed,getanim命令を追加。 2005/02/25 ( Ver3.0β1 ) テスト版として初出。 ・命令一覧(メイン) hgini mode,yofs,ysize DLLの初期化 hgreset シーン情報の初期化 hgsrc ソースバッファ指定 hgdraw val, timer 描画の実行 hgbye DLLの開放 getsync val,mode 時間待ち情報を取得 sync val 時間待ちを行なう getdebug val デバッグ情報取得 hgsetreq type,val システムリクエスト設定 hggetreq val,type システムリクエスト取得 setborder sx,sy,sz オブジェクト有効範囲設定 clscolor sx,sy,cx,cy 背景色設定 clstex id 背景テクスチャ設定 setfont cx,cy,sw オリジナルフォント定義 fprt "mes",x,y 定義フォント文字列表示 cammode mode カメラモードの設定 objact ObjID, anim 指定アニメーションを開始 setuv tx0,ty0,tx1,ty1 登録テクスチャUV座標を指定 setsizef sx,sy 登録モデルの幅、高さを指定 setbg sx,sy,cx,cy BGマップ情報設定 getbg val,modelID BGマップを取得 setmap modelID,x,y BGマップスクロール指定 addbox val 箱(BOX)モデルを作成 addplate val, mode 板(PLATE)モデルを作成 addspr val, mode 2Dスプライトモデルを作成 addbg val, winx, winy,sw 2DBGマップモデルを作成 addxfile model,"filename" モデルファイル読み込み regobj val,ModelID, mode オブジェクトの登録 delobj ObjID オブジェクトの削除 setobjm ObjID, ModelID オブジェクトのモデル設定 setobjmode id,mode,sw オブジェクトのモード設定 setcoli id,mygroup,enegroup オブジェクトのコリジョン設定 getcoli val,id,distance オブジェクトのコリジョン判定 findobj exmode,group オブジェクト検索 nextobj val 次のオブジェクト検索 uvanim id, wait, times, sw モデルのUVアニメ設定 setmode ModelID, mode モデルのモード設定 settimer ModelID, timer モデルのタイマー設定 clsblur val ブラー設定 setcolor r,g,b 単色ポリゴン作成設定 falpha val フォント文字α値を設定 ・命令一覧(補助) selmoc id, mocofs MOC情報を設定 selpos id 移動座標をMOC情報に設定 selang id 回転角度をMOC情報に設定 selscale id スケールをMOC情報に設定 seldir id 移動量をMOC情報に設定 selcam ofs カメラをMOC情報に設定 selcpos カメラ座標をMOC情報に設定 selcang カメラ角度をMOC情報に設定 selcint カメラ注視点をMOC情報に設定 sellight id,ofs 光源をMOC情報に設定 sellpos id 光源座標をMOC情報に設定 sellang id 光源角度をMOC情報に設定 sellcolor id 光源色をMOC情報に設定 objset1 ofs,x MOC情報を設定 objadd1 ofs,x MOC情報を加算 objmov1 ofs,times,x MOC移動情報を設定 objsetf1 ofs,x MOC情報を設定 objaddf1 ofs,x MOC情報を加算 objmovf1 ofs,times,x MOC移動情報を設定 objset1r ofs,x MOC情報を設定 objmov1r ofs,times,x MOC移動情報を設定 objset2 ofs,x,y MOC情報を設定 objadd2 ofs,x,y MOC情報を加算 objmov2 ofs,times,x,y MOC移動情報を設定 objsetf2 ofs,x,y MOC情報を設定 objaddf2 ofs,x,y MOC情報を加算 objmovf2 ofs,times,x,y MOC移動情報を設定 objset2r ofs,x,y MOC情報を設定 objmov2r ofs,times,x,y MOC移動情報を設定 objset3 x,y,z MOC情報を設定 objadd3 x,y,z MOC情報を加算 objmov3 times,x,y,z MOC移動情報を設定 objsetf3 x,y,z MOC情報を設定 objaddf3 x,y,z MOC情報を加算 objmovf3 times,x,y,z MOC移動情報を設定 objset3r x,y,z MOC情報を設定 objmov3r times,x,y,z MOC移動情報を設定 objgetfv fv MOC情報を取得 objsetfv fv MOC情報を設定 objaddfv fv MOC情報を加算 objmovfv fv,times MOC移動情報を設定 objgetv v MOC情報を整数値で取得 objsetv v MOC情報を整数値で設定 objgetstr sval MOC情報を文字列で取得 fvget (未使用) fvset fv,x,y,z ベクトル設定 fvseti fv,x,y,z 整数値からベクトル設定 fvadd fv,x,y,z ベクトル加算 fvsub fv,x,y,z ベクトル減算 fvmul fv,x,y,z ベクトル乗算 fvdiv fv,x,y,z ベクトル除算 fvdir fv,x,y,z ベクトル回転 fvmin fv,x,y,z ベクトル最大値 fvmax fv,x,y,z ベクトル最小値 fvouter fv,x,y,z ベクトル外積 fvinner fv,x,y,z ベクトル内積 fvface fv,x,y,z 座標から角度を得る fvunit fv ベクトル正規化 fsin fval,rot サインを求める fcos fval,rot コサインを求める fsqr fval,prm 平方根を求める fadd fval,prm 小数値加算 fsub fval,prm 小数値減算 fmul fval,prm 小数値乗算 fdiv fval,prm 小数値除算 fcmp val,prm1,prm2 小数値比較 froti fval,prm 整数値角度を小数値に変換 fv2str fv ベクトルを文字列に変換 str2fv fv,"x,y,z" 文字列をベクトルに変換 str2f fval,"val" 文字列を小数値に変換 f2str val,fval 小数値を文字列に変換 f2i v,x,y,z 小数値を整数値に変換 mxload "filename",sw モデルファイル読み込み setmtex id, nodeid, tex, shade モデルのテクスチャを設定 getmtex val, modelid, nodeid モデルのテクスチャを取得 getnode val, modelID, nodeID モデルのノード情報を取得 evmodel eventID, modelID イベントモデルID設定 copybuf mode 指定バッファに画面コピー mxsend val MX形式ファイルをパース mxconv val MX形式ファイルを変換 mxaconv val MA形式ファイルを変換 mxgetpoly val ポリゴン数を取得 mxgetname val,id テクスチャ名を取得 settex x,y,sw テクスチャを登録 gettex val テクスチャIDを取得 modelmovef id,x,y,z モデルの絶対位置を移動 modelscalef id,x,y,z モデルの拡大縮小 modelshade id,mode モデルシェーディングモードの設定 dxfload "file" DXF形式ファイルを読み込み dxfconv val DXF形式ファイルをパース dxfgetpoly val ポリゴン数を取得 ・動作の概要 HGIMG3は、すべてのマシンで同等の表示、最適化された速度を再現できるように 開発されています。3Dアクセラレーターを搭載しない機種(ノート型やオンボード ビデオチップ搭載機種など)、であっても著しくパフォーマンスが落ちることなく 動作させることができます。また、初期化を手軽に行なえるとともにDirectX バージョンの不一致やドライバの相性などによる不具合を最小限に抑えることを 目指しています。 HGIMG3では、「モデル」と「オブジェクト」という単位で描画の管理を行なって います。HSPの命令の多くは、準備の必要もなく目的の処理を行なっていましたが、 HGIMG3では、最初の準備段階として使うものを「登録」しておき、後でまとめて 全部を描画するスタイルを取っています。これは直感的ではない反面、処理の効率化 と高速化を図ることができます。HGIMG3には、100種類以上の命令があり最初は その複雑さに戸惑うかもしれませんが、最低限使うものはわずかですので、少しづつ 使って覚えていってください。 何らかの絵を出す場合には、最初に「モデル」を登録する必要があります。 「モデル」は、 ・2Dスプライト ・3Dスプライト(板) ・立方体 ・3Dモデル のような種類があり、それぞれの種類に応じて色々な設定項目があります。 たとえば、2Dの絵を画面に表示したい場合は、種類が「2Dスプライト」の「モデル」 を最初に登録しなければなりません。 「2Dスプライト」は、表示に使う絵(テクスチャ)やアニメーションの設定などが あり、必要な項目を設定すればOKです。 「モデル」を登録しただけでは画面には何も表示されません。 「モデル」は、画面に表示するための材料となります。画面に表示される可能性が あるものをあらかじめ材料としてストックしておくものと考えて下さい。 「モデル」に続いて、「オブジェクト」を登録します。 「オブジェクト」は「どの場所にどのモデルを出すか」という情報を持った器の ようなものです。「オブジェクト」が指す「モデル」を画面に表示します。 「オブジェクト」は単なる器なので、同じ物体を2つ画面に出す場合には、 「モデル」を1つ登録して、そのモデルを持った「オブジェクト」を2つ登録すれば いいことになります。「モデル」は、その形や色自体の情報を持っておき、 「オブジェクト」は、「モデル」を画面上に出す場所や動きの設定などを持っている と考えておいてください。 これらの概念をもとに、2D、3D画像をコントロールするための命令が多数用意されて います。 HGIMG3は内部では、すべて32bit浮動小数によりパラメータを管理、演算されて います。命令のパラメーターで小数が必要な部分では、HSP3.0の実数指定および 実数型変数に完全に対応しています。 たとえば、 objadd3 1.0, 1.5, 2.0 のように実数値による指定が可能です。また、 objadd3 1, 1, 2 のように整数値でも受け付けます。 大量の画像や、3Dデータを使用したソフトで問題となるのは描画にかかる負荷、 つまり絵を描くのに時間がかかってしまう点です。 HGIMG3では、単位時間あたりの移動量から動きの計算を行なうタイムスケール モードを搭載することで、高速なマシンではより高いフレームレートで 動作させることで、マシンスペックによる画面上の動作速度の違いを吸収 させることができます。 ・初期化と描画の方法 HGIMG3では、初期化を以下の手順に従って行なって下さい。 ;------------------------------------------------------------------ screen 0,320,240,0 hgini ; hgimgの初期化 ;------------------------------------------------------------------ hgini命令は、プラグインの全初期化を行なう命令です。 hgini命令が実行された時点でアクティブなウインドゥのサイズと、 色モードをもとに初期化を行ないます。 上の例では、320x240ドット、フルカラーモードで描画を行なうことに なります。 初期化を連続して行なうことはできません。 再初期化する場合は、hgbye命令ですべての終了処理を行なった後に実行 するようにしてください。 また、hgbye命令ですべての終了処理が行なわれます。 hgbye命令自体は、自動クリーンアップ命令でHSPの終了時に自動的に 呼び出されるため、通常は記述する必要はありません。 初期化が終わったら、いつでも登録されているオブジェクトを表示可能な 状態になります。 HGIMG3では、描画を以下のように行ないます。 ;------------------------------------------------------------------ *main ; 描画メイン ; hgdraw ; 描画処理 hgsync 10 ; 時間待ち goto *main ;------------------------------------------------------------------ hgdraw命令で、HGIMG3が受け持つすべての描画を行ないます。 この時、描画先のウインドゥをgsel命令などでアクティブにしておくのを 忘れないでください。 その後、hgsync命令で時間待ち(ウェイト)をします。「hgsync 10」の場合は、 10msだけ待ち時間を入れます。 この2つの命令を必ず入れれば全描画と待ち時間の処理は完結します。 HSPのwaitやawait命令を入れる必要はありません。 ・モデル設定命令 モデルの登録をするためには、種類に応じて命令が異なります。 主な登録の方法は以下の通りです。 ・2Dスプライト setuv tx0,ty0,tx1,ty1 ;UV座標の設定 addspr val, mode ;2Dスプライトモデルを作成 テクスチャ座標の左上(tx0,ty0)と右下(tx1,ty1)の大きさに 応じたサイズの2Dスプライトモデルを作成します。 回転、拡大縮小、合成などを行なうことができます。 変数valにモデルIDが代入されます。 これに続いてtexload命令で読み込まれたテクスチャ(画像)を使用します。 addspr命令のmode値が0の場合は透明色抜き処理を行ないません。 mode値が1の場合は指定された色を透明色として扱って描画します。 ・2DBGマップ setbg sx,sy,cx,cy ;マップサイズ、チップサイズ設定 addbg val, winsizex, winsizey,sw ;2DBGマップモデルを作成 マップのサイズが(sx,sy)、チップサイズを(cx,cy)とするBGマップ表示 モデルを作成します。 変数valにモデルIDが代入されます。 これに続いてtexload命令で読み込まれたテクスチャ(画像)を使用します。 ・単色3Dスプライト(板) setsizef sx,sy ;板の大きさ設定 setcolor 0,255,0 ;色の設定 addplate val, mode ;板(PLATE)モデルを作成 縦横サイズが(sx,sy)の四角ポリゴン(板)のモデルを作成します。 色は、緑(R=0,G=255,B=0)となります。 変数valにモデルIDが代入されます。 mode値が2の場合は光源計算を行ないます。 ・3Dスプライト(板) setsizef sx,sy ;板の大きさ設定 setuv tx0,ty0,tx1,ty1 ;UV座標の設定 addplate val, mode ;板(PLATE)モデルを作成 テクスチャ座標が左上(tx0,ty0)と右下(tx1,ty1)のもので、 縦横サイズが(sx,sy)の四角ポリゴン(板)のモデルを作成します。 変数valにモデルIDが代入されます。 これに続いてtexload命令で読み込まれたテクスチャ(画像)を使用します。 addplate命令のmode値が0の場合は透明色抜き処理を行ないません。 mode値が1の場合は指定された色を透明色として扱って描画します。 ・単色の箱(立方体) setsizef sx,sy ;箱の大きさ設定 setcolor 255,0,0 ;色の設定 addbox val,2 ;箱(BOX)モデルを作成 サイズが(sx,sy)の箱(立方体)モデルを作成します。 色は赤(R=255,G=0,B=0)で、光源計算を行ないます。 変数valにモデルIDが代入されます。 ・テクスチャ使用の箱(立方体) setsizef sx,sy ;箱の大きさ設定 setuv tx0,ty0,tx1,ty1 ;UV座標の設定 addbox val ;箱(BOX)モデルを作成 サイズが(sx,sy)の箱(立方体)モデルを作成します。 テクスチャ座標は左上(tx0,ty0)と右下(tx1,ty1)が1つの面となり、 さらに(tx0,(ty1-ty0)+1)と、(tx0,((ty1-ty0)+1)*2)からの3つの面を テクスチャとして持つ箱モデルが作られます。 変数valにモデルIDが代入されます。 これに続いてtexload命令で読み込まれたテクスチャ(画像)を使用します。 ・3Dモデル addxfile model,"filename" ;モデルファイル読み込み "filename"で指定されたポリゴンモデルファイル(拡張子x)を読み込み モデルとして登録します。また、テクスチャも同時に読み込まれます。 終了すると指定された変数名にモデルIDが代入されます。 モデル追加のための命令は、これ以外にもadddxf等の補助命令が存在します。 詳しくはリファレンスを参照してください。 ・オブジェクト設定命令 オブジェクトを登録する場合は、 regobj 変数名, モデルID, モード の命令を使用します。 regobjでは、すでに登録されているモデルIDと、モードを指定する必要が あります。 モードは以下の中から選択します。 ラベル | 内容 -------------------------------------------------------------- OBJ_HIDE 非表示(画面から消す) OBJ_TREE 木属性(Y軸のみ正面を向く) OBJ_XFRONT 正面属性(常に画面に正面を向く) OBJ_UVANIM UVアニメーションを行なう OBJ_UVANIM_1SHOT UVアニメーション表示後に消滅する OBJ_MOVE XYZ移動量を有効にする OBJ_FLIP ボーダー領域で反転する OBJ_BORDER ボーダー領域を有効にする OBJ_2D 2D表示オブジェクトとして扱う OBJ_TIMER 消滅タイマーを有効にする OBJ_WIPEBOM ボーダー領域で爆発オブジェクトに変わる OBJ_NOSORT Zソートを無効にする OBJ_GRAVITY 重力制御を有効にする OBJ_SKY 常に一番奥に描かれる OBJ_GROUND 地面オブジェクトとして描かれる OBJ_LOOKAT 特定オブジェクトの方向を常に向く 複数の項目を同時に選択する場合は、「OBJ_SKY|OBJ_MOVE」のように 「|」で区切って指定してください。何も指定しない場合は、0にするか 省略して構いません。 オブジェクトのモードは、あらかじめデフォルトのモードがモデルの種類に応じて 設定されているので、通常は特に設定する必要はありません。 また、setmode命令でモデルにモードを指定した場合は、そのモードが オブジェクトにも継承されます。 正常にオブジェクトが登録されると変数にオブジェクトIDが 返されます。オブジェクトIDは、その後にオブジェクトのパラメータや 設定を変更する場合に必要になる番号です。 オブジェクトの設定を後から変更する命令は以下の通りです。 setobjm ObjID, ModelID オブジェクトのモデル設定 setobjmode id,mode,sw オブジェクトのモード設定 setcoli id,mygroup,enegroup オブジェクトのコリジョン設定 オブジェクトの設定は、MOC設定命令でも行なうことができます。 詳しくは、MOC設定命令についてを参照してください。 以下は2Dスプライトのモデルを登録して、さらにそれをオブジェクトとして 登録するスクリプトの例です。 例: ; スプライトの登録 ; setuv 0,0,79,79 ; UV座標指定 addspr pchr ; モデルの登録 texload "rock2.bmp" ; テクスチャの登録 regobj mychr,pchr,OBJ_2D ; オブジェクト登録 ・オブジェクトパラメーター設定命令について HGIMG3では、「オブジェクト」1つ1つが独立したパラメーターを持っており、 その内容に従って表示および動作が決定されます。 これら、「オブジェクトパラメーター」は表示位置、回転角度、サイズ、移動量 など複数の情報を持っており、すべて浮動小数で記憶しています。 すべてのパラメータは、任意の値に変更、取得が可能なほか、イベントリストを 使用することで、指定フレーム後に任意の値になるように値を増減させるなど 様々なコントロールが可能になっています。 HGIMG3の「オブジェクト」は、以下のようなパラメータを持っています。 グループ offset0 offset1 offset2 offset3 -------------------------------------------------------------- pos [X座標] [Y座標] [Z座標] [未使用] ang [X回転角] [Y回転角] [Z回転角] [未使用] scale [X倍率] [Y倍率] [Z倍率] [未使用] dir [X移動量] [Y移動量] [Z移動量] [未使用] efx [α合成値] [未使用] [未使用] [未使用] work [workX] [workY] [workZ] [未使用] パラメーターは、4つの値を1つのグループとして扱っています。 たとえば、「グループpos」は、表示するX,Y,Z座標を保存しています。 この「グループpos」を変更すれば、画面上の表示位置も変更されます。 実際にパラメーターを設定する場合には、以下の命令を使います。 setpos id,x,y,z setang id,x,y,z setscale id,x,y,z setdir id,x,y,z setefx id,x,y,z setwork id,x,y,z それぞれのグループに対して、(x,y,z)の3つのパラメーターを設定 することができます。idには、個々のオブジェクトを識別するための オブジェクトIDを指定します。オブジェクトIDは、regobj命令によって オブジェクトが登録された際に返される番号です。 x,y,zのパラメーターには、整数かまたは実数を指定することができます。 値の指定を省略した場合には、値0として処理されます。 オブジェクトの各グループは、以下のような意味を持っています。 グループ pos: (初期値:0,0,0) オブジェクトのX,Y,Z座標を指定します。 2Dオブジェクトの場合は、(X,Y)が座標に使用され、 Zは優先度(0.0〜1.0)として扱われます。 また、2Dオブジェクトの座標は画面の中心が(0,0)となります。 グループ ang: (初期値:0,0,0) オブジェクトの向いているX,Y,Z角度を指定します。 角度の単位はラジアン(1周でπ*2)になります。 オブジェクトの回転は、常にZ->Y->Xの順番に行なわれます。 グループ scale: (初期値:1,1,1) オブジェクトの倍率(X,Y,Z軸)を指定します。 グループ dir: (初期値:0,0,0) オブジェクトのX,Y,Z方向に対する移動量を指定します。 OBJ_MOVEのモードが設定されている時に参照されます。 グループ efx: (初期値:256,0,0,0) オブジェクトの特殊効果を設定します。 4つの値を格納していますが、 オフセット0 : [α合成値] オフセット1 : [EFX1] オフセット2 : [EFX2] オフセット3 : [EFX3] となっています。 (*現バージョンではグループEはα合成値のみサポートされています) α合成値は、背景とオブジェクトを合成する度合いを指定します。 α合成値 = 0〜255 : 背景とα合成(blend)を行なう α合成値 = 256〜511 : 合成を行なわない(通常時) α合成値 = 512〜767 : 背景と色加算(modulate)を行なう α合成値 = 768〜1023 : 背景と色減算(substract)を行なう 合成を行なう場合には、α合成値の値が大きいほど、高い%で合成が 行なわれます。α合成は、シェーディング、2D、3Dの区別なく処理 されますが、DirectX、フルカラーモード時のみサポートされます。 グループ work: (初期値:0,0,0,0) イベントリストで使用される汎用的なパラメーターです。 「オブジェクト」の中には、特殊な動作を行なうものがあり、これらは パラメーターを別な用途として使用しているものがあります。 「カメラオブジェクト」 画面に表示するための視点を示すものがカメラオブジェクトになります。 HGOBJ_CAMERAが、カメラオブジェクトのオブジェクトIDとなります。 例: ; カメラの座標を(0,0,20)に設定する setpos HGOBJ_CAMERA,0,0,20 カメラオブジェクトの時のみ、グループのパラメーターは以下の意味を 持つことになります。 グループ offset0 offset1 offset2 offset3 -------------------------------------------------------------- pos [X座標] [Y座標] [Z座標] [未使用] ang [X回転角] [Y回転角] [Z回転角] [未使用] scale [X倍率] [Y倍率] [Z倍率] [未使用] dir [X注視座標] [Y注視座標] [Z注視座標] [未使用] efx [FOV] [NearZ値] [FarZ値] [未使用] dirは注視点(カメラが注目する座標)を示します。 (ただし、cammode命令で注視点モード設定中のみ参照されます。) efxの各パラメーターは、カメラの詳細な設定を示します。 FOVは、画角(パースのかかりぐあいを調整する値)でラジアン単位の 指定を行ないます。デフォルトで、45度(π/4)が指定されています。 NearZとFarZは、表示を行なうZ軸の範囲(Zクリッピング範囲)を指定 を行ないます。NearZは手前(どこまで近い物体を描画するか)、 FarZは奥(どこまで遠い物体を描画するか)を示します。 デフォルトで、NearZは0.5、FarZは768.0が設定されています。 カメラのefxグループパラメーターは、HGIMG2.61のものと互換性が ありませんので注意してください。 「ライトオブジェクト」 3D空間上のモデルに光をあてるライトを示すものとして、ライトオブジェクト が存在しています。 HGOBJ_LIGHTが、標準のライトオブジェクトのオブジェクトIDとなります。 ライトオブジェクトは、reglight命令によって任意に追加することが可能です。 例: ; ライトの向きを(0,0.4,-0.1)に設定する setang HGOBJ_LIGHT,0,0.4,-0.1 ライトオブジェクトの時のみ、グループのパラメーターは以下の意味を 持つことになります。 グループ offset0 offset1 offset2 offset3 -------------------------------------------------------------- pos [X座標] [Y座標] [Z座標] [未使用] ang [X回転角] [Y回転角] [Z回転角] [未使用] scale [カラーR] [カラーG] [カラーB] [未使用] dir [ambientR] [ambientG] [ambientB] [未使用] efx [range] [falloff] [theta] [phi] グループscaleがライトの色、グループdirがアンビエント色のパラメーター として使用されます。それぞれのパラメーターは、R,G,Bの要素を0.0〜255.0で 表わした値となります。 デフォルトで、ライト色は(255,255,255)、アンビエント色は(0,0,0)が 設定されています。光源の計算は、基本的にRGB輝度が独立で行なわれ、 輝度 = 光の強さ * ライト色 * マテリアル色 + アンビエント色 という式が使用されます。輝度が255を越えた場合は、255になります。 グループefxは、ポイントライト、スポットライトのための拡張設定で、 現バージョンでは無視されます。 (ライトのdir,scaleグループパラメーターは、HGIMG2.61のものと互換性が ありませんので注意してください。) 以下は、オブジェクトパラメーターの値を取得するための命令です。 getpos id,x,y,z getang id,x,y,z getscale id,x,y,z getdir id,x,y,z getefx id,x,y,z getwork id,x,y,z これらの命令では、x,y,zに読み出し先の変数名を指定します。 例: ; カメラの座標を変数a,b,cに読み出す getpos HGOBJ_CAMERA,a,b,c 上の例では、変数aにX座標が、変数bにY座標が、変数cにZ座標が それぞれ実数型で代入されます。 整数値でパラメーターを取得する場合は、以下の命令を使用します。 getposi id,x,y,z getangi id,x,y,z getscalei id,x,y,z getdiri id,x,y,z getefxi id,x,y,z getworki id,x,y,z 最後に「i」が付加された命令は、整数値で変数に代入されます。 座標を整数のみで扱う場合や、高速化を行ないたい場合に使用する ことができます。 また、パラメーターに対して直接加算を行なうための命令が用意 されています。 addpos id,x,y,z addang id,x,y,z addscale id,x,y,z adddir id,x,y,z addefx id,x,y,z addwork id,x,y,z それぞれのグループに対して、(x,y,z)の3つのパラメーターを加算 します。 例: ; オブジェクトID5の物体をX+10,Y-20移動させます addpos 5, 10, -20, 0 これらの命令は、パラメーターの値を直接加算、減算するような 場合に便利です。 パラメーターの中で、「グループang」は角度を格納するためのもので、 通常ラジアン単位によって指定します。 しかし、ラジアンは直感的に利用することが難しい場合があるため、 「グループang」のみ整数値で操作するための命令が用意されています。 setangr id,x,y,z addangr id,x,y,z getangr id,x,y,z これらの命令では、回転情報を0〜255までを1周として扱います。 つまり、0が0度、64が90度、128が180度…となります。 これは、整数を使った高速で手軽な角度の設定方法です。 256段階の角度よりも細かい単位での指定を行なう場合には、 通常のラジアン単位をお使い下さい。 オブジェクトパラメーターを設定する方法として、もう1つ別な やり方が用意されています。これは、「MOC設定命令」と呼ばれる 命令セットを使用する方法です。「MOC設定命令」は、HGIMG2で使用 されていた設定方法で、より細かくパラメーターの取得や演算を 行なうことが可能です。 「MOC設定命令」についての詳細は、「MOC設定命令について」の項を 参照してください。 ・直接描画命令について HGIMG3では、オブジェクトを登録してまとめて描画を行なう従来までの 方法とともに、直接命令実行時に描画を発行させるための直接描画命令が 用意されています。 直接描画命令は、登録されているオブジェクトやモデルとか関係なく 画面上に任意の矩形やテクスチャを描画することができます。 直接描画命令は、必ずhgdrawとhgsyncの間に描画を行なう必要がありますので 注意してください。 例: ; 描画メイン ; *main hgdraw ; 描画処理 color 255,0,0 hgrect 320,240,0,100,100 hgsync 10 ; 時間待ち goto *main 以下が直接描画命令になっています。 hgrect、hgrotate命令は、それぞれ標準命令のgrect、grotate命令と同じ動作を HGIMG3の画面に対して行なう命令セットになっていますので、標準命令から移植 するような場面にも有効です。 hgrect p1,p2,p3,p4,p5,p6 矩形の直接描画 p1=0〜(0) : 矩形の中心X座標 p2=0〜(0) : 矩形の中心Y座標 p3=0〜(0.0): 回転角度(単位はラジアン) p4=0〜(?) : Xサイズ p5=0〜(?) : Yサイズ (p1,p2)で指定した座標を中心として、(p4,p5)で指定したサイズの矩形(長方形)を 現在設定されている色で描画します。 p3で回転角度を実数で指定することができます。 角度の単位は、ラジアン(0から始まって、2πで一周)となります。 grect命令は、gmodeで設定されたコピーモードの指定が反映されます。 gmodeが0,1の場合は、通常の塗りつぶし。 gmodeが3の場合は、指定されたレートで半透明になります。 gmodeが5,6の場合は、それぞれ色加算、色減算処理となります。 また、(p4,p5)のサイズ指定を省略した場合には、gmode命令で設定されている コピーサイズが使用されます。 hgrotate p1,p2,p3,p4,p5,p6 矩形画像の直接描画 p1=0〜(0) : テクスチャID p2=0〜(0) : コピー元の左上X座標 p3=0〜(0) : コピー元の左上Y座標 p4=0〜(0.0): 回転角度(単位はラジアン) p5=0〜(?) : Xサイズ p6=0〜(?) : Yサイズ hgrotate命令は、指定された矩形範囲に回転を含めたテクスチャ描画処理を 行ないます。p1で、コピー元のテクスチャIDを指定、(p2,p3)でコピーされる 元の画像にあたる座標を指定します。(gcopy命令と同様です) コピー先は、現在の描画先に指定されているウインドゥIDで、 pos命令で設定された場所を中心とした座標にコピーを行ないます。 その際に、p3で回転角度を実数で指定することができます。 角度の単位は、ラジアン(0から始まって、2πで一周)となります。 (p5,p6)で、コピーされた後のX,Yサイズを指定します。 また、コピー元のX,Yサイズはgmode命令で設定されたデフォルトの コピーサイズが使用されます。 つまり、gmode命令で指定されたサイズよりも大きなサイズを(p5,p6) で指定した場合には、拡大されることになります。 (p5,p6)を省略した場合には、コピー元と同じサイズ、つまり等倍で コピーが行なわれます。 hgrotate命令は、gmodeで設定されたコピーモードの指定が反映されます。 (詳しくはgmode命令のリファレンスを参照してください) ・イベントリストについて イベントリストは、決まった流れの処理(イベント)をあらかじめ用意 しておいて、それを個々のオブジェクトに対して適用させるための 機能です。 イベントリストを使用するためには、大きく分けて 「イベントリストの作成」と「イベントリストの適用」 という2つの段階があります。 まず、「イベントリストの作成」であらかじめ特定の処理を決めて おきます。たとえば、「○○の座標に移動する」とか「X座標を1足す」 など各種パラメーターに対して細かい動作を決めることができます。 こうした処理をイベントと呼び、それを複数まとめたものをイベントリスト と呼ぶようにしています。 イベントリストを作成するには、以下のように記述します。 例: newevent ev1 ; 新しいイベントIDを取得 event_setpos ev1, 10,20,30 上の例では、座標パラメーターとして(10,20,30)を設定するための イベントを作成して、そのIDを変数ev1に代入しています。 新しくイベントを作成する場合には、必ずnewevent命令でイベントIDを 取得しておきます。次に、event_setpos等のイベント登録用の命令で、 指定されたイベントIDにイベントを追加していきます。 一度取得されたイベントIDは、シーンのリセット(hgreset命令)が 行なわれるか、またはdelevent命令によってイベントリストが削除 されるまでは保持されます。 こうしてできたイベントは、好きな時にオブジェクトに対して適用 させることができます。 例: newevent ev1 ; 新しいイベントIDを取得 event_setpos ev1, 10,20,30 ; objidのオブジェクトにev1のイベントを適用 setevent objid, ev1 この例では、objidが示すオブジェクトに対してev1のイベントリスト、 つまり(10,20,30)を座標として設定するという処理を適用します。 このように、イベントではパラメーターに対しての動作をまとめて 登録することができ、それを特定のオブジェクトに反映させる働きを 持ちます。 event_setposでは、座標設定のイベントを登録しますが、それ以外の パラメーターを設定するための命令も用意されています。 event_setpos eventid, x, y, z event_setang eventid, x, y, z event_setangr eventid, x, y, z event_setscale eventid, x, y, z event_setdir eventid, x, y, z event_setefx eventid, x, y, z event_setwork eventid, x, y, z それぞれのグループに設定するX,Y,Z値を実数または整数値で指定 することができます。 また、 event_setpos eventid, x1, y1, z1, x2, y2, z2 のように、X,Y,Zの範囲を指定することにより、乱数で指定された 範囲内の値を自動的に生成させることもできます。 例: newevent ev1 ; 新しいイベントIDを取得 event_setpos ev1, 10,20,30,30,20,50 上の例では、XYZ=(10〜30,20,30〜50)までの値が設定されます。 設定だけでなく、パラメーター値に対して加算を行なうイベントも 登録することができます。 event_addpos eventid, x, y, z event_addang eventid, x, y, z event_addangr eventid, x, y, z event_addscale eventid, x, y, z event_adddir eventid, x, y, z event_addefx eventid, x, y, z event_addwork eventid, x, y, z これらの命令は、特定グループのパラメーターに対して(X,Y,Z)の 値を加算します。(マイナス値を指定することで減算になります。) イベントでは、パラメーター設定の他にも時間経過に応じた処理を 追加することができます。 例: newevent ev1 ; 新しいイベントIDを取得 event_pos ev1, 20, 0,10,20 上の例では、20フレーム後に(0,10,20)の座標に移動するイベントが 登録されます。このイベントが適用されたオブジェクトは、自動的に 20フレームの間指定された座標まで移動を行ないます。 複数のevent_posイベントを登録することにより、移動の経路を 細かく指定しておくことが可能です。 例: newevent ev1 ; 新しいイベントIDを取得 event_pos ev1, 20, 10,0,0 event_pos ev1, 20, 10,10,0 event_pos ev1, 20, 0,10,0 event_pos ev1, 20, 0,0,0 上の例では、(10,0,0)→(10,10,0)→(0,10,0)→(0,0,0)の順番に 移動を行ないます。 単純な待ち時間を登録するためのevent_wait命令も用意されています。 event_waitイベントでは、指定されたフレーム数が経過するまで次の イベント処理を待ちます。 パラメーター加算とevent_waitイベントを組み合わせることで、 相対的なパラメーター変化をさせることができます。 例: newevent ev1 ; 新しいイベントIDを取得 event_addpos ev1, 0,1,0 event_wait ev1, 10 event_addpos ev1, -1,0,0 event_wait ev1, 20 上の例では、最初の10フレームはYに1を加算し続け、その後 20フレームは、X座標を-1し続けることになります。 さらに、イベントを繰り返し処理させるためにevent_jump命令を 使用することができます。 例: newevent ev1 ; 新しいイベントIDを取得 event_addpos ev1, 0,1,0 event_wait ev1, 20 event_addpos ev1, 0,-1,0 event_wait ev1, 20 event_jump ev1, 0, 100 上の例では、20フレームごとにY座標を1だけ加算・減算する という処理を繰り返し行なうことになります。 event_jumpは、登録されているイベントリストの中で指定された 場所に処理を戻します。これにより、永遠に特定の処理をし続ける イベントリストを作成することが可能になります。 setevent命令によって設定されるイベントは、オブジェクト1つ あたり4つまで同時に適用することが可能です。 これにより、ゲーム等で起きる定型の処理(爆発やミサイルの軌道など)を イベントリストとしてスマートに分離して管理することができます。 イベントリストは、非常に応用範囲が広い反面、命令の種類も多く 最初は難しく感じるかもしれませんが、1つ1つ使いながら覚えて いけばスクリプトで行なう手間を大幅に削減することができるはずです。 ここで挙げた命令以外にも、モードやフラグなどのパラメーターを 操作するためのイベントなど様々な応用が可能です。 それぞれの命令の詳細は、ヘルプを参照してください。 ・MOC設定命令について MOCとは、MOC(Motion Object Controller)のことで、複数のグループに 分かれたベクトルパラメーター(x,y,zの値)をまとめて管理する仕組みを 指しています。 MOC設定命令は、HGIMG2と互換のある方法でオブジェクトパラメーターの 操作を行なうための命令セットです。 通常の利用や、新しくHGIMG3を使い始めるユーザーは、特に覚えなくても オブジェクトパラメーターの操作は可能です。 HGIMG3の「オブジェクト」は、以下のようなパラメータを持っています。 (「オブジェクトパラメーター設定命令について」のリストと同一です) 「オブジェクト パラメータ」 グループ offset0 offset1 offset2 offset3 -------------------------------------------------------------- A [X座標] [Y座標] [Z座標] [未使用] B [X回転角] [Y回転角] [Z回転角] [未使用] C [X倍率] [Y倍率] [Z倍率] [未使用] D [X移動量] [Y移動量] [Z移動量] [未使用] E [α合成値] [未使用] [未使用] [未使用] F [ワーク値X] [ワーク値X] [ワーク値X] [未使用] グループA〜Fまでにそれぞれoffset0〜3までのパラメータが存在しています。 それらのパラメータを更新することで、画面に表示されているオブジェクトにも 反映されます。 どのグループを書き換え対象にするかを指定する命令として、 selpos id 移動座標(グループA)をMOC情報に設定 selang id 回転角度(グループB)をMOC情報に設定 selscale id スケール(グループC)をMOC情報に設定 seldir id 移動量(グループD)をMOC情報に設定 selefx id 特殊効果(グループE)をMOC情報に設定 selwork id ワーク値(グループF)をMOC情報に設定 があります。idは、オブジェクトID(番号)になります。 これらのパラメータを更新するためにMOC設定命令群が用意されています。 設定するには、まず「どのオブジェクトのどのグループを書き換え対象に するか」を指定します。次に、offset0〜3のどの部分を変更するかを指定 する2段階が必要になります。 カメラオブジェクトのグループを指定する場合には、 selcpos カメラ座標(グループA)をMOC情報に設定 selcang カメラ角度(グループB)をMOC情報に設定 selcint カメラ注視点(グループC)をMOC情報に設定 を使用します。 ライト(光源)オブジェクトのグループを指定する場合には、 sellpos id 光源座標(グループA)をMOC情報に設定 sellang id 光源角度(グループB)をMOC情報に設定 sellcolor id 光源色(グループC)をMOC情報に設定 を使用します。 また、直接グループを値で設定するための命令として、 selmoc id, group オブジェクトのMOCグループ指定 selcam group カメラのMOCグループ指定 sellight id,ofs 光源をMOC情報に設定 があります。groupは、012…の順番にABC…が割り当てられます。 グループが指定されたら、次は実際の値を設定します。これには、多様な 設定方法がありますが、最も単純な方法は、 objset1 ofs,x MOC情報を設定 の命令で、ofsにオフセット番号、xに設定する値を指定することです。 これで目的のパラメータを任意の値に設定することができます。 xには、実数または整数値を指定することができます。 (HGIMG互換のためのobjsetf1も用意されています。) さらに、2つのパラメータを同時に設定するための命令、 objset2 ofs,x,y MOC情報を設定 も用意されています。これは、2DスプライトのX,Y座標など2つのパラメータを セットで指定する場合に都合のよい命令です。この場合は、指定したオフセット とその次のオフセットが設定の対象になります。 (HGIMG互換のためのobjsetf2も用意されています。) そして3つのパラメータを同時に設定するための命令、 objset3 x,y,z MOC情報を設定 も同様に用意されています。ここでは、必ずオフセット0,1,2が設定の対象に なります。3D座標などのX,Y,Z値を同時に指定する場合に都合のよい命令です。 (HGIMG互換のためのobjsetf3も用意されています。) これらに加えて、 objadd1 ofs,x MOC情報を加算 objaddf1 ofs,x MOC情報を加算 objadd2 ofs,x,y MOC情報を加算 objaddf2 ofs,x,y MOC情報を加算 objadd3 x,y,z MOC情報を加算 objaddf3 x,y,z MOC情報を加算 は、対象となるパラメータに記憶されていた値に対して、指定値を加算する 命令です。加算値にマイナスの値を使うことで、減算をすることも可能です。 MOC情報を設定するものの中で、パラメーターとして角度を指定する場所で 使用する専用の命令が用意されています。 objset1rのように、最後に「r」がついています。 これは、通常ラジアン単位の角度を指定するべきパラメーターを、整数値で 指定できるようにしたものです。 objset1r ofs,x MOC情報を設定 objset2r ofs,x,y MOC情報を設定 objset3r x,y,z MOC情報を設定 これらの命令は、回転情報を0〜255までを1周とする単位で扱うことができます。 最後にパラメータを変数に取り出したり、逆に変数に後で説明するFV形式 で格納されている値をパラメータに設定するための命令が用意されています。 objgetfv fv MOC情報を取得 objsetfv fv MOC情報を設定 objaddfv fv MOC情報を加算 objmovfv fv,times MOC移動情報を設定 objgetv v MOC情報を整数値で取得 objsetv v MOC情報を整数値で設定 これらの命令を使うことで、多くのパラメータを効率よく管理、変更する ことができるようになっています。 ・浮動小数サポート命令 浮動小数サポート命令は、小数値、ベクトル値などの情報を扱うための 命令群です。ベクトルを変数に格納する方法としてFV値という表現が出て きますが、これは「変数名=1.0」のように1つの値を代入するのではなく 「変数名.0=X:変数名.1=Y:変数名.2=Z」のように実数型の配列変数として 3つの要素(X,Y,Z)を格納しておく形式です。 FV値を使用することで、3次元座標や角度(ベクトル)などの情報を比較的 整理して扱うことができます。FV値を演算する命令では、同時に3つの要素に 対して計算されるため、1つの要素ごとに計算するよりもシンプルで高速に 処理を行なうことができます。 fvseti fv,x,y,z 整数値からベクトル設定 fv = FV値が代入される変数名 (x,y,z) = 整数値 (x,y,z)で指定された整数値をベクトルとしてFV値に代入する。 fvset fv,x,y,z ベクトル設定 fv = FV値が代入される変数名 (x,y,z) = 実数値 (x,y,z)で指定された整数値をベクトルとしてFV値に代入する。 fvadd fv,x,y,z ベクトル加算 fvsub fv,x,y,z ベクトル減算 fvmul fv,x,y,z ベクトル乗算 fvdiv fv,x,y,z ベクトル除算 fv = FV値が代入される変数名 (x,y,z) = 計算値(実数値) fvで指定された変数に格納されているFV値と、指定された 小数値(X,Y,Z)の演算を並列で行ないます。 fvdir fv,x,y,z ベクトル回転 fv = FV値が代入される変数名 (x,y,z) = 回転角度(実数値) fvで指定された変数に格納されているベクトル(FV値)を、 小数値(X,Y,Z)で指定されたX,Y,Z角度に回転させます。 fvmin fv,x,y,z ベクトル最大値 fv = FV値が代入される変数名 (x,y,z) = 比較値(実数値) fvで指定された変数に格納されているFV値と、 小数値(X,Y,Z)を比較して、値の大きいものを代入します。 FV値の各要素を最小値までに切り詰める場合に使用します。 fvmax fv,x,y,z ベクトル最小値 fv = FV値が代入される変数名 (x,y,z) = 比較値(実数値) fvで指定された変数に格納されているFV値と、 小数値(X,Y,Z)を比較して、値の小さいものを代入します。 FV値の各要素を最大値までに切り詰める場合に使用します。 fvouter fv,x,y,z ベクトル外積 fv = FV値が代入される変数名 (x,y,z) = 演算するベクトル値(実数値) fvで指定された変数に格納されているFV値と、 小数値(X,Y,Z)で指定するベクトルの外積を求めて代入します。 fvinner fv,x,y,z ベクトル内積 fv = FV値が代入される変数名 (x,y,z) = 演算するベクトル値(実数値) fvで指定された変数に格納されているFV値と、 小数値(X,Y,Z)で指定するベクトルの内積を求めてfv.0に代入します。 fvface fv,x,y,z 座標から角度を得る fv = FV値が代入される変数名 (x,y,z) = X,Y,Z座標値(実数値) fvで指定された変数に格納されているベクトル(FV値)を基点とする X,Y,Z座標から、指定されたX,Y,Z座標を直線で見るための回転角度を求めて 代入します。 fvunit fv ベクトル正規化 fv = FV値が代入される変数名 fvで指定された変数に格納されているベクトル(FV値)を正規化します。 fsin fval,rot サインを求める fval = float値が代入される変数名 rot = 回転角度(実数) rotで指定された角度のサイン値をfvalで指定した変数に代入します。 角度の単位はラジアンになります。 fcos fval,rot コサインを求める fval = float値が代入される変数名 rot = 回転角度(実数) rotで指定された角度のコサイン値をfvalで指定した変数に代入します。 角度の単位はラジアンになります。 fsqr fval,prm 平方根を求める fval = float値が代入される変数名 prm = 演算に使われる値(実数) prmで指定された値の平方根をfvalで指定した変数に代入します。 froti fval,prm 整数値角度を小数値に変換 fval = float値が代入される変数名 prm = 0〜1023の角度値(整数) prmで指定された整数値(0〜1023)を角度を示すものとして、 fvalに-π〜+πのラジアン角度値に変換して代入します。 fv2str fv ベクトルを文字列に変換 fvで指定された変数に格納されているベクトル(FV値)を文字列に 変換してシステム変数refstrに結果を返します。 str2fv fv,"x,y,z" 文字列をベクトルに変換 "x,y,z"で指定された文字列情報を「,」で区切られたX,Y,Z小数値として 読み出し、fvで指定された変数に格納します。 str2f fval,"val" 文字列を小数値に変換 "val"で指定された文字列情報を小数値として読み出し、 fvalで指定された変数に格納します。 f2str val,fval 小数値を文字列に変換 fvalで指定された小数値を文字列に変換して、valで指定された文字列型の 変数に結果を返します。 f2i v,x,y,z 小数値を整数値に変換 小数値(X,Y,Z)を整数値に変換して、vで指定された数値型の変数に代入 します。結果はそれぞれ「v.0=x:v.1=y:v.2=z」の各要素に格納されます。 ・DirectXについて DirectX使用時の注意点は以下の通りです。 ・DirectX8以上のランタイムがインストールされている必要があります ・DirectX使用時は常にフルカラーモードが選択されます ・テクスチャの縦横サイズは2のn乗(2,4,8,16…)に合わせて読み込まれます 一部のビデオカードでは、テクスチャフォーマットがサポートされていない場合に エラーが出ることがあります。HGIMG3で、サポートしているテクスチャ形式は、 「A8R8G8B8」「X8R8G8B8」「A1R5G5B5」「X1R5G5B5」です。テクスチャは、この中 の最適なフォーマットに変換して使用されます。 将来のバージョンではインデックスカラーのテクスチャもサポートする予定です。 ワンスキンモデルの描画や、トゥーンシェーディングなどの特殊機能は、 バーテックスシェーダーが使用されます。ビデオカードが、ハードウェア処理 によるバーテックスシェーダーに対応している場合は、より高速に処理されます。 ハードウェア処理によるバーテックスシェーダーに対応していない場合でも、 ソフトウェア処理により正常に描画されます。 ・命令リファレンス 各命令の詳細は、HSPヘルプマネージャーのヘルプファイル(*.hs)として 提供されています。 同梱の、「hgimg3.hs」ファイルをHSPがインストールされているディレクトリ にある「hsphelp」フォルダにコピーすることで、ヘルプマネージャー による検索やワンキーヘルプによるリファレンスが参照できます。 ・DirectXフルスクリーンモードについて hgsetreq命令によって、SYSREQ_DXMODEのモードに1を指定することで、 hgini命令で初期化した際にフルスクリーンモードが選択されます。 フルスクリーン時の解像度は、SYSREQ_DXWIDTH、SYSREQ_DXHEIGHTで指定します。 現時点では、フルスクリーンとウインドゥモードの動的な切り替えはサポート していません。 例: ; 初期設定 ; bgscr 0,640,480,0 ; フルスクリーンは必ずbgscrで作成 cls 4 hgsetreq SYSREQ_DXMODE,1 ; フルスクリーンモードを指定 hgsetreq SYSREQ_DXWIDTH,640 ; フルスクリーン解像度X hgsetreq SYSREQ_DXHEIGHT,480 ; フルスクリーン解像度Y hgini ・3Dモデルの形式について HGIMG3では、x形式の3Dモデルを読み込んで使用することができます。 x形式は、DirectXの標準的なファイルフォーマットで、3Dモデル情報、ノード情報、 マテリアルやアニメーションなどの情報が保存されています。 HGIMG3が読み込むx形式は、DirectX8以降のスキンメッシュに対応しています。 ワンスキンモデル及びアニメーションを出力可能な各種ツールで、x形式の出力に 対応したものを別途ご用意下さい。 サンプルとして同梱されている、Monster.xは、Lightwave7.5のDirectX Export プラグインによって出力されたデータです。 ※LWのDirectX Exportで出力する場合は、text形式を選択してください。 ※頂点ごとの色設定には対応していません。 ※複数アニメーションを格納したx形式には対応していません。 ※マトリックスによるキー指定(Matrix Key)はフレーム補間が行なわれません。 HGIMG2でサポートされていた、mx形式の3Dモデルデータは、読み込みのみ サポートされます。ma形式のアニメーションデータ及び、mx形式の階層情報は、 HGIMG3では利用することができませんのでご了承下さい。 ・日本語フォント描画機能について HGIMG3では、フォント描画用のテクスチャを使用して日本語のメッセージを 表示させることが可能です。DirectXの画面にはmes命令を使用することが できず、fprt命令でも英文字のフォントしかサポートされていませんでした。 フォント描画テクスチャを使用することで、テクスチャを通して日本語を 自由に描画することができるようになります。 以下のスクリプトは、実際に日本語フォント描画機能を使用した例です。 例: texmake 256,128 ; フォント描画テクスチャの準備 mest = stat ; テクスチャIDを変数mestに保存 texcls mest,$004000 ; フォント描画テクスチャをクリア font "MS ゴシック",22,1 ; フォントの選択 color 255,255,255 ; 描画色を設定 texmes "日本語メッセージです。",mest,0,0 ;(0,0)にフォントを描画 フォント描画テクスチャは、texmake命令により生成させることが可能です。 texmake命令は、VRAM上に指定されたサイズのテクスチャエリアを確保します。 この時、テクスチャのフォーマットをオプションで指定することができます。 作成モードが0か省略された場合は、16bitテクスチャ(A4R4G4B4)が作成されます。 作成モードが0以外の時は、32bitテクスチャ(A8R8G8B8)となります。 16bitテクスチャの方が速度的にも互換性の上でも有利になりますが、より 高精度なメッセージ描画を行なう場合には、32bitテクスチャを指定してください。 テクスチャへのフォント描画は、texmes命令によって実行されます。 この時、color命令により設定された色と、font命令によって設定された フォントの情報が参照されます。 テクスチャへフォント描画を行なっただけでは、画面上にメッセージは表示 されません。フォント描画テクスチャを何らかのモデルに貼り付けるか、 grotate命令などで直接画面上に表示を行なう必要があります。 テクスチャへの描画と、実際の画面上への描画の2段階があるので、注意が 必要です。テクスチャは、一度描画した内容はそのままなので、毎フレーム ごとに同じ内容をtexmes命令で描画する必要はありません。 ・テクスチャの形式について HGIMG3では、テクスチャ読み込みのために2種類の方法を用意しています。 1つは、HSPのバッファを介してテクスチャを読み込むtexload命令、 もう1つは、DirectXのAPIを利用してテクスチャを読み込むtexload2命令です。 この2種類の命令には、以下のような違いがあります。 ・texload命令  HSPの画面バッファを介してテクスチャを登録する(settex命令が使われる)。  bmp,jpg,gifフォーマットが利用可能。  アルファチャンネルには対応していない。  (A8R8G8B8)または、(A1R5G5B5)フォーマットに自動的に変換される。  テクスチャサイズが不正な場合は、黒ピクセルを自動的に追加して登録する。 ・texload2命令  DirectXのAPIによりテクスチャを登録する。  bmp,jpg,gif,png,dds,tga,tiffフォーマットが利用可能。  アルファチャンネルに対応している。  ピクセルフォーマットは最適なものに自動変換される。  テクスチャサイズが不正な場合は、拡大縮小を行なって登録する。 基本的には、アルファチャンネルを含むテクスチャはtexload2命令で、 テクスチャの拡大縮小を自動で行なわれては困る場合には、texload命令を 利用すると良いでしょう。 x形式のモデルデータで使用されているテクスチャについては、texload2命令 と同等の動作になります。 ・トゥーンシェーディングについて x形式のモデルデータにアニメ調の描画処理(トゥーンシェーディング)を 施すことが可能です。トゥーンシェーディングは、単色のポリゴン部分を 適切な色に置き換え、輪郭を描画することでアニメ調の表現を行なうものです。 テクスチャが貼られている部分は、アニメ調のシェーディングは行なわれない ので注意してください。 最も簡単にモデルにトゥーンシェーディングを適用する場合には、 maketoon命令を使用します。 例: addxfile m_xmodel,"monster.x" maketoon m_xmodel,1 これにより、内部で自動作成されたトゥーンテクスチャ(トゥーン シェーディング用に最適化されたテクスチャ)がモデルに適用されます。 トゥーンテクスチャは、光の強さに対してどのような色で描画を行なうかを マテリアル色ごとに示しているもので、1つのモデルに対して1枚の トゥーンテクスチャが必要になります。 「maketoon m_xmodel,2」のように作成モードに2を設定すると、 「toon.bmp」という名前でトゥーンテクスチャがファイルとして保存されます。 このファイルを自前で加工することで、トゥーンシェーディングの色使いや 影の比率などを自由に変化させることができます。 トゥーンテクスチャは、Y軸は1つのマテリアルにつき8ドット単位で構成 されており、一番上のドットがもとのマテリアル色を示しています。 下4ドット(Y=4〜7)までが、トゥーンシェーディング時に実際に描画される 色の情報になります。この時、光の影響が強いほどX軸が大きくなります。 (X軸は0が最小で127が最大値となります。) 自前で修正したトゥーンテクスチャは、loadtoon命令により適用させる ことができます。 例: addxfile m_xmodel,"monster.x" loadtoon m_xmodel,"t_mons.bmp" トゥーンシェーディング時の細かい設定をsettoonedge命令によって行なう ことができます。settoonedge命令のパラメーターは以下の通りです。 settoonedge トゥーンシェーディング時の設定 settoonedge p1,p2,p3,p4 p1 : モデルID p2(0) : エッジの色(RGBコード) p3(0) : XYオフセット p4(0) : Zオフセット p1で指定したモデルのトゥーンシェーディング時の設定を行ないます。 p2で、エッジの色コード(RRGGBB)を指定します。 p3,p4は実数値によりエッジのオフセットを指定することができます。 エッジのオフセットを変更することにより、輪郭線の太さを調整する ことができます。 ・複数アニメーションの切り替えについて x形式のモデルデータに対して複数のアニメーションデータを切り替えて 再生することが可能です。 まず最初に、モデル全体と最初のアニメーションを含んだデータをaddxfile命令に より読み込み、さらに追加でアニメーションだけを登録する場合にaddxanim命令を 必要な数だけ使用してください。 複数のアニメーションデータを読み込む場合は、必ずモデルやボーンの構成が同一 のものから出力されている必要があります。 以下は、「wait.x」「walk.x」「run.x」という3つのファイルを読み込んでいる サンプルです。 例: addxfile m_xmodel,"wait.x" ; アニメーションインデックス0 addxanim m_xmodel,"walk.x" ; アニメーションインデックス1 addxanim m_xmodel,"run.x" ; アニメーションインデックス2 複数のアニメーションを読み込んだ場合は、アニメーションインデックス値が 0から始まり1,2,3…という順に割り振られていきます。 アニメーションインデックス値は、objact命令でアニメーションを実際に 切り替える時に、指定することになります。 objact命令のパラメーターは以下のようになっています。 objact ObjID,Anim,mode 指定アニメーションを開始 ObjID : オブジェクトID Anim : アニメーションインデックス値 mode(0) : 設定モード(0=即時/1=終了時) 先のサンプルの場合は、 例: objact obj,0 ; 「wait.x」を再生 objact obj,1 ; 「walk.x」を再生 objact obj,2 ; 「run.x」を再生 というパラメーターになります。 objact命令によるアニメーション切り替えでは、設定モードを選択する ことができます。 objact obj,0 ; 「wait.x」を再生 の場合は、命令が実行された時点で即時に切り替えを行ないます。 設定モード0でアニメーションを再生した場合は、再生スピードはデフォルト値に 戻され、リピート再生が行なわれる設定になります。 objact obj,0,1 ; 「wait.x」を再生 設定モードに1を指定した場合は、現在再生されているアニメーションが 終了してから、設定されたアニメーションに切り替わります。 アニメーションの再生速度は、objspeed命令によって個別に変更する ことが可能です。また、getanim命令により現在再生されているアニメーション に関する情報を取得することができます。 詳しくは、objspeed,getanim命令のヘルプを参照してください。 ・登録の限界数について 登録するオブジェクト数や、モデル数が足りない場合は、別途 hgsetreq命令により最大数を設定する必要があります。 以下の例は、オブジェクト最大数を1024に設定します。 hgsetreq SYSREQ_MAXOBJ,1024 ; オブジェクト最大数を拡張する hgsetreqで設定できる主な項目は以下の通りです。 マクロ名 内容(デフォルト値) ----------------------------------------------------- SYSREQ_MAXMODEL モデル最大数(4096) SYSREQ_MAXOBJ オブジェクト最大数(512) SYSREQ_MAXTEX テクスチャ最大数(512) SYSREQ_DXMODE フルスクリーンモードスイッチ(0) SYSREQ_DXHWND ウィンドウハンドル(参照のみ) SYSREQ_DXWIDTH フルスクリーンモード時の横サイズ(640) SYSREQ_DXHEIGHT フルスクリーンモード時の縦サイズ(480) SYSREQ_COLORKEY テクスチャ登録時の透明色コード(0) SYSREQ_MAXEVENT イベント最大数(512) HGIMG2.61までに存在したパケットサイズは廃止されています。 ・DirectXパラメーターの参照について hggetreq命令により、いくつかのDirectXに関するパラメーターを 取得することが可能です。 マクロ名 内容(デフォルト値) ----------------------------------------------------- SYSREQ_RESULT エラー発生時の原因コード(参照のみ) SYSREQ_RESVMODE ステータスコード(参照のみ) SYSREQ_PTRD3D DIRECT3D8のCOMポインタ(参照のみ) SYSREQ_PTRD3DDEV DIRECT3DDEVICE8のCOMポインタ(参照のみ) SYSREQ_RESULT エラー発生時の原因コードが格納されます。 hgini命令で初期化した場合に、エラーとなった場合に 参照することで、エラーを特定できる場合があります。 1 : DIRECT3D8の取得に失敗した 2 : GetAdapterDisplayModeに失敗した 3 : DIRECT3DDEVICE8の取得に失敗した SYSREQ_RESVMODE 初期化後にステータスコードが格納されます。 bit0-7は、D3DFORMAT値(DirectX SDKを参照)を示しています。 初期化された画面のピクセルフォーマットを知ることができます。 bit12が1($1000)だった場合は、DirectXがエミュレーション モード(D3DDEVTYPE_REF)で動作していることを示しています。 SYSREQ_PTRD3D SYSREQ_PTRD3DDEV HGIMG3内部で使用しているDirectXのCOMポインタが格納されます。 それぞれ、DIRECT3D8と、DIRECT3DDEVICE8のCOMポインタを 示しています。HSP3のCOM呼び出し機能と組み合わせて 使用することで、DirectX APIを直接利用することが可能です。 ・HGIMG3対応ツールについて HGIMG3に対応した3Dツールとして以下のものを推奨しています。 これ以外にも、x形式、mx形式を扱うツールを利用することが可能です。 [3DACE の部屋] http://hp.vector.co.jp/authors/VA017881/ 直感的に3Dのモデリングを行うことのできるフリーソフト3DACEが公開されて います。MX形式、X形式での出力に対応しています。 [おちっこLAB] http://www5d.biglobe.ne.jp/~ochikko/ ボーンによるモーションを付けるためのツール、RokDeBone2が公開されています。 Metasequoiaと六角大王のデータを利用することができ、IKにも対応しています。 フリーでワンスキンモーションの作成が可能になります。 データは、X形式(DirectX)で出力することが可能です。 [Cyberdelia.net] http://www.cyberdelia.net/ 高機能モーション編集ソフトCyberdeliaを公開しています。 MX形式での入出力、アニメーションをMA、X形式で出力することが可能です。 [Mizno Lab.] http://www21.ocn.ne.jp/~mizno/ Metasequoiaは、O.Miznoさんが作られた3Dモデリングツールです。 フリー版のMetasequoiaLEは、オンラインですぐに入手することができ、 3Dデータの作成を行ないx形式で出力することが可能です。 Metasequoia自身や、プラグインでかなり多種のフォーマット読み込みに 対応しているため既存の3Dファイルからの変換の可能性がぐんと広がります。 [game space] http://www.caligari.com/gamespace/ ゲーム用のポリゴンモデル、アニメーションに特化したツールです。 直感的なインターフェースで作業でき、いくつかの制限があるものの、 フリー版も用意されています。x形式での出力に対応しています。 また、以下のサイトでMXフォーマットを扱うコンバーターを製作、配布しています。 [ONION software] http://www.onionsoft.net/hsp/ XtoMXコンバーターを公開しています。DirectX8のX形式から、HGIMGで扱うことが できるmx形式に変換します。テクスチャやUV情報なども含めて有効な情報が変換 されます。 [よし〜ふ ゲーム開発部屋] http://member.nifty.ne.jp/Yoshirf/ 「YJ Studio 2001 モデリング編集」ツールで、ポリゴンのモデリング編集 およびテクスチャの設定、MXフォーマットの読み書きをサポートしています。 また、「YJPコンバータ」を使用することで、YJP形式を通して、DXF形式、 X形式(DirectX)、LWO形式(Lightwave3D)、ROK形式(六角大王)からのモデル データ変換を行なうことが可能です。 [MIA's HomePage] http://www.diry.net/mia/ MQO -> MX コンバータを公開しています。MQO形式は、3Dモデリングツール Metasequoia が出力するファイル形式です。テクスチャやUV情報なども含めて 有効な情報が変換されます。 ・MXファイルフォーマットについて MXファイルは、HGIMG専用に作成されたポリゴンモデル記述ファイルです。 MXファイルへの変換や、加工などのサポートは今後順次リリースしていく予定です。 ver2.0β2からマテリアル情報エリアなどが追加されたMXフォーマットver2.0が 定められました。以前のバージョンからの上位互換となっています。 ・mxフォーマット詳細(ver2.0) ユーザー側でMXファイルを作成する場合は、以下のフォーマットに従って ファイルを生成していただくようお願い致します。 MXファイルフォーマットは今後、拡張改編される可能性があります。 MXファイルについての技術的なご意見やご質問は、メールかβ版の掲示板へ お願い致します。 MXファイル構造(以下の順に各構造体が記録されています) [MXHED] [MDINF] ( SIZE_MDINF のバイト数だけ格納されています ) [NDINF] ( SIZE_NDINF のバイト数だけ格納されています ) [MATINF] ( SIZE_MATINF のバイト数だけ格納されています ) [EMTINF] ( SIZE_EMTINF のバイト数だけ格納されています ) [MXHED]はヘッダ情報です。以下の内容を持っています。 h1〜h4は、$4d,$58,$46,$00固定です。 現在のバージョンは2.00($0200)です。 typedef struct { // MX file header structure (ver2) // char h1; // magic code1 char h2; // magic code2 char h3; // magic code3 char h4; // magic code4 int version; // version number info int size_mdinf; // size of Model section int pt_mdinf; // ptr to Model Segment int size_ndinf; // size of Node section int pt_ndinf; // ptr to Node Segment int size_matinf; // size of Matinf section int pt_matinf; // ptr to Matinf Segment // Additional information int flags; // Extra Mode Flags short texoffset; // global Texture ID offset short matoffset; // global Material ID offset int size_emtinf; // size of ExMatinf section int pt_emtinf; // ptr to ExMatinf Segment } MXHED2; flagsフィールドには、mxファイルに含まれる情報の設定が保存されます。 以下のフラグによってON/OFFをコントロールすることができます。 ( (*)がついているものは現状でサポートされていません。) #define MX_FLAG_GLOBALTEX 1 // グローバルのTextureIDを使用する #define MX_FLAG_UV2 2 // UV値を0.0〜1.0で格納する #define MX_FLAG_PCOLOR 4 // 法線の替わりにRGB値を格納する(*) #define MX_FLAG_WEIGHT 8 // ndinfのvector.wにボーンウェイト情報を格納する(*) #define MX_FLAG_BONE 16 // ndinfのnormal.wにブレンド先ボーン情報を格納する(*) #define MX_FLAG_BOUND 32 // mdinfのscale.wにバウンディング半径情報を格納する(*) 続いてモデル情報を示す構造体が続きます。 階層構造を持つモデル同士の接続を示しています。 ndinfが示す[NDINF]のインデックスから、num_ndinfの個数がモデルの 持つポリゴン情報になります。 typedef struct { MX_VECTOR pos; // トランスレート MX_VECTOR ang; // 角度 MX_VECTOR scale; // スケール short flag; // enable flag ( master model ) short num_ndinf; // num of ndinf int ndinf; // ndinf index short child; // 子のmodel index short sibling; // 兄弟のmodel index } MDINF; それに続いてポリゴン情報が記録されます。 NDINFには、すべて4角形ポリゴンとして記録されています。 3角形の場合は最後の2頂点は同じ座標になります。 UV座標はfloat値ですが、テクスチャ上の座標値(ドット単位)となります。 ただし、MX_FLAG_UV2が指定されている場合、UV値はテクスチャ上の仮想座標 (0.0〜1.0)になります。 MX_VECTOR型のwは、通常は1.0fです。 typedef struct { float x, y, z, w; } MX_VECTOR; // 整数AXIS型 typedef struct { float u,v; } MX_UVAXIS; typedef struct { MX_VECTOR v[4]; // 頂点座標 MX_VECTOR n[4]; // 法線 MX_UVAXIS uv[4]; // UV座標 int color; // ディフューズ色(R8G8B8) short tex; // テクスチャID(-1の場合はテクスチャなし) short mat; // マテリアル情報 } NDINF; matフィールド(マテリアル情報)は、以下のフラグが格納されます。 #define NODE_ATTR_COLKEY 0x8000 #define NODE_ATTR_USEMATERIAL 0x400 // MaterialID(bit0-10)を参照する #define NODE_ATTR_GLOBALMAT 0x800 // グローバルのMaterialIDを使用する #define NODE_ATTR_SHADE_NONE 0 #define NODE_ATTR_SHADE_FLAT 1 #define NODE_ATTR_SHADE_GOURAUD 2 #define NODE_ATTR_SHADE_WIREFRAME 4 通常は、シェーディングモード(0=光源計算なし/1=フラット/2=グーロー)が 指定されますが、NODE_ATTR_USEMATERIALフラグをONの時は、bit0〜10で指定 された値はマテリアルID(EMTINFバッファ内の順番を示すID)となり、より 細かい質感設定が可能になります。 NODE_ATTR_COLKEYフラグがONの時は、テクスチャマッピングの際にカラーキー (透明色)のドットは転送されなくなります。 次にテクスチャのファイル名(拡張子なし)がascii文字列で 記録されています。 typedef struct { char name[16]; // テクスチャのファイル名 } MATINF; 次にマテリアル定義の拡張用バッファが記録されています。 typedef struct { // Extra Material Info // short flag; // Mode Flags char shade; // Shade Mode (0=no light/1=flat/2=gouraud) char priority; // Transparent priority int opt1; // (option) int opt2; // (option) float alpha; // 0.0〜1.0 透明 / 1.1〜 加算 / -0.1〜 減算 float diffuse; // diffuse rate値(0.0〜1.0) float fog; // fog rate値(0.0〜1.0) float specular; // スペキュラーrate値(0.0〜) float envmap; // 環境マップrate値(0.0〜1.0) float pad[8]; // (reserved) } EMTINF; 現状では、shadeフィールド以外はサポートされていません。 ------------------------------------------------------------------------------- HSP users manual / end of file -------------------------------------------------------------------------------