Easy3D For HSP3 関数の説明


    既にEasy3Dを使ったことがある方へ
       HSP2.61からHSP3対応になるにあたって、変更した点などは、
      変更点について
       に書きました。
       (スワップチェインについての説明も書いてあります。)

       ver3.0.0.1での変更点についてもお読みください。

おおざっぱに説明しますと、
形状データに *.sig ファイルを、モーションデータに *.qua ファイルを使用します。
それぞれのデータは、RokDeBone2で作成可能です。
(詳しくは、RokDeBone2のページをご覧ください。)


さて、e3dhsp.dllの関数の説明ですが、
まず、E3DSigLoadで、モデルデータ(sig file)を読み込むごとに、hsid というものが得られます。
(hsid とは、Handler Set ID の略です。)
各モデルデータを識別したり、モデルデータに対して処理を行う際は、
いつも、この、hsid を使用します。

また、E3DAddMotionで、モーションデータを読み込むごとに、モーションの番号が得られます。
e3dhsp_fight.as 中では、mk1_* などというように、表記しています。
(ちなみに、mk は motion kind の略です。)
モーションのセットや、変更には、いつも、この、モーション番号を使います。


カメラの操作方法は、2種類用意しました。
E3DSetCameraPos と、E3DSetCameraDeg、E3DSetCameraTwist を組で使用する方法と、
E3DSetCameraPos と、E3DSetCameraTarget、E3DSetCameraTwistを組で使用する方法とがあります。
どちらか一方の方法で、統一して、使用することを想定しています。

ver1.0.4.0から、カメラの操作方法が、1種類増えました。
E3DSetCameraPos
E3DCameraLookAt
E3DCameraOnNaviLine
E3DCameraDirUp
E3DCameraDirDown
E3DCameraDirRight
E3DCameraDirLeft
E3DSetCameraTwist
を組で、使用する方法です。
他の2種類の方法と混ぜて使用することは、想定していません。



それぞれの、関数の役割と、引数の説明を表にしました。

関数名 種類 説明 引数 備考
E3DInit 初期化 Direct3Dの初期化をする。

フルスクリーンにも対応しています。

フルスクリーンの解像度は、
指定したウインドウIDの幅に、
一番近いものを、自動で選びます。

640×480、
800×600、
1024×768、
1280×1024、
1400×1050、
1600×1200
の中から選びます。


HAL(ハードウェアの機能)が使えない場合は、エラーになります。

指定したビット数が使えない場合にも、
エラーになります。


エラーでアプリケーションが終了するのが
嫌な場合は、
この命令を呼ぶ前に、E3DCheckFullScreenParamsを呼んで、
チェックすることをおすすめします。

フルスクリーンの具体的な使用例は、
e3dhsp_fullscreen.as
に書きましたので、ご覧ください。



アンチエイリアスについて。
multisamplenumは0または2から16の値を指定してください。
multisamplenumの値が大きいほど、
画像のエッジがなめらかになります。
0を指定すると、アンチエイリアスは使えません。

multisamplenumに0以外を指定する場合は、
その前に、
E3DGetMaxMultiSampleNumで
指定できる最大値を取得してください。

アンチエイリアスをオンにすると(0以外を指定すると)、
BMP保存や、AVI保存の命令が使えなくなります。

(E3DWriteDisplay2BMP、E3DCreateAVIFileと他のAVI関連関数が使用できなくなります。)


アンチエイリアスを有効にするには、
作成した全てのhsidに対して、
E3DSetRenderState hsid, -1, D3DRS_MULTISAMPLEANTIALIAS, 1 を呼んでください。


アンチエイリアスの具体的な使用例は、
e3dhsp_antialias.as
に書きましたので、ご覧ください。

1. [IN] 変数または、数値 : wid
  ウインドウのIDを渡してください。
  screen命令やbgscr命令に指定したのと同じ番号を
  指定してください。

2. [IN] 変数または、数値 : objid
  オブジェクトID。
  HSPでボタンなどのオブジェクトを作り、
  その上に3D表示したい場合に、この引数を使います。
  HSPでは、オブジェクト作成直後のstat変数に、
  オブジェクトIDが入っています。
  このIDを指定してください。
  widで指定したウインドウ全体に、
  3D描画を行いたい場合は、
  この引数には-1を指定してください。


3. [IN] 変数または、数値 : fullscreenflag
  フルスクリーンにするときは1を、
  しないとき(ウインドウモード)は0を指定してください。
  省略した場合は、ウインドウモードになります。


4. [IN] 変数または、数値 : bits
  色数を決めるビット数を指定してください。
  16あるいは、32のみ有効です。
  fullscreenflagに1を指定したときのみ、結果に反映されます。


5. [IN] 変数または、数値 : multisamplenum
  マルチサンプルの数。
  詳しくは、右記をご覧ください。


6. [OUT] 変数 : scid
  スワップチェインIDが代入されます。
  このIDは、どの部分に描画を行うかを指定するのに
  使います。
  E3DChkInView, E3DRender, E3DBeginScene, E3DPresent   などで
  必要になります。

ver1.0.0.1
E3DBye 後処理 Direct3Dの後処理をする。

作成したメモリなどの解放を行います。
アプリケーションの終了時に呼んでください。
なし ver1.0.0.1
E3DSigLoad モデルデータ 形状データ(*.sig)を読み込んで、hsidを得る。 1. [IN] 文字列または、文字列の変数 : fname
  *.sig のパス文字列。

2. [OUT] 変数 : hsid
  読み込んだ形状データを識別するhsid

3. [IN] 変数または、数値 : adjustuvflag
  UV値を正規化するかどうかのフラグ
  正規化する場合は1を指定
  しない場合は0を指定

4. [IN] 変数または、数値 : mult
  読み込み倍率を指定してください。
  実数。
ver1.0.0.1
E3DCreateSwapChain スワップチェイン スワップチェインを作成します。

スワップチェインとは、複数の画面に描画を行うためのものです。
E3DInitで指定したウインドウとオブジェクト以外のところに、
描画したい場合に、この命令を呼びます。

この命令で取得したscidを、
E3DChkInView, E3DBeginScene, E3DRender, E3DPresentなどに渡すことにより、
複数画面に3D描画できるようになります。

具体的な使用例は、
e3dhsp_SwapChain.as
に書きましたので、ご覧ください。

1. [IN] 変数または、数値 : wid
  ウインドウのIDを渡してください。
  screen命令やbgscr命令に指定したのと同じ番号を
  指定してください。

2. [IN] 変数または、数値 : objid
  オブジェクトID。
  HSPでボタンなどのオブジェクトを作り、
  その上に3D表示したい場合に、この引数を使います。
  HSPでは、オブジェクト作成直後のstat変数に、
  オブジェクトIDが入っています。
  このIDを指定してください。
  widで指定したウインドウ全体に、
  3D描画を行いたい場合は、
  この引数には-1を指定してください。

3 [OUT] 変数 : scid
  スワップチェインIDが代入されます。
  このIDは、どの部分に描画を行うかを指定するのに
  使います。
  E3DChkInView, E3DRender, E3DBeginScene, E3DPresent  などで
  必要になります。
ver1.0.0.1
E3DDestroySwapChain スワップチェイン スワップチェインを破棄します。

E3DCreateSwapChainで作成したスワップチェインが、
もういらなくなった場合に、呼んでください。

E3DInitで取得したscidに対しては、呼び出さないでください。
1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DCreateSwapChainで取得したIDを指定してください。
ver1.0.0.1
E3DRender 描画 バックバッファにレンダリングする。


変更したボーンの中で、
一番親の番号をlastparentに指定すると、
そのボーンツリーの影響を受ける頂点のみを
抽出して、計算します。

lastparentは、高速化のためのものです。
E3DIKRotateBetaで取得できるlastparentの値を
渡すことを想定しています。

キャラクター全体が移動した場合や、
カメラが移動した場合には、使わないでください。
また、E3DRenderの初回の呼び出し時にも
使わないでください。

lastparentを使用したくない場合は、
0をセットしてください。


1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 変数または、数値 : hsid
  形状データを識別するid

3. [IN] 変数または、数値 : withalpha
  0を指定すると、不透明パーツのみレンダリングする。
  1を指定すると、半透明パーツのみレンダリングする。

4. [IN] 変数または、数値 : framecnt
  E3DSetNewPose実行後のstatの値を指定する。
  (AfterImageの処理でのみ使用する。)

5. [IN] 変数または、数値 : projection mode
  プロジェクションの、モードを指定する。
  0を指定すると、通常の表示。
  1を指定すると、画面中央にレンズがあるように表示される。

6. [IN] 変数または、数値 : lastparent
  変更が生じた一番親のボーンの番号を指定します。
  詳しくは、左記をご覧ください。

7. [IN] 変数または、数値 : sigLightFlag
  sigのライティング計算を有効にしたいときは1を、
  無効にしたいときは0を指定してください。
  デフォルトは1です。

  背面カリングを行わずに、
  全ての頂点の色計算をしたい場合には、
  2を指定してください。

8. [IN] 変数または、数値 : transskip
  transskipに1をセットすると、
  頂点変換処理がスキップされます。
  不透明、半透明と、2回、E3DRenderを呼び出す場合は、
  2回目の呼び出し時に、transskipに1を指定してください。




ver1.0.0.1

ver1.0.0.5で引数追加
E3DPresent 描画 バックバッファの内容を、
プライマリバッファに転送する。
1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。
ver1.0.0.1
E3DBeginScene 描画 アプリケーションでは、レンダリングを実行する前には必ずこのメソッドを呼び出し、
レンダリングの終了時、
および再度E3DBeginSceneを呼び出す前には、
必ず E3DEndSceneを呼び出す。

具体的には、
E3DRender, E3DDrawText, E3DDrawBigTextを、
E3DBeginSceneと、E3DEndSceneでサンドイッチするように記述する。


1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 変数または、数値 : skipflag
  skipflagに0以外を指定すると、
  バックバッファのクリア、背景の表示をスキップします。
 
  E3DCopyTextureToBackBufferを使うときなどに、
  使用してください。
ver1.0.0.1
E3DEndScene 描画 このメソッドが成功すると、シーンがレンダリングされ、レンダリング後のシーンがデバイス サーフェスに保持される。 なし ver1.0.0.1
E3DCreateBG 背景 画面の一番奥に表示される背景をセットします。

画像ファイルは、2つまで、指定できます。
2個目の画像は、雲や、もや用を想定しています。
1つ目の画像と2つ目の画像は、モジュレートされて、表示されます。

isroundに1をセットすると、
背景が、視点の回転に対応して、回転するようになります。


ビデオカードがマルチテクスチャに対応していない場合、
または、モジュレート処理が出来ない場合は、
1個目のテクスチャーしか表示しないように
なっています。

1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 文字列または、文字列変数 : filename1
  1つ目の画像ファイル名。


3. [IN] 文字列または、文字列変数 : filename2
  2つ目の画像ファイル名。
  2つ目が不必要な場合は、存在しないファイル名を、
  渡してください。

4. [IN] 変数または、数値 : u
5. [IN] 変数または、数値 : v
  2枚目の画像の、UV座標を、毎フレーム、どれくらい、
  移動させるかを指定します。
  通常は、0から1までの値を指定してください。
  実数。

6. [IN] 変数または、数値 : isround
  isroundに、1を指定すると、
  ビューの回転に対応して、
  一つ目の画像ファイルのUV座標が、回転します。
  この際、画像ファイルの左端と、右端が、
  連続するようなデータでないと、
  つなぎ目が見えてしまいますので、注意してください。
  isroundに0を指定すると、
  1つ目の画像は、回転しません。

7. [IN] 変数または、数値 : fogdist
  フォグの計算に使う、カメラからの距離を指定します。
  この引数に、E3DSetLinearFogParamsで指定する
  endより小さい値を指定すれば、
  背景は、フォグの色に染まりながらも、
  うっすらと見えるように出来ます。


ver1.0.0.1

ver2.0.0.9で引数追加
E3DSetBGU 背景 背景のUV座標のU座標を指定します。

画面の左端のU座標の値をstartu引数に、

画面の右端のU座標の値をendu引数に、
それぞれ、指定してください。

この機能を使った、背景のスクロールの例は、
e3dhsp_scrollBG.as
にあります。

1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 数値または、変数 : startu
  画面左端のU座標の値。
  実数。

3. [IN] 数値または、変数 : endu
  画面右端のU座標の値。
  実数。
ver1.0.0.1
E3DSetBGV 背景 背景のUV座標のV座標を指定します。

画面の一番上のV座標の値をstartv引数に、

画面の一番下のV座標の値をendv引数に、
それぞれ、指定してください。


この機能を使った、背景のスクロールの例は、
e3dhsp_scrollBG.as
にあります。
1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 数値または、変数 : startv
  画面左端のV座標の値。
  実数。

3. [IN] 数値または、変数 : endv
  画面右端のV座標の値。
  実数。
ver1.0.0.1
E3DDestroyBG 背景 背景を破棄します。 1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。
ver1.0.0.1
E3DAddMotion モーション モーションデータ(*.qua)を読み込む。 1. [IN] 変数または、数値 : hsid
  どのモデルデータに対するモーションかを指定する。

2. [IN] 文字列または、文字列の変数 : fname
  *.quaのパス文字列。

3. [OUT] 変数 : mk
  読み込んだモーションを識別する番号

4. [OUT] 変数 : maxframe
  読み込んだモーションの最大フレーム番号
  (総フレーム数 - 1 と同じ)
ver1.0.0.1
E3DSetMotionKind モーション カレントの、モーション番号を指定する。
(カレントモーションを変更する。)

この関数を実行すると、
モーションのフレーム番号は、
0にセットされる。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : mk
  モーションを識別する番号
ver1.0.0.1
E3DGetMotionKind モーション カレントの、モーション番号を取得する。 1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [OUT] 変数 : mk
  モーションを識別する番号
ver1.0.0.1
E3DSetNewPose モーション カレントのモーションを、
E3DSetMotionStepでセットしたstepフレーム数分、
進ませる。

nextframeに、
次に再生するフレーム番号がセットされる。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [OUT] 変数 : nextframe
  次に再生されるフレーム番号が代入されます。
ver1.0.0.1
E3DSetMotionStep モーション モーションのステップ数を指定する。
例えば、stepに、2を指定すると、
2フレームごとに(1フレームおきに)、
モーションを再生するようになる。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : mk
  モーションを識別する番号

3. [IN] 変数または、数値 : step
  何フレームごとに、モーションを再生するかを指定する。
ver1.0.0.1
E3DChkConflict 当たり判定 2つの形状データが、衝突しているかどうかを、判定する。

(判定の元になるデータは、
E3DChkInView命令によって、更新される。)


hsid1が視野外にある場合は、inviewflagに1が、
hsid2が視野外にある場合は、inviewflagに2が、
両方とも視野外の場合は、inviewflagに3が、
両方とも視野内の場合は、inviewflagに0が代入されます。

現在は、
E3DChkConflict2があります。
パーツ同士のあたり判定が出来るようになりました。
モデル全体のあたり判定も出来ます。
モデル全体のあたり判定をする場合でも、
E3DChkConflict2の方が、パーツごとの計算をするので、この関数よりも、計算精度が高いです。

新しい、E3DChkConflict2をお使いください。
1. [IN] 変数または、数値 : hsid1
  形状データを識別するid

2. [IN] 変数または、数値 : hsid2
  形状データを識別するid

3. [OUT] 変数 : confflag
  hsid1, hsid2で識別される形状同士が、
  衝突している場合は、1が、
  衝突していない場合は0がセットされる。

4. [OUT] 変数 : inviewflag
   hsid1が視野外にある場合は、inviewflagに1を、
  hsid2が視野外にある場合は、inviewflagに2を、
  両方とも視野外の場合は、inviewflagに3を、
  両方とも視野内の場合は、inviewflagに0を代入します。

ver1.0.0.1
E3DChkConflict2 当たり判定 2つの形状データの指定したパーツ同士が、衝突しているかどうを、判定します。

partno1, partno2には、
E3DGetPartNoByNameで取得した、
パーツの番号を渡してください。

partnoに-1を指定すると、
モデル全体とあたり判定をします。


(判定の元になるデータは、
E3DChkInView命令によって、更新されます。)


hsid1が視野外にある場合は、inviewflagに1が、
hsid2が視野外にある場合は、inviewflagに2が、
両方とも視野外の場合は、inviewflagに3が、
両方とも視野内の場合は、inviewflagに0が代入されます。

1. [IN] 変数または、数値 : hsid1
  形状データを識別するid
2. [IN] 変数または、数値 : partno1
  hsid1のモデル中のパーツの番号

3. [IN] 変数または、数値 : hsid2
  形状データを識別するid
4. [IN] 変数または、数値 : partno2
  hsid2のモデル中のパーツの番号

5. [OUT] 変数 : confflag
  hsid1, hsid2で識別される形状同士が、
  衝突している場合は、1が、
  衝突していない場合は0がセットされる。

6. [OUT] 変数 : inviewflag
   hsid1が視野外にある場合は、inviewflagに1を、
  hsid2が視野外にある場合は、inviewflagに2を、
  両方とも視野外の場合は、inviewflagに3を、
  両方とも視野内の場合は、inviewflagに0を代入します。

ver1.0.0.1
E3DCreateAfterImage 残像 この関数は、現在、機能していません。 1. [IN] 変数または、数値 : hsid
  形状データを識別するid
2. [IN] 変数または、数値 : imagenum
  表示する残像の数を指定する。
ver1.0.0.1
E3DDestroyAfterImage 残像 E3DCreateAfterImageで作成した、残像用のオブジェクトを破棄する。
(残像が表示されなくなる。)

必要回数より多く実行しても、害はないが、
実行し忘れると、
メモリリークするので注意してください。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid
ver1.0.0.1
E3DSetAlpha 描画パラメータ 半透明の設定。
この関数は、過去のバージョンとの互換性のためだけに、存在します。
半透明の設定は、
E3DSetAlpha2 関数を、ご使用ください。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : usealphaflag
  0を指定すると、不透明で描画され、
  1を指定すると、alpha = 0.5 で描画されます。

3. [IN] 変数または、数値 : updateflag
  1を指定してください。
ver1.0.0.1
E3DSetAlpha2 描画パラメータ 形状データの、頂点のアルファ値を設定します。

alphaval が、1.0の時は、不透明に、
alphavalが、0.0の時は、完全に透明になります。

alphavalに、1.0以外の値を指定した場合は、
E3DRenderの2番目の引数、withalphaに、
1を指定して、描画します。


具体的な使用例は、zip中の、
e3dhsp_alpha.as をご覧ください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードの透明度を設定できます。

2. [IN] 数値または、変数 : alphaval
  頂点のアルファ値を指定します。
  
  頂点のアルファ値は、0.0から1.0の値で
  指定してください。
  範囲外の値は、クランプしてセットします。
  実数。

3. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

  partnoに-1を渡すと、
  全てのパーツにアルファをセットできます。

4. [IN] 変数または、数値 : updateflag
  1を指定してください。

ver1.0.0.1
E3DSetPos モデル位置 形状データの位置をセットする。 1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : posx
3. [IN] 変数または、数値 : posy
4. [IN] 変数または、数値 : posz
 実数。
 形状データを ( posx, posy, posz) に移動する。
ver1.0.0.1
E3DGetPos モデル位置 形状データの位置を取得する。 1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [OUT] 変数 : posx
3. [OUT] 変数 : posy
4. [OUT] 変数 : posz
  実数型の変数。
  形状データの位置を取得する。
ver1.0.0.1
E3DSetDir モデル向き 形状データの向きを指定する。
X軸、Y軸、Z軸の順番に、
指定した角度だけ回転します。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : degx
3. [IN] 変数または、数値 : degy
4. [IN] 変数または、数値 : degz
  形状データの向きを、
  X,Y,Z軸のそれぞれの角度(degree)で指定する。
  実数。
ver1.0.0.1
E3DRotateInit モデル向き 形状データの向きを初期化します。 1. [IN] 変数または、数値 : hsid
  形状データを識別するid
ver1.0.0.1
E3DRotateX モデル向き 形状データを、X軸に関して、degx 度だけ回転します。 1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : degx
  回転角度。
  実数。
ver1.0.0.1
E3DRotateY モデル向き 形状データを、Y軸に関して、degy 度だけ回転します。 1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : degy
  回転角度。
  実数。
ver1.0.0.1
E3DRotateZ モデル向き 形状データを、Z軸に関して、degz 度だけ回転します。 1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : degz
  回転角度。
  実数。
ver1.0.0.1
E3DTwist モデル向き 形状データを、現在向いている方向を軸として、deg度だけ、回転します。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : deg
  回転角度。
  実数。
ver1.0.0.1
E3DPosForward モデル位置 形状データを、現在向いている方向に、stepだけ移動する。

ただし、形状データが、default状態で、
Z軸の方向を向いていると仮定する。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : step
  移動距離を指定する。
  実数。
ver1.0.0.1
E3DCloseTo モデル位置 hsid1で識別される形状を、hsid2で識別される形状の方向に、動かす。

内部で、E3DDirToTheOtherを呼び出します。
1. [IN] 変数または、数値 : hsid1
  移動する形状データを、識別するid

2. [IN] 変数または、数値 : hsid2
  hsid2で指定した形状データの方向に移動する。

3. [IN] 変数または、数値 : step
  移動距離を指定する。
  実数。
ver1.0.0.1
E3DDirToTheOtherXZ モデル向き hsid1で識別される形状を、XZ平面で、hsid2で識別される形状の方向を、向くようにする。

ただし、形状データが、初期状態で、
Z軸の負の方向(0.0, 0.0, -1.0)を向いているものと仮定しています。
1. [IN] 変数または、数値 : hsid1
  向きを変える形状データを、識別するid

2. [IN] 変数または、数値 : hsid2
  hsid2で指定した形状データの方向を向く。
ver1.0.0.1
E3DDirToTheOther モデル向き E3DDirToTheOtherXZの3次元版。

ただし、形状データが、初期状態で、
Z軸の負の方向(0.0, 0.0, -1.0)を向いているものと仮定しています。
1. [IN] 変数または、数値 : hsid1
  向きを変える形状データを、識別するid

2. [IN] 変数または、数値 : hsid2
  hsid2で指定した形状データの方向を向く。
ver1.0.0.1
E3DSeparateFrom モデル位置 hsid1で識別される形状を、hsid2で識別される形状と、逆の方向に、動かす。 1. [IN] 変数または、数値 : hsid1
  移動する形状データを、識別するid

2. [IN] 変数または、数値 : hsid2
  hsid2で指定した形状データと反対方向に移動する。

3. [IN] 変数または、数値 : dist
  形状同士をどのくらいの距離、離すかを指定する。
  実数。
ver1.0.0.1
E3DGetCameraPos カメラ カメラの位置を取得する。 1. [OUT] 変数 : posx
2. [OUT] 変数 : posy
3. [OUT] 変数 : posz
  実数型の変数。
  カメラの位置、 ( posx, posy, posz) を取得する。
ver1.0.0.1
E3DSetCameraPos カメラ カメラの位置を指定する。 1. [IN] 変数または、数値 : posx
2. [IN] 変数または、数値 : posy
3. [IN] 変数または、数値 : posz
  カメラを ( posx, posy, posz) に移動する。
  実数。
ver1.0.0.1
E3DGetCameraDeg カメラ カメラの向きを取得する。 1. [OUT] 変数 : degxz
  カメラのXZ平面での角度を取得する。
  実数型の変数。

2. [OUT] 変数 : degy
  カメラの仰ぎ角度を取得する。
  実数型の変数。
ver1.0.0.1
E3DSetCameraDeg カメラ カメラの向きを指定する。 1. [IN] 変数または、数値 : degxz
  カメラのXZ平面での角度を指定する。
  実数。

2. [IN] 変数または、数値 : degy
  カメラの仰ぎ角度を指定する。
  実数。
ver1.0.0.1
E3DSetCameraTarget カメラ カメラの注視点を指定する。 1. [IN] 変数または、数値 : targetx
2. [IN] 変数または、数値 : targety
3. [IN] 変数または、数値 : targetz
  カメラの注視点を(targetx, targety, targetz)にセットする。
  実数。

4. [IN] 変数または、数値 : upvecx
5. [IN] 変数または、数値 : upvecy
6. [IN] 変数または、数値 : upvecz
  カメラの上方向のベクトルを指定する。
  内部で、正規化して使用される。
  実数。
ver1.0.0.1
E3DChkInView 描画準備 hsidで識別されるモデルが、視野内にあるかどうかを、判定します。

結果は、E3DHSPの内部データに、セットされます。

視野外のオブジェクトや、パーツは、
E3DRender時に、
自動的に、処理をスキップするようになります。

必ず、E3DSetPosや、E3DSetNewPoseより後、
E3DRenderより前に、
呼び出してください。


1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 変数または、数値 : hsid
  形状データを識別するid
ver1.0.0.1
E3DEnableDbgFile デバッグ デバッグ情報を、dbg.txtに出力するように、します。 なし ver1.0.0.1
E3DSetProjection 描画パラメータ プロジェクションを指定する。

この関数を呼び出さなかった場合は、
near面:100.0, far面:10000.0, 視野角:45.0度
がdefaultで適用される。

引数に不正な値が渡された場合も、
default値が適用される。
1. [IN] 変数または、数値 : near
  クリッピングの近い側の距離
  実数。

2. [IN] 変数または、数値 : far
  クリッピングの遠い側の距離
  実数。

3. [IN] 変数または、数値 : fovdeg
  視野角(degree)
  実数。
ver1.0.0.1
E3DGetKeyboardState キーボード 256 個の仮想キーの状態を、指定されたバッファkeybufへコピーします。

keybuf は、この関数を使用する前に、
dim keybuf, 256
で、確保してください。

複数のキーの状態を、一度の呼び出しで、
取得できます。

例えば、Aキーが押されているかどうかを
確かめる場合は、
E3DGetKeyboardState
呼び出し後に、
keybuf.'A' の値を調べます。
( ’ を忘れずに。 )
0が入っていた場合は、押されていません。
1が入っていた場合は、押されています。

具体的な使用例は、zip中の、as ファイルをご覧ください。

バーチャルキー情報は、zip中の、
e3dhsp3.as で、
VK_ で始まる定数として、宣言しています。
1. [OUT] 変数 : keybuf
  keybufに、キーの状態が、代入されます。
  keybufは、dim keybuf, 256 で、
  作成されている必要があります。
ver1.0.0.1
E3DCos 算術 cosを取得する。 1. [IN] 変数または、数値 : degree
  degree度のcosを計算します。
  実数。

2. [OUT] 変数 : ret
  cos の結果がセットされる。
  実数型の変数。
ver1.0.0.1
E3DSin 算術 sinを取得する。 1. [IN] 変数または、数値 : degree
  degree度のsinを計算します。
  実数。

2. [OUT] 変数 : ret
  sin の結果がセットされる。
  実数型の変数。
ver1.0.0.1
E3DACos 算術 acosを取得する。 1. [IN] 変数または、数値 : dot
  たとえば、内積をいれる。

2. [OUT] 変数 : degree
  acos( dot ) が
  degreeにセットされる。
  実数型の変数。
ver1.0.0.1
E3DDot 算術 (vecx1, vecy1, vecz1)と、(vecx2, vecy2, vecz2)を、それぞれ正規化したもの同士の内積を取得する。
1. [IN] 変数または、数値 : vecx1
2. [IN] 変数または、数値 : vecy1
3. [IN] 変数または、数値 : vecz1
  実数。

4. [IN] 変数または、数値 : vecx2
5. [IN] 変数または、数値 : vecy2
6. [IN] 変数または、数値 : vecz2
  実数。

7. [OUT] 変数 : ret
  結果が代入される。
  実数型の変数。
ver1.0.0.1
E3DCross 算術 (vecx1, vecy1, vecz1)と、(vecx2, vecy2, vecz2)の両方に垂直で、大きさが1 なベクトル(retx, rety, retz)を取得する。
1. [IN] 変数または、数値 : vecx1
2. [IN] 変数または、数値 : vecy1
3. [IN] 変数または、数値 : vecz1
  実数。

4. [IN] 変数または、数値 : vecx2
5. [IN] 変数または、数値 : vecy2
6. [IN] 変数または、数値 : vecz2
  実数。

7. [OUT] 変数 : retx
8. [OUT] 変数 : rety
9. [OUT] 変数 : retz
  結果が代入される。
  実数型の変数。
ver1.0.0.1
E3DAtan 算術 atan ( val ) のdegreeを取得します。 1. [IN] 変数または、数値 : val
  実数。

2. [OUT] 変数 : retdeg
  retdegに、atan( val ) の角度(degree)が入ります。
  実数型の変数。
ver1.0.0.1
E3DAtan2 算術 atan2( y, x ) のdegreeを取得します。 1. [IN] 変数または、数値 : y
2. [IN] 変数または、数値 : x
  実数。

3. [OUT] 変数 : retdeg
  retdegに、atan2( y, x ) の角度(degree)が入ります。
  実数型の変数。
ver1.0.0.1
E3DSqrt 算術 sqrt( val ) を取得します。 1. [IN] 変数または、数値 : val
  実数。

2. [OUT] 変数 : ret
  retに、sqrt( val ) が入ります。
  実数型の変数。
ver1.0.0.1
E3DDrawText テキスト 画面上の(posx, posy) に、r, g, b で指定した色で、strの文字列を書く。

英数字のみ。
scaleが1.0のときは、12ポイントの大きさ。
1. [IN] 変数または、数値 : posx
2. [IN] 変数または、数値 : posy
  座標。整数。

3. [IN] 変数または、数値 : scale
  実数。

4. [IN] 変数または、数値 : r
5. [IN] 変数または、数値 : g
6. [IN] 変数または、数値 : b
  色(0から255)

7. [IN] 文字列または、文字列変数 : str
  表示文字列。
ver1.0.0.1
E3DDrawBigText テキスト 画面上の(posx, posy) に、r, g, b で指定した色で、strの文字列を書く。

英数字のみ。
scaleが1のときは、36ポイントの大きさ。
1. [IN] 変数または、数値 : posx
2. [IN] 変数または、数値 : posy
  座標。整数。

3. [IN] 変数または、数値 : scale
  実数。

4. [IN] 変数または、数値 : r
5. [IN] 変数または、数値 : g
6. [IN] 変数または、数値 : b
  色(0から255)

7. [IN] 文字列または、文字列変数 : str
  表示文字列。
ver1.0.0.1
E3DRand 算術 0から(range - 1)までの間の、乱数を取得する。 1. [IN] 変数または、数値 : range
  乱数の範囲を指定する。
  整数。

2. [OUT] 変数 : rand
  乱数がセットされる。
  整数。
ver1.0.0.1
E3DSeed 算術 乱数の初期化をする。
(乱数のseedをセットする。)
srand( (unsigned)seed )を実行する。
1. [IN] 変数または、数値 : seed
  srandに渡す値を指定する。
ver1.0.0.1
E3DWaitByFPS 同期 指定したfpsに、近くなるように、waitします。

fpsとは、1秒間に描画するのこと回数です。

指定したfps以上、
処理を行わないようにするための命令です。

遅いマシンが、速くなるわけではないので、
注意してください。

必ず、HSPの標準命令、”await 0”と
セットで使用してください。


実際のfpsが、retfps変数に、代入されます。
1. [IN] 変数または、数値 : fps
  指定したfpsに、近くなるように、waitします。
  整数。

2. [OUT] 変数 : retfps
  実際のfpsが代入されます。
  整数。
ver1.0.0.1
E3DGetFPS 同期 fpsを計測します。

メインループの最後などで呼び出すことを想定しています。
E3DGetFPSが呼ばれる時間間隔から、
1秒間あたりに、何回呼び出されるかを計算します。

1. [OUT] 変数 : retfps
  fpsが代入されます。
  整数。
ver1.0.0.1
E3DCreateLight ライト 光源を作成します。

光源の識別番号、lightIDが取得できます。
以後、光源のパラメータの設定には、
この、lightIDを使用します。
1. [OUT] 変数 : lightID ver1.0.0.1
E3DSetDirectionalLight ライト lightIDで識別される光源に、平行光源のパラメータをセットする。
1. [IN] 変数または、数値 : lightID
  光源を識別するid

2. [IN] 変数または、数値 : dirx
3. [IN] 変数または、数値 : diry
4. [IN] 変数または、数値 : dirz
  平行光源の向きを、
  ベクトル(dirx, diry, dirz)を正規化したベクトルに、
  設定する。
  実数。

5. [IN] 変数または、数値 : r
6. [IN] 変数または、数値 : g
7. [IN] 変数または、数値 : b
  平行光源の色を、
  (r, g, b)に設定する。
  各色の値は、0から255までの値とする。
ver1.0.0.1
E3DSetPointLight ライト lightIDで識別される光源に、ポイントライトのパラメータをセットする。 1. [IN] 変数または、数値 : lightID
  光源を識別するid

2. [IN] 変数または、数値 : posx
3. [IN] 変数または、数値 : posy
4. [IN] 変数または、数値 : posz
  ポイントライトの位置を、
  (posx, posy, posz)に設定する。
  実数。

5. [IN] 変数または、数値 : dist
  ポイントライトの光が届く距離を設定します。
  実数。

6. [IN] 変数または、数値 : r
7. [IN] 変数または、数値 : g
8. [IN] 変数または、数値 : b
  ポイントライトの色を、
  (r, g, b)に設定する。
  各色の値は、0から255までの値とする。
ver1.0.0.1
E3DSetSpotLight ライト lightIDで識別される光源に、スポットライトのパラメータをセットする。 1. [IN] 変数または、数値 : lightID
  光源を識別するid


2. [IN] 変数または、数値 : posx
3. [IN] 変数または、数値 : posy
4. [IN] 変数または、数値 : posz
  スポットライトの位置を、
  (posx, posy, posz)に設定する。
  実数。

5. [IN] 変数または、数値 : dirx
6. [IN] 変数または、数値 : diry
7. [IN] 変数または、数値 : dirz
  スポットライトの向きを、
  ベクトル(dirx, diry, dirz)を正規化したベクトルに、
  設定する。
  実数。

8. [IN] 変数または、数値 : dist
  スポットライトの光が届く距離を設定します。
  実数。

9. [IN] 変数または、数値 : angle
  スポットライトの照らす角度(degree)を設定します。
  実数。

10. [IN] 変数または、数値 : r
11. [IN] 変数または、数値 : g
12. [IN] 変数または、数値 : b
  スポットライトの色を、
  (r, g, b)に設定する。
  各色の値は、0から255までの値とする。
ver1.0.0.1
E3DDestroyLight ライト ライトを破棄します。 1. [IN] 変数または、数値 : lightID
  削除する光源を、識別するid
ver1.0.0.1
E3DClearZ 描画 Zバッファーをクリアーします なし ver1.0.0.1
E3DDestroyHandlerSet 後処理 E3DSigLoad, E3DAddMotionで作成した、
オブジェクトを破棄します。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid
ver1.0.0.1
E3DSetDispSwitch 描画パラメータ ディスプレイスイッチのオン、オフを
行うことが出来ます。

ディスプレイスイッチの詳細は、
ディスプレイスイッチの説明をご覧ください。



mk引数に-1を指定すると、
モーションを読み込んでいなくても、
ディスプレイスイッチをオンオフすることが出来ます。
mkに-1を指定して、
スイッチを一個でもオンにした場合は、
モーションを読み込んだ場合も、
モーションのスイッチ状態よりも優先されます。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : mk
  モーションを識別する番号

3. [IN] 変数または、数値 : switchID
  変更したいスイッチの番号

4. [IN] 変数または、数値 : frameno
  フレーム番号、framenoより後のフレームの
  スイッチを、
  flagに基づいて、オン、オフします。

5. [IN] 変数または、数値 : flag
  flagに1を指定すると、スイッチをオンに、
  0を指定すると、スイッチをオフにします。
ver1.0.0.1
E3DSetMotionFrameNo モーション E3DSetMotionKindの拡張版です。

モーションの種類と、フレーム番号を
セットすることが出来ます。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : mk
  モーションを識別する番号

3. [IN] 変数または、数値 : frameno
  フレーム番号
ver1.0.0.1
E3DCreateSprite スプライト スプライトを作成します。
spriteIDで、スプライトを識別するIDを、
取得できます。

スプライトの操作時には、この、spriteIDを
使用します。

作成されるスプライトのサイズは、
元の画像ファイルの大きさと、
異なる場合があります。

サイズは、E3DGetSpriteSize で、
確認してください。
1. [IN] 文字列または、文字列変数 : filename
  画像ファイル名。

2. [IN] 変数または、数値 : transparentflag
  透過フラグ。

  画像ファイルのアルファをもとに透過する場合、
  あるいは、画像ファイルにアルファが無く透過もしない場合、
  0を指定してください。

  1をセットすると、黒色を透過色として色抜きします。

  2をせっとすると、(tpR, tpG, tpB)で指定した色を
  透過色とします

  この関数のtransparetflagの意味は、
  他の関数のtransparentとは、違うので、
  気を付けてください。



3. [OUT] 変数 : spriteID
  作成したスプライトを識別するID。

4. [IN] 変数または、数値 : tpR
5. [IN] 変数または、数値 : tpG
6. [IN] 変数または、数値 : tpB
  transparentflag = 2 のとき、
  透過色を、(tpR, tpG, tpB)で指定します。
ver1.0.0.1
E3DBeginSprite スプライト スプライトを描画できるように、
デバイスを準備します。

E3DRenderSprite命令を、
E3DBeginSpriteと、E3DEndSpriteで、
サンドイッチするように、記述してください。

E3DBeginSpriteとE3DEndSpriteは、
E3DBeginSceneとE3DEndSceneの間に記述してください。

スプライトを描画すると、レンダーステートが変化するので、
hsidなどを描画した後、最後に、スプライトの描画命令を書くことをおすすめします。
なし ver1.0.0.1
E3DEndSprite スプライト E3DRenderSprite命令を、
E3DBeginSpriteと、E3DEndSpriteで、
サンドイッチするように、記述してください。
なし ver1.0.0.1
E3DRenderSprite スプライト spriteIDで識別される、スプライトを、レンダリングします。 1. [IN] 変数または、数値 : spriteID
  スプライトを識別するID。

2. [IN] 変数または、数値 : scalex
3. [IN] 変数または、数値 : scaley
  スプライトのx軸、y軸方向の倍率を指定します。
  実数を指定。(等倍は1.0)


4. [IN] 変数または、数値 : trax
5. [IN] 変数または、数値 : tray
  スプライトの描画位置(trax, tray)を指定します。
  指定した位置が、スプライトの左上の座標となります。
  整数。

6. [IN] 変数または、数値 : traz
  描画時の奥行き情報。
  3D描画との前後関係にも、反映されます。

  0.0から1.0の実数を指定してください。
  0.0のとき、一番手前に描画され、
  1.0のとき、一番奥に描画されます。

  0.0から1.0の間は、均等な効果ではありません。
  値を増やしても、あまり効果の無い場所や、
  少し、値を増やしただけで、効果が大きくなる範囲が  あります。
  Easy3Dの場合は、0.99以降が、
  少し値を増やしただけで、
  効果が大きい範囲となります。
ver1.0.0.1

ver2.0.0.4で引数追加
E3DGetSpriteSize スプライト spriteIDで識別される、スプライトの、サイズを取得します。 1. [IN] 変数または、数値 : spriteID
  スプライトを識別するID。

2. [OUT] 変数 : spriteWidth
3. [OUT] 変数 : spriteHeight
  幅と、高さが、それぞれ、spriteWidth, spriteHeightに
  代入されます。
  整数型変数。
ver1.0.0.1
E3DSetSpriteRotation スプライト E3DCreateSprite命令で作成したスプライトを回転させます。

(centerx, centery)の座標を中心に回転します。
(0, 0)を指定すると、スプライトの左上を中心に回転します。

スプライトの中央を中心に回転したいときは、
まず、E3DGetSpriteSize命令で、
スプライトのサイズ、sizex, sizey を取得します。
centerx = sizex / 2
centery = sizey / 2
の値をこの関数に渡せば、OKです。

回転角度は、絶対量です。
相対量ではありません。

E3DSetSpriteRotation命令は、
一度、呼び出せば、内部で、情報を記憶しますので、次に異なるパラメータで呼び出すまで、
その値が有効になります。

1. [IN] 数値または、変数 : spid
  スプライトデータを識別するID

2. [IN] 数値または、変数 : centerx
3. [IN] 数値または、変数 : centery
  (centerx, centery)の座標を中心に回転します。
  実数対応。

4. [IN] 数値または、変数 : rotdeg
  rotdeg 度だけ、スプライトを回転します。
  実数。
ver1.0.0.1
E3DSetSpriteARGB スプライト スプライトに乗算する色を指定します。

alpha, r, g, b には、それぞれ、
0から255までの値を渡してください。

alpha に255より小さい値を渡せば、
半透明のスプライトの描画が出来ます。

スプライトの色を変えたくない場合には、
r, g, bには、255を渡してください。
1. [IN] 数値または、変数 : spid
  スプライトデータを識別するID

2. [IN] 数値または、変数 : alpha
3. [IN] 数値または、変数 : r
4. [IN] 数値または、変数 : g
5. [IN] 数値または、変数 : b
  スプライトに乗算する色を指定します。
  半透明にする場合には、
  alphaに255より小さい値を入れます。
ver1.0.0.1
E3DDestroySprite スプライト spriteIDで識別される、スプライトを、
破棄します。
1. [IN] 変数または、数値 : spriteID
  スプライトを識別するID。
ver1.0.0.1
E3DChkConfBillboard2 ビルボード 指定した境界球(中心と半径)と、全てのビルボードとのあたり判定をします。

hsidの代わりに、境界球を指定すること以外は、
E3DChkConfBillboardと同じです。

衝突したビルボードのIDが取得できます。
1. [IN] 変数または、数値 : centerx
2. [IN] 変数または、数値 : centery
3. [IN] 変数または、数値 : centerz
  境界球の中心座標( centerx, centery, centerz )
  実数。

4. [IN] 変数または、数値 : r
  境界球の半径
  実数。

5. [IN] 変数または、数値 : confrate
  ビルボードの境界球の半径に、掛ける係数(%)
  半径 × confrate
  で計算されます。
  実数。

6. [OUT] 変数 : resultptr
  あたり判定の結果が代入されます。
  当たった場合は1が、
  当たらなかった場合は0が代入されます。


7. [OUT] 変数 : confbbid
8. [IN] 変数または、数値 : arrayleng
  衝突したビルボードのIDを格納するための配列
  dim confbbid, arrayleng
  などの命令で、配列を作成して、
  この関数に指定してください。

  arrayleng個以上のビルボードと、
  同時に衝突した場合には、エラーになるので、
  配列長のarraylengは、少し大きめの値にしてください。

9. [OUT] 変数 : confnum
  衝突したビルボードの個数が代入されます。
  maxno = confnum - 1
  とすると、
  confbbid.0 から、confbbid.maxno までの間に、
  衝突したビルボードのIDが代入されます。
ver1.0.0.1
E3DChkConfBillboard ビルボード hsidで識別されるモデルデータと、全てのビルボードのあたり判定をします。

境界球による判定を行います。

当たらなかった場合は、
resultに0が代入され、
当たった場合は、
resultに1が代入されます。

confrateで、ビルボードの境界球の大きさを、変更することが出来ます。


例えば、confrateに、0.5を入れると、
 実際の半径×0.5
つまり、半分の半径で、計算されます。

confrateに小さな値を入れることで、
モデルが、ビルボードの近くを、
すり抜けることが出来るようになります。


衝突したビルボードのIDが取得できます。。

具体的な使用例は、
e3dhsp_ground.as
をご覧ください。
1. [IN] 変数または、数値 : hsid
  形状データを識別する番号

2. [IN] 変数または、数値 : confrate
  ビルボードの境界球の半径に、掛ける係数
  半径 × confrate
  で計算されます。
  実数。

3. [OUT] 変数 : result
  あたり判定の結果が代入されます。
  当たった場合は1が、
  当たらなかった場合は0が代入されます。

4. [OUT] 変数 : confbbid
5. [IN] 変数または、数値 : arrayleng
  衝突したビルボードのIDを格納するための配列
  dim confbbid, arrayleng
  などの命令で、配列を作成して、
  この関数に指定してください。

  arrayleng個以上のビルボードと、
  同時に衝突した場合には、エラーになるので、
  配列長のarraylengは、少し大きめの値にしてください。

6. [OUT] 変数 : confnum
  衝突したビルボードの個数が代入されます。
  maxno = confnum - 1
  とすると、
  confbbid.0 から、confbbid.maxno までの間に、
  衝突したビルボードのIDが代入されます。

ver1.0.0.1
E3DChkConfBySphere 当たり判定 境界球によるあたり判定を、行います。
判定の際に、E3DChkInViewでセットした、
データを使用します


conflevelに1を指定した場合は、
モデル単位の、粗い判定のみを行います。

conflevelに2を指定した場合は、
パーツ単位の判定を行います。


現在は、
任意のパーツ同士のあたり判定の出来る、
E3DChkConfBySphere2があります。

1. [IN] 変数または、数値 : hsid1
  形状データを識別するid

2. [IN] 変数または、数値 : hsid2
  形状データを識別するid

3. [IN] 変数または、数値 : conflevel
  1を指定した場合は、モデル単位の判定を、
  2を指定した場合は、パーツ単位の判定をします。

4. [OUT] 変数 : confflag
  hsid1, hsid2で識別される形状同士が、
  衝突している場合は、1が、
  衝突していない場合は0がセットされる。
ver1.0.0.1
E3DChkConfBySphere2 当たり判定 境界球によるあたり判定を、任意のパーツごとに行います。

判定の際に、E3DChkInViewでセットした、
データを使用します



partno1, partno2には、
E3DGetPartNoByNameで取得した、
パーツの番号を渡してください。

partnoに-1を指定すると、
モデル全体とあたり判定をします。

1. [IN] 変数または、数値 : hsid1
  形状データを識別するid
2. [IN] 変数または、数値 : partno1
  hsid1のモデル中のパーツの番号

3. [IN] 変数または、数値 : hsid2
  形状データを識別するid
4. [IN] 変数または、数値 : partno2
  hsid2のモデル中のパーツの番号

5. [OUT] 変数 : confflag
  hsid1, hsid2で識別される形状同士が、
  衝突している場合は、1が、
  衝突していない場合は0がセットされる。
ver1.0.0.1
E3DCreateProgressBar プログレスバー メインウインドウの下の部分に、プログレスバーを作ります。
なし ver1.0.0.1
E3DSetProgressBar プログレスバー 作業の達成率などを、
プログレスバーに表示させます。

newpos は、0から100の間の数を、
セットしてください。
1. [IN] 変数または、数値 : newpos
  0から100の値。
ver1.0.0.1
E3DDestroyProgressBar プログレスバー プログレスバーを削除します。
なし ver1.0.0.1
E3DLoadGroundBMP 地面 BMPデータから、地面を生成します。

詳しくは、地面データの作り方をご覧ください。
1. [IN] 文字列または、文字列変数 : filename1
  地面の座標情報の元となる、BMPファイル名

2. [IN] 文字列または、文字列変数 : filename2
  地面の道の情報の元となる、BMPファイル名

3. [IN] 文字列または、文字列変数 : filename3
  地面の川の情報の元となる、BMPファイル名

4. [IN] 文字列または、文字列変数 : filename4
  地面、道、川の模様を決める、BMPファイル名

5. [IN] 変数または、数値 : maxx
  地面のX座標の最大値
  実数。

6. [IN] 変数または、数値 : maxz
  地面のZ座標の最大値
  実数。

7. [IN] 変数または、数値 : divx
  X方向の分割数

8. [IN] 変数または、数値 : divz
  Z方向の分割数

9. [IN] 変数または、数値 : maxheight
  地面の高さの最大値
  実数。

10. [OUT] 変数 : hsid
  作成した地面データを識別する、ID
ver1.0.0.1
E3DCameraPosForward カメラ カメラを、向いている方向に、
stepの距離だけ、
移動させます。

stepにマイナスを与えると、
後ろに進めます。
1. [IN] 変数または、数値 : step
  進む距離を指定してください。
  実数。
ver1.0.0.1
E3DSetBeforePos モデル位置 E3DChkConfGroundで使用する座標を保存します。
一つ前の座標を保存するための命令です。
保存した値は、内部で、当たり判定命令で使用します。

メインループの最後の部分などで、
呼んでください。
一番最初のE3DPosの直後でも、
呼んでください。
1. [IN] 変数または、数値 : charahsid
  形状データを識別するid
ver1.0.0.1
E3DChkConfGround 当たり判定 groundhsidで識別される地面と、charahsidで識別されるキャラクターとのあたり判定をします。

groundhsidは、E3DLoadGroundBMP、
または、E3DLoadMQOFileAsGroundで取得したものでなければいけません。

キャラクターの現在の座標と、E3DSetBeforePosで保存された古い座標とを結ぶ線分と、
地面の各ポリゴンとのあたり判定をします。

地面の上を這うように動くためのモードと、
飛行機のように、飛ぶためのモードの
2種類あります。

這うモードの時は、毎回、adjustx,y,zに
地面の座標が返されます。
飛ぶモードの時は、地面と衝突したときに、
その座標がadjustx,y,zに返されます。

1. [IN] 変数または、数値 : charahsid
  移動する形状データを識別するid

2. [IN] 変数または、数値 : groundhsid
  E3DLoadGroundBMP、
  または、E3DLoadMQOFileAsGroundで
  作成した形状データを
  識別するid

3. [IN] 変数または、数値 : mode
  0を指定すると、飛ぶモード
  1を指定すると、地面を這うモード

4. [IN] 変数または、数値 : diffmaxy
  一度の移動で、登ることが出来る高さの最大値を
  指定してください。
  実数。

5. [IN] 変数または、数値 : mapminy
  groundhsidで識別されるデータの一番低いY座標の値
  通常は、0.0です。
  実数。

6. [OUT] 変数 : result
  あたり判定の結果が代入されます。
  
  mode == 0 のとき
    ぶつからなかった場合は、resutl = 0
    ぶつかった場合は、result = 1
  mode == 1のとき
    キャラクターの下に地面が無かった場合、
    または、全く移動しなかった場合、
    result = 0

    diffmaxyより高い高さを登ろうとしたとき、
    result = 1

    地面を下に降りたとき、
    または、diffmaxyより低い高さを登ったとき、
    result = 2

  となります。

7. [OUT] 変数 : adjustx
8. [OUT] 変数 : adjusty
9. [OUT] 変数 : adjustz
  result != 0 のときに、
    mode == 0のときは、ぶつかった座標
    mode == 1のときは、地面の座標が
    (adjustx, adjusty, adjustz)に代入されます。
  実数型の変数。


10. [OUT] 変数 : nx
11. [OUT] 変数 : ny
12. [OUT] 変数 : nz
  result != 0 のときに、
    mode == 0のときは、ぶつかったポリゴン
    mode == 1のときは、地面のポリゴンの
    法線ベクトルが、
    (nx ny, nz)に代入されます。
    
    跳ね返る方向を決めるときなどに、
    使用できるのではないかと思い、
    加えてみました。

    実数型の変数。
ver1.0.0.1
E3DChkConfGround2 当たり判定 befposとnewposを結ぶ線分と、groundhsidで識別される地面との、あたり判定をします。

線分の座標を、ユーザーが指定すること以外は、
E3DChkConfGroundと全く、同じです。
1. [IN] 変数または、数値 : befposx
2. [IN] 変数または、数値 : befposy
3. [IN] 変数または、数値 : befposz
  線分の始点を(befposx, befposy, befposz)で、
  指定します。
  実数。

4. [IN] 変数または、数値 : newposx
5. [IN] 変数または、数値 : newposy
6. [IN] 変数または、数値 : newposz
  線分の終点を(newposx, newposy, newposz)で、
  指定します。
  実数。

7. [IN] 変数または、数値 : groundhsid
  E3DLoadGroundBMP、
  または、E3DLoadMQOFileAsGroundで
  作成した形状データを
  識別するid

8. [IN] 変数または、数値 : mode
  0を指定すると、飛ぶモード
  1を指定すると、地面を這うモード

9. [IN] 変数または、数値 : diffmaxy
  一度の移動で、登ることが出来る高さの最大値を
  指定してください。
  実数。

10. [IN] 変数または、数値 : mapminy
  groundhsidで識別されるデータの一番低いY座標の値
  通常は、0.0です。
  実数。

11. [OUT] 変数 : result
  あたり判定の結果が代入されます。
  
  mode == 0 のとき
    ぶつからなかった場合は、resutl = 0
    ぶつかった場合は、result = 1
  mode == 1のとき
    キャラクターの下に地面が無かった場合、
    または、全く移動しなかった場合、
    result = 0

    diffmaxyより高い高さを登ろうとしたとき、
    result = 1

    地面を下に降りたとき、
    または、diffmaxyより低い高さを登ったとき、
    result = 2

12. [OUT] 変数 : adjustx
13. [OUT] 変数 : adjusty
14. [OUT] 変数 : adjustz
  result != 0 のときに、
    mode == 0のときは、ぶつかった座標
    mode == 1のときは、地面の座標が
    (adjustx, adjusty, adjustz)に代入されます。
  実数型の変数。


15. [OUT] 変数 : nx
16. [OUT] 変数 : ny
17. [OUT] 変数 : nz
  result != 0 のときに、
    mode == 0のときは、ぶつかったポリゴン
    mode == 1のときは、地面のポリゴンの
    法線ベクトルが、
    (nx, ny, nz)に代入されます。
    
    跳ね返る方向を決めるときなどに、
    使用できるのではないかと思い、
    加えてみました。

    実数型の変数。
ver1.0.0.1
E3DGetPartNoByName モデル情報 モデル内のパーツの名前から、パーツの番号を取得します。

取得したパーツの番号は、
E3DGetVertNumOfPart,
E3DGetVertPos
E3DSetVertPos
で使用します。

パーツの名前は、RokDeBone2で確認してください。

ver1.0.6.1以前のRokDeBone2では、
メタセコイアから読み込んだデータの、
パーツの名前には、 " が付いているので、
注意してください。

昔のファイルの場合、
例えば、名前が、"obj1" である場合、
引数partname には、
"\"obj1\""
というように、\" を使用しなくては、いけません。
( 現在のRokDeBone2で新規作成したファイルでは、
パーツ名に”は付いていません。 )


また、同じ名前のパーツが、複数ある場合、
常に、一番最初に、見つかったパーツの番号が、取得されることに、注意してください。

1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 文字列または、文字列変数 : partname
  RokDeBone2で表示される、パーツの名前。

3. [OUT] 変数 : partno
  名前がpartnameである、パーツの番号。
ver1.0.0.1
E3DGetVertNumOfPart モデル情報 partnoで識別されるパーツに、いくつの頂点が含まれるかを取得します。

E3DGetVertPos, E3DSetVertPos
に渡す、vertno は、
0 〜 (vertnum - 1) の間でなくては、なりません。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : partno
  パーツを識別する番号

3. [OUT] 変数 : vertnum
  パーツに含まれる頂点数。
ver1.0.0.1
E3DGetVertPos モデル情報 partnoで識別されるパーツ内の、頂点番号vertnoの、頂点の座標を取得します。

E3DSetPos, E3DSetDirなどの、
影響を受けていない、
ローカルな座標値が、返されます。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : partno
  パーツを識別する番号

3. [IN] 変数または、数値 : vertno
  頂点の番号

4. [OUT] 変数 : vertx
5. [OUT] 変数 : verty
6. [OUT] 変数 : vertz
  頂点の座標が(vx, vy, vz)に代入されます。
  実数型の変数。
ver1.0.0.1
E3DSetVertPos モデル情報 partnoで識別されるパーツ内の、頂点番号vertnoの、頂点の座標(ローカル座標)をセットします。


ユーザーが、座標、姿勢を、
全て、自分で管理することを想定した、
上級者向けの機能です。



例えば、目標地点に頂点座標を近づけていきたい場合などは、
E3DSetPos hsid, 0.0, 0.0, 0.0
E3DSetDir hsid, 0.0, 0.0, 0.0
でワールド変換が行われないようにした状態で、
E3DSetVertPosを使い、希望位置へ、
頂点座標をセットする。
などの、使用方法が、考えられます。


AddMotionを行った、モデルデータにも、
使用しないでください。
(使用しても、ハングしたりはしませんが、
あたり判定が、正確に行われません。)


具体的な使用例は、
zip中の、e3dhsp_vertpos.as をご覧ください。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : partno
  パーツを識別する番号

3. [IN] 変数または、数値 : vertno
  頂点の番号

4. [IN] 変数または、数値 : vertx
5. [IN] 変数または、数値 : verty
6. [IN] 変数または、数値 : vertz
  (vertx, verty, vertz )の座標を、
  指定の頂点にセットします。
  実数型の変数。
ver1.0.0.1
E3DSetPosOnGround モデル位置 E3DLoadGroundBMP、または、E3DLoadMQOFileAsGroundで作成した地面上の、適切な高さに、モデルデータを配置するための、関数です。

(posx, mapmaxy, posz)と、
(posx, mapminy, posz)を結ぶ線分と、
地面データとの交点を求めて、
その位置に、hsidのモデルデータを配置します。

交点が複数ある場合は、
(posx, mapmaxy, posz)から、一番近い交点が、選ばれます。

この命令を使う前に、少なくとも、一回は、
E3DChkInView groundid
が、呼ばれていないと、ちゃんと動作しません。
(groundid部分には、配置する地面のhsidを入れてください。)

現バージョンではgroundidは、
E3DLoadGroundBMP、
または、E3DLoadMQOFileAsGround
で取得したものしか、使用できません。
1. [IN] 変数または、数値 : hsid
  配置したい形状データを識別するid

2. [IN] 変数または、数値 : groundid
  E3DLoadGroundBMP、
  または、E3DLoadMQOFileAsGroundで
  作成した地面を識別するid

3. [IN] 変数または、数値 : mapmaxy
  地面データの高さの最大値
  実数。

4. [IN] 変数または、数値 : mapminy
  地面データの高さの最小値
  実数。

5. [IN] 変数または、数値 : posx
6. [IN] 変数または、数値 : posz
  地面の高さをYとすると、
  (posx, Y,. posz)に、hsidのモデルデータを配置します。
  実数。
ver1.0.0.1
E3DSetPosOnGroundPart モデル位置 地面パーツを指定して、地面にオブジェクトを配置します。

パーツを指定すること以外は、
E3DSetPosOnGroundと同じです。

詳しくは、E3DSetPosOnGroundの説明をお読みください。

1. [IN] 変数または、数値 : hsid
  配置したい形状データを識別するid

2. [IN] 変数または、数値 : groundid
  E3DLoadGroundBMP、
  または、E3DLoadMQOFileAsGroundで
  作成した地面を識別するid

3. [IN] 変数または、数値 : groundpart
  地面のパーツ番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  指定してください。

4. [IN] 変数または、数値 : mapmaxy
  地面データの高さの最大値
  実数。

5. [IN] 変数または、数値 : mapminy
  地面データの高さの最小値
  実数。

6. [IN] 変数または、数値 : posx
7. [IN] 変数または、数値 : posz
  地面の高さをYとすると、
  (posx, Y,. posz)に、hsidのモデルデータを配置します。
  実数。
ver1.0.0.1
E3DCreateBillboard ビルボード ビルボードを作成します。

1500個まで、ビルボードを作ることが出来ます。


billboardidに、作成したビルボードを識別する
番号が、代入されます。

billboardidは、
E3DSetBillboardPos,
E3DSetBillboardOnGround,
E3DDestroyBillboard,
E3DChkConfBillboard
の関数で、使用します。

billboardidは、hsidとは、全く異なるものなので、E3DSetPosなどの、hsidを使用する関数には、使えません。

E3DCreateBillboardでは、
transparentflagに、1をセットすれば、
黒色を透過色として、扱えます。
1. [IN] 文字列または、文字列変数 : filename
  ビルボードに貼り付けるテクスチャーのファイル名

2. [IN] 変数または、数値 : width
  ビルボードの幅。
  実数。

3. [IN] 変数または、数値 : height
  ビルボードの高さ。
  実数。

4. [IN] 変数または、数値 : transparentflag
  1を指定すると、
  テクスチャーの黒色(r = 0, g=0, b=0)を透過色として、
  扱います。
  
  0を指定すると、
  テクスチャーファイルの、
  アルファ値を元に、透過します。

5. [OUT] 変数 : billboardid
  作成したビルボードを識別する番号が、代入されます。

6. [IN] 変数または、数値 : dirmode
  dirmodeに0を指定すると、
  ビルボードは、Y軸に関してのみ、回転します。
  地面に立っている木などに使用してください。

  dirmodeの1を指定すると、
  ビルボードは、全方向に回転します。
  カメラの高さにかかわらず、カメラの方向を向かせたいもの
  例えば、火や煙などに、使用してください。

7. [IN] 変数または、数値 : orgflag
  ビルボードの原点の位置を指定します。

  orgflagに0を指定すると、
  原点は、ビルボードの四角形の下の辺の中心になります。
  地面に生やす木などの場合に、便利です。

  orgflagに1を指定すると、
  原点は、ビルボードの中心になります。
  爆発などの、特殊効果に使う場合に、便利です。
ver1.0.0.1
E3DRenderBillboard ビルボード E3DCreateBillboard
で作成されたビルボード全てを、
描画します。

各ビルボードは、
視線の方向を向くようにセットされます。

また、
視点から、遠い方から順番に、描画されます。
1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。
ver1.0.0.1
E3DSetBillboardPos ビルボード billboardidで識別されるビルボードの、位置を指定します。
1. [IN] 変数または、数値 : billboardid
  ビルボードを識別する番号

2. [IN] 変数または、数値 : posx
3. [IN] 変数または、数値 : posy
4. [IN] 変数または、数値 : posz
  ビルボードの位置を、(posx, posy, posz)
  にセットします。
  実数。
ver1.0.0.1
E3DSetBillboardOnGround ビルボード billboardidで識別されるビルボードの、位置を、指定したXZ座標の、地面の高さにセットします。

この命令を使う前に、少なくとも、一回は、
E3DChkInView groundid
が呼ばれている必要があります。

(groundid部分には、配置する地面のhsidを入れてください。)

現バージョンではgroundidは、
E3DLoadGroundBMP、
または、E3DLoadMQOFileAsGround
で取得したものしか、使用できません。
1. [IN] 変数または、数値 : billboardid
  ビルボードを識別する番号

2. [IN] 変数または、数値 : groundid
  groundidで識別される地面の上に、
  ビルボードが配置されます。

3. [IN] 変数または、数値 : mapmaxy
  地面データの一番大きなY座標
  実数。

4. [IN] 変数または、数値 : mapminy
  地面データの一番小さなY座標
  (通常0.0)
  実数。

5. [IN] 変数または、数値 : posx
6. [IN] 変数または、数値 : posz
  (posx, mapmaxy, posz)と、(posx, mapminy, posz)
  と地面データとの交点を求めて、
  地面上の適切な高さに、ビルボードを配置します。
  実数。
ver1.0.0.1
E3DDestroyBillboard ビルボード billboardidで識別されるビルボードを、削除します。

1. [IN] 変数または、数値 : billboardid
  ビルボードを識別する番号
ver1.0.0.1
E3DLoadMQOFileAsGround 地面 mqo ファイルを地面データとして、読み込みます。
地面データを識別するidが、戻り値となります。
取得したid は、E3DChkConfGroundなどの関数で、使用できます。
1. [IN] 文字列または、文字列変数 : filename
  読み込む、mqo ファイル名。

2. [IN] 変数または、数値 : mult
  形状データの座標に掛ける数値。
  座標値 * mult で計算されます。
  等倍は1.0
  実数。

3. [OUT] 変数 : hsid
  作成した地面を識別するhsidが代入されます。

4. [IN] 変数または、数値 : adjustuvflag
  UV座標を正規化したいときは1を、
  そうでないときは、0を指定してください。
  何も指定しないときは、0として扱われます。

ver1.0.0.1
E3DSaveMQOFile モデルデータ hsidで指定したモデルのデータを、mqoの形式で出力します。

地面データの出力などに、使用してください。
1. [IN] 変数または、数値 : hsid
  出力するモデルのhsid

2. [IN] 文字列または、文字列変数 : filename
  出力するファイル名
ver1.0.0.1
E3DGetBillboardInfo ビルボード 指定した番号の、ビルボード情報を、取得します。

ビルボードの番号には、
E3DCreateBillboardで取得した番号を、
指定してください。
 
texname には、256以上の大きさの
バッファを指定
してください。
例えば、
  sdim texname, 256, 1
などで、確保した変数を、
指定してください。
1. [IN] 変数または、数値 : billboardid
  情報を取得したいビルボードの番号。
  E3DCreateBillboardで取得した番号を
  指定してください。

2. [OUT] 変数 : posx
3. [OUT] 変数 : posy
4. [OUT] 変数 : posz
  ビルボードの座標が、
  (posx, posy, posz)に代入されます。
  実数型の変数。

5. [OUT] 変数 : texname
  ビルボードの、テクスチャファイル名が、
  代入されます。
  texname には、256以上の大きさのバッファを
  指定してください。
  例えば、sdim texname, 256, 1
  などで、確保した変数を、指定してください。

6. [OUT] 変数 : transparent
  ビルボードの、透過モードが、代入されます。
  transparent == 0 のときは、
  ビルボードは、
  テクスチャファイルのアルファ情報によって、
  透過されます。
  transparent == 1 のときは、
  ビルボードは、
  (R, G, B) == (0, 0, 0)を透過色として、処理されます。

7. [OUT] 変数 : width
  ビルボードの幅が、代入されます。
  実数型の変数。

8. [OUT] 変数 : height
  ビルボードの高さが、代入されます。
  実数型の変数。
ver1.0.0.1
E3DGetNearBillboard ビルボード 指定した座標に、一番近いビルボードのIDを取得します。

maxdist で指定した、距離より、遠いビルボードしか存在しない場合は、
IDに、-1 が代入されます。
1. [IN] 変数または、数値 : posx
2. [IN] 変数または、数値 : posy
3. [IN] 変数または、数値 : posz
  位置座標を、(posx, posy, posz)で指定します。
  実数。

4. [IN] 変数または、数値 : maxdist
  maxdistで、指定した距離より、
  遠いビルボードしかない場合は、
  nearbbidに-1が代入されます。
  実数。

5. [OUT] 変数 : nearbbid
  (posx, posy, posz) に一番近く、
  maxdistより近いビルボードのIDを代入します。
  存在しない場合は、-1を代入します。
ver1.0.0.1
E3DGetInvisibleFlag モデル情報 hsidで識別されるモデルの、partnoのパーツのInvisibleFlag(見えないフラグ)を取得します。

InvisibleFlagが、1になっているパーツは、あたり判定は、行われますが、
表示はされません。

進入禁止区域との、境目に置く、見えないオブジェクトとして、使用することなどが、
考えられます。

partno には、E3DGetPartNoByNameで取得した番号を指定してください。

また、hsidに負の値を渡し、partnoに、ビルボードのid を渡すと、
ビルボードのInvisibleFlag を取得することが出来ます。
1. [IN] 変数または、数値 : hsid
  形状データを識別するID
  ビルボードのInvisibleFlagを取得する場合は、負の値  を渡してください。

2. [IN] 変数または、数値 : partno
  パーツの番号。
  E3DGetPartNoByNameで取得した番号、
  または、ビルボードのID。

3. [OUT] 変数 : flag
  指定したパーツのInvisibleFlag が代入されます。
ver1.0.0.1
E3DSetInvisibleFlag モデル情報 hsidで識別されるモデルの、partnoのパーツのInvisibleFlag(見えないフラグ)をセットします。

partno には、E3DGetPartNoByNameで取得した番号を指定してください。

また、hsidに負の値を渡し、partnoに、ビルボードのid を渡すと、
ビルボードのInvisibleFlag をセットすることが出来ます。

InvisibleFlag == 0 のとき可視状態(デフォルト)で、
InvisibleFlag == 1 のとき、表示されず、あたり判定だけとなります。
1. [IN] 変数または、数値 : hsid
  形状データを識別するID
  ビルボードのInvisibleFlagを取得する場合は、
  負の値を渡してください。

2. [IN] 変数または、数値 : partno
  パーツの番号。
  E3DGetPartNoByNameで取得した番号、
  または、ビルボードのID。

3. [IN] 変数または、数値 : flag
  指定したパーツのInvisibleFlag をセットします。
ver1.0.0.1
E3DSetMovableArea 移動可能領域を、BMPファイルから、自動生成します。
(色の付いた部分と、付いていない部分の
境界部分に、地面に垂直な、非表示の壁ポリゴンを生成します。)

E3DChkConfWall 命令と併用すれば、
BMPで、濃い色を付けた部分のみ、移動できるようになります。

具体的な使用例は、zip中の、
e3dhsp_wall.as をご覧ください。


メタセコイアデータで、
壁データを作りたい場合は、
メタセコイアのプラグイン、MakeWallをご使用ください。
(おちゃっこLABのトップページにリンクがあります。)
1. [IN] 文字列または、文字列変数 : filename1
  壁の座標情報の元となる、BMPファイル名

2. [IN] 変数または、数値 : maxx
  壁のX座標の最大値
  実数。

3. [IN] 変数または、数値 : maxz
  壁のZ座標の最大値
  実数。

4. [IN] 変数または、数値 : divx
  X方向の分割数

5. [IN] 変数または、数値 : divz
  Z方向の分割数

6. [IN] 変数または、数値 : wallheight
  作成する壁の高さ
  実数。

7. [OUT] 変数 : hsid
  作成した壁データを識別する、ID
ver1.0.0.1
E3DChkConfWall 当たり判定 E3DSetMovableArea, または、E3DLoadMQOFileAsMovableAreaで、作成した、壁データと、キャラクターのあたり判定を行います。

キャラクターの現在の座標と、E3DSetBeforePosで保存された古い座標とを結ぶ線分と、
壁の各ポリゴンとのあたり判定をします。

壁に沿って、位置を移動するために、
使用します。

壁の外側から、内側へは、移動できますが、内側から外側へは、移動できないようにします。

具体的な使用例は、zip中の、
e3dhsp_wall.as をご覧ください。

1. [IN] 変数または、数値 : charahsid
  移動する形状データを識別するid

2. [IN] 変数または、数値 : groundhsid
  E3DSetMovableArea、
  または、E3DLoadMQOFileAsMovableAreaで
  作成した形状データを
  識別するid

3. [IN] 変数または、数値 : dist
  跳ね返る距離。
  distに大きな値を入れると、
  ぶつかった際に、大きく、跳ね返るようになります。
  実数。

4. [OUT] 変数 : result
  あたり判定の結果が代入されます。
  壁とぶつかった場合は、1が、
  ぶつからなかった場合は、0が、代入されます。

5. [OUT] 変数 : adjustx
6. [OUT] 変数 : adjusty
7. [OUT] 変数 : adjustz
  result != 0 のときに、
  修正後の座標が、
  (adjustx, adjusty, adjustz)に代入されます。
  実数型の変数。

8. [OUT] 変数 : nx
9. [OUT] 変数 : ny
10. [OUT] 変数 : nz
  result != 0 のときに、
  ぶつかった面の法線ベクトルの値が、
  代入されます。
  実数型の変数。
ver1.0.0.1
E3DChkConfWall2 当たり判定 E3DSetMovableArea, または、E3DLoadMQOFileAsMovableAreaで、作成した、壁データと、キャラクターのあたり判定を行います。

befposで指定した座標と、
newposで指定した座標を結ぶ線分と、
壁の各ポリゴンとのあたり判定をします。

壁に沿って、位置を移動するために、
使用します。

壁の外側から、内側へは、移動できますが、内側から外側へは、移動できないようにします。

1. [IN] 変数または、数値 : befposx
2. [IN] 変数または、数値 : befposy
3. [IN] 変数または、数値 : befposz
  線分の始点を(befposx, befposy, befposz)で、
  指定します。
  実数。

4. [IN] 変数または、数値 : newposx
5. [IN] 変数または、数値 : newposy
6. [IN] 変数または、数値 : newposz
  線分の終点を(newposx, newposy, newposz)で、
  指定します。
  実数。

7. [IN] 変数または、数値 : groundhsid
  E3DSetMovableArea、
  または、E3DLoadMQOFileAsMovableAreaで
  作成した形状データを
  識別するid

8. [IN] 変数または、数値 : dist
  壁からの距離の最小値。
  distに大きな値を入れると、
  ぶつかった際に、大きく、跳ね返るようになります。
  実数。

9. [OUT] 変数 : result
  あたり判定の結果が代入されます。
  壁とぶつかった場合は、1が、
  ぶつからなかった場合は、0が、代入されます。

10. [OUT] 変数 : adjustx
11. [OUT] 変数 : adjusty
12. [OUT] 変数 : adjustz
  result != 0 のときに、
  修正後の座標が、
  (adjustx, adjusty, adjustz)に代入されます。
  実数型の変数。


13. [OUT] 変数 : nx10000
14. [OUT] 変数 : ny10000
15. [OUT] 変数 : nz10000
  result != 0 のときに、
  ぶつかった面の法線ベクトルの値が、
  代入されます。
  実数型の変数。
ver1.0.0.1
E3DVec3Normalize 算術 指定したベクトルを、正規化た値を取得します。

つまり、指定したベクトルの向きを持つ、
大きさ1のベクトルが、取得できます。
1. [IN] 変数または、数値 : vecx
2. [IN] 変数または、数値 : vecy
3. [IN] 変数または、数値 : vecz
  ベクトルを、(vecx, vecy, vecz)で指定します。
  実数。

4. [OUT] 変数 : newvecx
5. [OUT] 変数 : newvecy
6. [OUT] 変数 : newvecz
  向きが(vecx, vecy, vecz)で、
  大きさが1な、ベクトルを、
  (newvecx, newvecy, newvecz)に代入します。
  実数型の変数。
ver1.0.0.1
E3DVec2CCW 算術 vec2 がvec1 に対して、反時計回りの時、
resultに、1を代入し、
時計回りの時、
resultに、-1を代入する。
1. [IN] 変数または、数値 : vecx1
2. [IN] 変数または、数値 : vecy1
  vec1( vecx1, vecy1 )を指定する。
  実数。

3. [IN] 変数または、数値 : vecx2
4. [IN] 変数または、数値 : vecy2
  vec2( vecx2, vecy2 )を指定する。
  実数。

5. [OUT] 変数 : result
  vec2 がvec1 に対して、反時計回りの時、
  resultに、1を代入し、
  時計回りの時、
  resultに、-1を代入する。
ver1.0.0.1
E3DVec3RotateY 算術 ベクトルbefvecを、Y軸に関して、degy 度だけ回転したベクトルnewvec を取得します。
1. [IN] 変数または、数値 : befvecx
2. [IN] 変数または、数値 : befvecy
3. [IN] 変数または、数値 : befvecz
  回転したいベクトルを、
  (befvecx, befvecy, befvecz)で指定します。
  実数。

4. [IN] 変数または、数値 : degy
  回転角度を指定します。
  degy の角度だけ回転します。
  実数。  

5. [OUT] 変数 : newvecx
6. [OUT] 変数 : newvecy
7. [OUT] 変数 : newvecz
  回転後のベクトルが、
  (newvecx, newvecy, newvecz)に代入されます。
  実数型の変数。
ver1.0.0.1
E3DLoadMQOFileAsMovableArea メタセコイアの、MQOファイルで作成した壁のデータを、移動可能領域情報として、読み込みます。

メタセコイアで、データを作る場合には、次の2点に気を付けてください。

1.壁データは、常に、移動可能領域の内側を向くように、面の向きを設定してください。両面ポリゴンは、不可です。

2.壁データは、少しの隙間もないように、
作成してください。


自動的に壁データを作りたい場合は、
メタセコイアのプラグイン、MakeWallをご使用ください。
(おちゃっこLABのトップページにリンクがあります。)

1. [IN] 文字列または、文字列変数 : filename
  読み込む、mqo ファイル名。

2. [IN] 変数または、数値 : mult
  形状データの座標に掛ける係数の数値。
  座標値 * mult で計算されます。
  等倍は1.0
  実数。

3. [OUT] 変数 : hsid
  作成した壁データを識別するhsidが代入されます。
ver1.0.0.1
E3DLoadSound サウンド 音のデータを読み込み、音を識別する番号、soundid、を取得します。

ver1.0.5.0から3Dサウンドに対応できるように
なりました。
use3dflagに1を指定すると、
3Dサウンドとしてロードします。


読み込める音データの種類は、
*.wav, *.mid, *.sgt ファイルです。
3Dサウンドは、wavファイルのモノラル形式のみです。


3Dサウンドの設定については、
E3DSet3DSoundで始まる関数名を
お調べください。


同じIDの、3Dサウンドを同時にいくつ
重ねて再生できるかはbufnum引数で指定します。

実際の使用例は、zip中の、
e3dhsp_sound.as
をご覧ください。

3Dサウンドの使用例は、
e3dhsp_3Dsound.as
をご覧ください。
1. [IN] 文字列または、文字列変数 : filename
  読み込む、サウンド ファイル名。

2. [OUT] 変数 : soundid
  作成した音データを識別する番号が代入されます。

3. [IN] 変数または、数値 : use3dflag
  ファイルをステレオサウンドとして読み込む場合は0を、
  3Dサウンドとして読み込む場合は1を指定してください。
  指定しなかった場合は、ステレオサウンドと見なされます。

4. [IN] 変数または、数値 : bufnum
  同じIDの、3Dサウンドを、同時にいくつ重ねて再生できるかを
  指定します。

  3Dサウンドではない場合は、
  今まで通り、DirectMusicが、自動的に、
  重ねて再生してくれます。
ver1.0.0.1
E3DPlaySound サウンド E3DLoadSoundで、読み込んだ、音データを再生します。

isprimary 引数には、
BGM再生時に、1を、
効果音再生時に0を指定してください。


boundaryflagには、再生境界を指定します。
e3dhsp.as内で定義している、
DMUS_SEGF_ で始まる定数を指定してください。

それぞれの意味は、以下の通りです。

DMUS_SEGF_BEAT
  拍の境界で演奏する。

DMUS_SEGF_DEFAULT
  セグメントのデフォルトの境界を使用する。

DMUS_SEGF_GRID
  グリッド(拍の小分割)境界で演奏する。

DMUS_SEGF_MEASURE
  小節境界で演奏する。

DMUS_SEGF_QUEUE
  プライマリ セグメント キューの最後に置く。
  プライマリ セグメントに対してのみ
  有効である。

DMUS_SEGF_SEGMENTEND
  開始タイムで演奏中のプライマリ セグメント
  の最後で演奏する。
  現在演奏中のプライマリ セグメント後に
  既に挿入されているセグメントは、
  フラッシュ (解放) される。


3Dサウンドの再生時には、
isprimary, boundaryflagを指定しても反映されません。
1. [IN] 変数または、数値 : soundid
  再生したい音を識別する番号を、指定します。

2. [IN] 変数または、数値 : isprimary
  isprimaryに1を指定すると、
  プライマリセグメントとして再生されます。
  プライマリセグメントは、一度に、一つだけ、
  再生できます。

  isprimaryに0を指定すると、
  セカンダリセグメントとして、再生されます。
  プライマリセグメントに、重ねて、再生されます。

  BGMを再生するときには、
  isprimaryを1に、
  効果音を再生するときには、
  isprimaryを0に、
  指定すると、うまくいきます。

3. [IN] 変数または、数値 : boundaryflag
  右の説明をお読みください。
ver1.0.0.1
E3DStopSound サウンド 音の再生を停止します。
1. [IN] 変数または、数値 : soundid
  停止したい音を識別する番号を、指定します。


2. [IN] 変数または、数値 : flag

  3Dサウンドの停止状態を指定します。

  flagに0を指定すると、E3DStopSoundした後に、
  E3DPlaySoundした場合、停止した続きの場所から
  再生されます。

  flagに1を指定すると、次にE3DPlaySoundした場合、
  最初から再生されます。

  デフォルトでは、flag 0 を指定したのと同じ状態になっています。

  3Dサウンド以外は、常に、次回のE3DPlaySound時に、
  最初から再生されます。
ver1.0.0.1
E3DSetSoundLoop サウンド 音を繰り返し再生するかどうかを、指定します。
デフォルトでは、
繰り返さない状態になっています。
1. [IN] 変数または、数値 : soundid
  ループ設定したい音を識別する番号を、指定します。

2. [IN] 変数または、数値 : loopflag
  loopflag に1を指定すると、
  音を、無限回、再生するようになります。
  loopflagに0を指定すると、
  一回のみ、音を再生するようになります。
ver1.0.0.1
E3DSetSoundVolume サウンド 音の音量を設定します。

3Dサウンドは、
音ごとに音量の設定が出来ます。
その代わり、音の増幅は出来ません。
3Dサウンドは、音量の設定をしても、
次のE3DPlaySound時まで、反映されません。


ステレオサウンドは、
個々に音量の設定をすることはできません。

1. [IN] 変数または、数値 : volume
  音量を指定します。
  0 から -10000 の値を指定してください。

  -10000 は、-100dB に相当します。

2. [IN] 変数または、数値 : soundid
  設定したい音を識別する番号を指定します。
  -1を指定すると、全ての音の音量を設定できます。
  何も設定しなかった場合は、-1と見なされます。
ver1.0.0.1
E3DSetSoundTempo サウンド 音のテンポを設定します。
E3DPlaySoundで、再生している、
全ての音に、影響します。
(音ごとに設定することは、出来ません)

音を早く再生したり、遅く再生したり、出来るようになります。

3Dサウンドには、反映されません。
1. [IN] 変数または、数値 : tempo
  テンポを指定します。

  tempo には、0.01 から 100.0 の値を
  指定してください。

  0.01を指定した場合は、
  0.01 倍のテンポ、
  つまり、おそーく、再生されます。

  100.0を指定した場合は、
  100 倍のテンポ、
  つまり、すごく早く再生されます。

  1.0を指定した場合は、
  1 倍のテンポ、
  つまり、通常の、速さで、再生されます。
ver1.0.0.1
E3DDestroySound サウンド 読み込んだ音データを破棄します。
破棄した音は、その後、操作することは出来ません。
ただ、再生を終了させる場合は、
E3DStopSound関数を使用してくださ
1. [IN] 変数または、数値 : soundid
  破棄したい音を識別する番号
ver1.0.0.1
E3DSetSoundFrequency サウンド 音の周波数を設定します。

3Dサウンドに周波数を設定しても、
次回のE3DPlaySound時まで、反映されません。
1. [IN] 変数または、数値 : soundid
  設定したい音を識別する番号

2. [IN] 変数または、数値 : freq
  周波数を指定します。
ver1.0.0.1
E3DGetSoundVolume サウンド 現在の音量を取得します。 1. [IN] 変数または、数値 : soundid
  音を識別する番号

2. [OUT] 変数 : vol
  音量が代入されます。
ver1.0.0.1
E3DGetSoundFrequency サウンド 現在の周波数を取得します。 1. [IN] 変数または、数値 : soundid
  音を識別する番号

2. [OUT] 変数 : freq
  周波数が代入されます。
ver1.0.0.1
E3DSet3DSoundListener サウンド 3Dサウンド再生時に関係するリスナー(聞き手)の
パラメータを設定します。
ここで設定したパラメータは、3Dサウンド全体に影響します。


ここで設定する係数は、
DirectXのドキュメントに詳しく書いてあります。
お持ちの方は、

[DirectX9ドキュメント]->  
  [DirectSound]->
  [DirectSoundの使い方]->
  [3Dサウンド]->
  [DirectSound の3D リスナー]->
  [ドップラー効果]

[DirectX9ドキュメント]->  
  [DirectSound]->
  [DirectSoundの使い方]->
  [3Dサウンド]->
  [DirectSound の3D リスナー]->
  [ロールオフ係数]

をお読みください。


3Dサウンドの使用例は、
e3dhsp_3Dsound.as
をご覧ください。
1. [IN] 変数または、数値 : doppler
  ドップラー係数を指定してください。
  0.0から10.0の値が有効です。

  0.0を指定すると、ドップラー効果なし。
  2.0を指定すると、実世界の2倍のドップラー効果が得られます。
  実数。

2. [IN] 変数または、数値 : rolloff
  ロールオフ係数を指定してください。
  リスナーと音の距離による減衰の具合を操作できます。
  0.0から10.0の値が有効です。

  0.0を指定すると、減衰なし。
  2.0を指定すると、実世界の2倍の減衰効果が得られます。
  実数。
ver1.0.0.1
E3DSet3DSoundListenerMovement サウンド リスナーの位置と向きを設定します。

hsidにモデルデータの番号を渡した場合には、
そのモデルデータの位置と向きが、
リスナーの位置と向きとして設定されます。

hsidに-1を渡した場合には、
視点の位置と向きが、
リスナーの位置と向きとして設定されます。

一回呼び出せば、ずっと、hsidの更新情報を
リスナーに反映させるわけではありません

情報の更新が必要になるたびに、
呼び出してください。


1. [IN] 変数または、数値 : hsid
  モデルデータを識別する番号
  -1のときは、視点をリスナーとします。
ver1.0.0.1
E3DSet3DSoundDistance サウンド 3Dサウンドの最小距離と最大距離を設定します。

E3DLoadSoundのuse3dflagに1を指定して
読み込んだサウンドのみに対し、有効です。


ここで設定する係数は、
DirectXのドキュメントに詳しく書いてあります。
お持ちの方は、

[DirectX9ドキュメント]->
  [DirectSound]->
  [DirectSoundの使い方]->
  [3Dサウンド]->
  [DirectSound 3D のバッファ]->
  [最小距離と最大距離]

をお読みください。


3Dサウンドの使用例は、
e3dhsp_3Dsound.as
をご覧ください。
1. [IN] 変数または、数値 : soundid
  3Dサウンドを識別する番号

2. [IN] 変数または、数値 : min
3. [IN] 変数または、数値 : max
  最小距離と最大距離を指定します。
  実数。

  以下は、DirectXのドキュメントからの引用です。

  リスナーが音源に近づくにつれてサウンドが大きくなり、
  距離が半分になったときに音のボリュームは倍増する。
  しかし、特定の点を過ぎると、ボリュームが増加し続けるのは
  合理的ではない。これが音源の最小距離である。

  音源の最大距離とは、
  それ以上離れても音がより小さくならない距離を意味する。

ver1.0.0.1
E3DSet3DSoundMovement サウンド 3Dサウンドの位置と速度を設定します。

E3DLoadSoundのuse3dflagに1を指定して
読み込んだサウンドのみに対し、有効です。


3Dサウンドの使用例は、
e3dhsp_3Dsound.as
をご覧ください。
1. [IN] 変数または、数値 : soundid
  3Dサウンドを識別する番号

2. [IN] 変数または、数値 : posx
3. [IN] 変数または、数値 : posy
4. [IN] 変数または、数値 : posz
  3Dサウンドの位置を(posx, posy, posz)で指定します。
  実数。

5. [IN] 変数または、数値 : vx
6. [IN] 変数または、数値 : vy
7. [IN] 変数または、数値 : vz
  3Dサウンドの速度を(vx, vy, vz)で指定します。
  実数。
ver1.0.0.1
E3DCreateNaviLine ナビライン ナビラインを作成します。

ナビラインとは、複数のナビポイントからなる、双方向リンクリストのことです。

ナビポイントとは、キャラクターの自動走行時に、位置を決める基準となるポイントのことです。

この関数が成功すると、
ナビラインを識別するためのID、nlidが得られます。

失敗すると、nlidに負の値が代入されます。
1. [OUT] 変数 : nlid
  作成したナビラインを識別するためのIDが
  代入されます。
ver1.0.0.1
E3DDestroyNaviLine ナビライン ナビラインを削除します。 1. [IN] 数値または、変数 : nlid
  削除するラインを識別するID
ver1.0.0.1
E3DAddNaviPoint ナビライン ナビラインに、ナビポイントを追加します。

成功すると、新しいナビポイントを識別するためのID、npid が得られます。

befnpidで指定したポイントの次の位置に、
追加できる他、
先頭位置や、最後の位置にも追加することができます。


ナビポイントの編集には、
GViewer.exeを使うと便利です。
(おちゃっこLABでDL可能です。)
1. [IN] 数値または、変数 : nlid
  ラインを識別するID

2. [IN] 数値または、変数 : befnpid
  befnpidで指定したポイントの次の位置に、
  新しいポイントを追加します。

  befnpidに-1を指定すると、
  ナビラインの最後に追加され、
  befnpidに-2を指定すると、
  ナビラインの先頭に追加されます。

3. [OUT] 変数 : npid
  新しく追加したナビポイントのIDが代入されます。
ver1.0.0.1
E3DRemoveNaviPoint ナビライン ナビラインから、ナビポイントを削除します。 1. [IN] 数値または、変数 : nlid
  ラインを識別するID

2. [IN] 数値または、変数 : npid
  削除したいナビポイントのID
ver1.0.0.1
E3DGetNaviPointPos ナビライン ナビポイントの座標を取得します。 1. [IN] 数値または、変数 : nlid
  ラインを識別するID

2. [IN] 数値または、変数 : npid
  ナビポイントを識別するID

3. [OUT] 変数 : posx
4. [OUT] 変数 : poxy
5. [OUT] 変数 : posz
  ナビポイントの座標が、
  (posx, posy, poz)に、代入されます。
  実数型の変数。
ver1.0.0.1
E3DSetNaviPointPos ナビライン ナビポイントの座標をセットします。
この座標をもとに、
キャラクターが移動することになります。
1. [IN] 数値または、変数 : nlid
  ラインを識別するID

2. [IN] 数値または、変数 : npid
  ナビポイントを識別するID

3. [IN] 数値または、変数 : posx
4. [IN] 数値または、変数 : poxy
5. [IN] 数値または、変数 : posz
  ナビポイントの座標を
  (posx, posy, posz)に設定します。
  実数。
ver1.0.0.1
E3DGetNaviPointOwnerID ナビライン ナビポイントのOwnerIDを取得します。   ラインを識別するID

2. [IN] 数値または、変数 : npid
  ナビポイントを識別するID

3. [OUT] 変数 : OwnerID
  ナビポイントのOwnerIDが代入されます。
ver1.0.0.1
E3DSetNaviPointOwnerID ナビライン ナビポイントのOwnerIDをセットします。

ナビポイントに、
排他的な、所有権を設定したいときなどに、
自由に、使用してください。
1. [IN] 数値または、変数 : nlid
  ラインを識別するID

2. [IN] 数値または、変数 : npid
  ナビポイントを識別するID

3. [IN] 変数 : OwnerID
  ナビポイントのOwnerIDに設定します。
ver1.0.0.1
E3DGetNextNaviPoint ナビライン npidで指定したナビポイントの、一つ後のナビポイントのIDを取得します。

ナビラインは、ナビポイントを、双方向リストで、格納しています。


一つ後のナビポイントが存在しない場合は、nextid には、負の値が代入されます。
1. [IN] 数値または、変数 : nlid
  ラインを識別するID

2. [IN] 数値または、変数 : npid
  ナビポイントを識別するID

3. [OUT] 変数 : nextid
  一つ後のナビポイントのIDが代入されます。

  npid に-1が指定されている場合は、
  nextidには、先頭のナビポイントのIDが代入されます
  
ver1.0.0.1
E3DGetPrevNaviPoint ナビライン npidで指定したナビポイントの、一つ前のナビポイントのIDを取得します。


ナビラインは、ナビポイントを、双方向リストで、格納しています。


一つ前のナビポイントが存在しない場合は、previd には、負の値が代入されます。
1. [IN] 数値または、変数 : nlid
  ラインを識別するID

2. [IN] 数値または、変数 : npid
  ナビポイントを識別するID

3. [OUT] 変数 : previd
  一つ後のナビポイントのIDが代入されます。
ver1.0.0.1
E3DGetNearestNaviPoint ナビライン 指定した座標に、一番近いナビポイントのIDを取得します。

一番近いナビポイントの前後のポイントの
IDも取得できます。
1. [IN] 数値または、変数 : nlid
  ラインを識別するID

2. [IN] 数値または、変数 : posx
3. [IN] 数値または、変数 : posy
4. [IN] 数値または、変数 : posz
  (posx, posy, posz)に一番近いナビポイントを
  探します。
  実数。

5. [OUT] 変数 : nearid
  一番近いナビポイントのIDが代入されます。

6. [OUT] 変数 : previd
  一番近いナビポイントの前のポイントのIDが
  代入されます。

7. [OUT] 変数 : nextid
  一番近いナビポイントの次のポイントのIDが
  代入されます。
ver1.0.0.1
E3DFillUpNaviLine ナビライン ナビポイントとナビポイントの間を、指定した分割数で、補間します。

Catmull-Romの公式で、補間します。
1. [IN] 数値または、変数 : nlid
  ラインを識別するID

2. [IN] 数値または、変数 : div
  何分割して補間するかを指定します。

3. [IN] 数値または、変数 : flag
  flagに1を指定すると、
  チェインの順番にナビポイントのIDをふり直します。
ver1.0.0.1
E3DSetNaviLineOnGround ナビライン ナビライン中の全てのナビポイントの座標を、地面の高さに設定します。
1. [IN] 数値または、変数 : nlid
  ラインを識別するID

2. [IN] 数値または、変数 : grounhdis
  地面を識別するhsid

3. [IN] 数値または、変数 : mapmaxy
  地面データのY座標の最大値を指定します。
  実数。

4. [IN] 数値または、変数 : mapminy
  地面データのY座標の最小値を指定します。
  実際の最小値より、少し小さな値を入れてください。
  実数。
ver1.0.0.1
E3DControlByNaviLine ナビライン ナビラインのデータを元に、キャラクターの位置と、向きを、自動的に設定するための関数です。

引数の、モードなどのパラメータを、
色々変化させることで、
一つのナビラインから、複数の(数え切れないくらいの)走行パターンを得ることが、
可能です。



具体的な使用例は、zip中の、
e3dhsp_autorun.as
をご覧ください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : nlid
  ラインを識別するID

3. [IN] 数値または、変数 : ctrlmode
  ビットの和で、モードを指定します。

  ビット1が立っていた場合には、
   位置を優先した制御が行われます。
   引数maxdist, dirstep は無視されます。
   出来るだけ、ナビポイントの近くを通るように
   なります。

  ビット1が立っていない場合には、
   向きを優先した制御が行われます。
   dirstepで指定した角度より大きな角度では、
   移動できなくなります。
   ただし、そのままだと、キャラクターが、
   ナビラインから、遠くに離れすぎてしまうので、
   引数maxdistで、ナビラインからどのくらい離れても
   良いかを指定します。
   maxdistよりも、遠くに離れた場合には、
   dirstepで指定したよりも、大きな角度で、
   ナビラインに近づくように修正されます。
   
   なので、dirstepに小さな値を指定すると、
   ジグザグにナビラインをたどるようになります。

  ビット4が立っていた場合には、
   向きの設定は、XZ平面のみで行われます。

  例えば、ctrlmode に5を指定した場合は、
  位置を優先した制御で、XZ平面での向き設定をする
  ということになります。

4. [IN] 数値または、変数 : roundflag
  ナビラインの最後のナビポイントに移動した後、
  ナビラインの最初のナビポイントの位置を
  目指すかどうかを示します。

  1を指定すると、円形のナビラインの場合は、
  ずっと、ぐるぐる回ることになります。

5. [IN] 数値または、変数 : reverseflag
  1を指定すると、
  ナビラインのポイントを逆順にたどるようになります。

6. [IN] 数値または、変数 : maxdist
  ナビラインから、どのくらいまで離れても良いかを
  指定します。
  ctrlmodeのビット1が立っていない場合のみ有効です。
  実数。

7. [IN] 数値または、変数 : posstep
  キャラクターを一度にどれくらいの距離を移動させるかを
  指定します。
  ただし、ナビポイント付近では、
  posstepより小さな距離しか移動させないことがあります。
  実数。

8. [IN] 数値または、変数 : dirstep
  一度の移動で、最大何度まで回転できるかを
  指定します。
  回転角度の値を渡してください。
  実数。

9. [OUT] 変数 : newposx
10. [OUT] 変数 : newposy
11. [OUT] 変数 : newposz
  移動後の座標が(newposx, newposy, newposz)に
  代入されます。
  実数。

12. [OUT] 変数 : newqx
13. [OUT] 変数 : newqy
14. [OUT] 変数 : newqz
15. [OUT] 変数 : newqw
  移動後の姿勢を表すクォータニオンの値が、
(newqx, newqy, newqz, newqw )
  に代入されます。
  実数。

16. [IN] [OUT] 変数 : targetpointid
  現在目指しているナビポイントのIDを入れます。
  移動後は、次に目指すべきナビポイントのIDが
  代入されます。

  ですので、一番最初の呼び出し時のみ、
  自分でtargetpoinidを指定すれば、
  あとは、同じ変数を渡すだけで、
  自動的に、目指すべきポイントのIDが
  代入されていくことになります。

  targetpointidに、
  存在しないナビポイントのIDを入れた場合は、
  (例えば-1など)
  自動的に、目指すべきナビポイントを決定します。
  ですが、この場合、
  向きを重視したモードのときに、
  動きがぎこちなくなることがあるので、
  なるべく、-1などは、使わない方が良いです。
  

E3DSetDirQ モデル向き 姿勢をクォータニオンで指定して、設定します。

E3DControlByNaviLineや、
E3DGetDirQ
で得た姿勢データを
設定するときに、使用してください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : qx
3. [IN] 数値または、変数 : qy
4. [IN] 数値または、変数 : qz
5. [IN] 数値または、変数 : qw
  姿勢を表すクォータニオンの値を
  指定してください。
  実数。
  
ver1.0.0.1
E3DGetDirQ モデル向き 姿勢をクォータニオンの形式で、取得します。 1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [OUT] 変数 : qx
3. [OUT] 変数 : qy
4. [OUT] 変数 : qz
5. [OUT] 変数 : qw
  姿勢を表すクォータニオンの値が
  代入されます。
  実数型の変数。
ver1.0.0.1
E3DSetWallOnGround 壁データを地面の高さに配置します。 1. [IN] 数値または、変数 : whsid
  壁の形状データを識別するID

2. [IN] 数値または、変数 : ghsid
  地面の形状データを識別するID

3. [IN] 数値または、変数 : mapmaxy
  地面データの最大の高さ
  実数。

4. [IN] 数値または、変数 : mapminy
  地面データの最低の高さ
  実数。

5. [IN] 数値または、変数 : wheight
  壁の高さ。
  実数。


ver1.0.0.1
E3DCreateNaviPointClearFlag ナビライン キャラクターが、nlidで識別されるナビライン上の点を、どれだけ進んだかということを、格納するためのデータを作成します。

hsidで識別されるモデルのデータとして
作成します。


このデータは、レースの順位を決定するときなどに、役に立ちます。


この命令は、
E3DInitNaviPointClearFlag,
E3DSetNaviPointClearFlag
E3DGetOrder
の命令を呼び出す前に、呼び出されていないといけません。

複数回、続けて呼び出してはいけません。
作り直したい場合は、必ず、
E3DDestroyNaviPointClearFlag
を呼び出してから、
E3DCreateNaviPointClearFlag
を呼び出してください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : nlid
  ナビラインを識別するID

3. [IN] 数値または、変数 : roundnum
  ナビライン上を最大、何周するのかを指定します。
ver1.0.0.1
E3DDestroyNaviPointClearFlag ナビライン E3DCreateNaviPointClearFlagで作成したデータを破棄します。 1. [IN] 数値または、変数 : hsid
  形状データを識別するID
ver1.0.0.1
E3DInitNaviPointClearFlag ナビライン E3DCreateNaviPointClearFlagで作成したデータを初期化します。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID
ver1.0.0.1
E3DSetNaviPointClearFlag ナビライン E3DCreateNaviPointClearFlagで作成したデータに、現在どれだけのナビポイントを通過したかを、セットします。

キャラクターとナビポイントとの距離を元に、
データをセットします。

この関数を使う場合は、
毎フレーム、この関数を呼び出す必要があります。

この関数でセットしたデータを元に、
E3DGetOrderが順位を決定します。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : posx
3. [IN] 数値または、変数 : posy
4. [IN] 数値または、変数 : posz
  キャラクターの位置を(posx, posy, posz)で指定します。
  実数。

5. [IN] 数値または、変数 : maxdist
  ナビポイントとの距離がmaxdistより近かった場合、
  そのポイントをクリアー(通過)したと見なします。
  実数。

6. [OUT] 変数 : npidptr
  現在クリアーしているポイントの内、
  一番前方のポイントのIDが代入されます。

7. [OUT] 変数 : roundptr
  キャラクターが何週目かが、代入されます。

8. [OUT] 変数 : distptr
  npidptrに代入された、IDのポイントから、
  どれだけ距離が離れているかが、代入されます。

ver1.0.0.1
E3DGetOrder ナビライン E3DSetNaviPointClearFlagでセットされたデータを元に、順位情報を取得するための関数です。
1. [IN] 変数 : hsidptr
  順位を調べたい形状データを識別するIDの配列を
  指定します。
  arraylengの長さの配列でなくてはなりません。

  例えば、
  dim hsidptr, arrayleng
  という命令で、作成したデータを渡してください。

2. [IN] 数値または、変数 : arrayleng
  配列の長さを指定します。
  hsidptr, orderptr, clearnoptrは、
  全て、arraylengの長さの配列でなくてはなりません。

3. [OUT] 変数 : orderptr
  順位順に、hsidが代入されます。
  orderptr.0 には、1位のhsidの番号が、
  orderptr.1 には、2位のhsidの番号が代入されます。


4. [OUT] 変数 : clearnoptr
  順位順に、クリアーしたポイントの数が代入されます。
  clearnoptr.0 には、
  1位のモデルがクリアーしたポイント数が、
  clearnoptr.1 には、
  2位のモデルがクリアーしたポイント数が
  代入されます。
ver1.0.0.1
E3DDestroyAllBillboard ビルボード 全てのビルボードを破棄します。 なし ver1.0.0.1
E3DSetValidFlag モデル情報 RokDeBone2の ”このオブジェクトを無効にする”機能を、プログラムで行えるようにしました。

無効にしたパーツは、描画やあたり判定の際に、無視されるようになります。

ジョイントに対して、E3DSetValidFlagをした場合は、
E3DJointRemakeを呼び出してください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードのフラグを設定できます。

2. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

  partnoに-1を渡すと、
  全てのパーツの有効、無効をセットできます。

3. [IN] 数値または、変数 : flag
  flagに0を指定すると、指定パーツが無効になります。
  flagに1を指定すると、有効になります。
ver1.0.0.1
E3DSetDiffuse モデル情報 パーツのdiffuse色をセットする関数です。

指定した色を、
そのまま設定、乗算して設定、加算して設定、
減算して設定の、4種類出来ます。

その時点で、表示されている色に対して、
乗算、加算、減算します。


diffuseだけかえても、Specular, Ambientを変えないと、意図した色にはならないと思いますので、注意してください。
(E3DSetSpecular, E3DSetAmbient, E3DSetEmissive, E3DSetSpecularPowerもご覧ください。)

頂点単位で色の設定が出来ます。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードの色を設定できます。

2. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

  partnoに-1を渡すと、
  全てのパーツに色をセットできます。

3. [IN] 数値または、変数 : R
4. [IN] 数値または、変数 : G
5. [IN] 数値または、変数 : B
  指定したい色を(R,G,B)で指定します。
  0から255までの値を指定してください。

  setflagに乗算を指定した場合は、
  各成分に、R/255, G/255, B/255を乗算します。

6. [IN] 数値または、変数 : setflag
  setflagが0のときは、
  パーツの色を(R,G,B)にセットします。

  setflagが1のときは、
  パーツの色に(R/255, G/255, B/255)を乗算します。

  setflagが2のときは、
  パーツの色に(R,G,B)を足し算します。

  setflagが3のときは、
  パーツの色から(R,G,B)を減算します。

7. [IN] 数値または、変数 : vertno
  指定した頂点番号の色をセットします。
  この引数を省略、または、-1をセットした場合には、
  partnoで指定したパーツ全体の色の設定をします。

ver1.0.0.1
E3DSetSpecular モデル情報 パーツのspecular色をセットする関数です。

指定した色を、
そのまま設定、乗算して設定、加算して設定、
減算して設定の、4種類出来ます。

その時点で、表示されている色に対して、
乗算、加算、減算します。



頂点単位で色の設定が出来ます。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードの色を設定できます。

2. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

  partnoに-1を渡すと、
  全てのパーツに色をセットできます。

3. [IN] 数値または、変数 : R
4. [IN] 数値または、変数 : G
5. [IN] 数値または、変数 : B
  指定したい色を(R,G,B)で指定します。
  0から255までの値を指定してください。

  setflagに乗算を指定した場合は、
  各成分に、R/255, G/255, B/255を乗算します。

6. [IN] 数値または、変数 : setflag
  setflagが0のときは、
  パーツの色を(R,G,B)にセットします。

  setflagが1のときは、
  パーツの色に(R/255, G/255, B/255)を乗算します。

  setflagが2のときは、
  パーツの色に(R,G,B)を足し算します。

  setflagが3のときは、
  パーツの色から(R,G,B)を減算します。


7. [IN] 数値または、変数 : vertno
  指定した頂点番号の色をセットします。
  この引数を省略、または、-1をセットした場合には、
  partnoで指定したパーツ全体の色の設定をします。
ver1.0.0.1
E3DSetAmbient モデル情報 パーツのambient色をセットする関数です。

指定した色を、
そのまま設定、乗算して設定、加算して設定、
減算して設定の、4種類出来ます。

その時点で、表示されている色に対して、
乗算、加算、減算します。



頂点単位で色の設定が出来ます。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードの色を設定できます。

2. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

  partnoに-1を渡すと、
  全てのパーツに色をセットできます。

3. [IN] 数値または、変数 : R
4. [IN] 数値または、変数 : G
5. [IN] 数値または、変数 : B
  指定したい色を(R,G,B)で指定します。
  0から255までの値を指定してください。

  setflagに乗算を指定した場合は、
  各成分に、R/255, G/255, B/255を乗算します。

6. [IN] 数値または、変数 : setflag
  setflagが0のときは、
  パーツの色を(R,G,B)にセットします。

  setflagが1のときは、
  パーツの色に(R/255, G/255, B/255)を乗算します。

  setflagが2のときは、
  パーツの色に(R,G,B)を足し算します。

  setflagが3のときは、
  パーツの色から(R,G,B)を減算します。

7. [IN] 数値または、変数 : vertno
  指定した頂点番号の色をセットします。
  この引数を省略、または、-1をセットした場合には、
  partnoで指定したパーツ全体の色の設定をします。

ver1.0.0.1
E3DSetBlendingMode 描画パラメータ 半透明モードを指定します。

加算モードと、頂点アルファ値による半透明モードの2つから選べます。

ver2.0.0.5で、加算モードその2が増えました。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードのモードを設定できます。

  -2を指定すると、スプライトの設定が出来ます。


2. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

  hsidに-2を指定した場合は、
  E3DCreateSpriteで取得した、
  スプライトのidを渡してください。

  partnoに-1を渡すと、
  全てのパーツにモードをセットできます。

3. [IN] 数値または、変数 : blendmode
  0を指定すると、
  頂点アルファ値による半透明モードになります。

  1を指定すると、 
  アッドモードになります。

  2を指定すると、
  頂点アルファを考慮したアッドモードになります。

ver1.0.0.1

ver2.0.0.5で拡張
E3DSetRenderState 描画パラメータ パーツごとに、RenderStateを設定できます。

描画の度に呼ぶ必要はありません。
一度呼べば、描画時に、自動的に、設定されます。


上級者向けの関数です。
詳しくは、DirectXのヘルプの
SetRenderStateをご覧ください。

D3DRS_ALPHABLENDENABLE
は、E3DRenderのwithalpha引数を元に、
自動的に呼び出すようにしているので、
このタイプは指定しても、反映されません。

また、オリジナルの頂点計算を行っているため、設定しても、効果のないものも、多くあります。

statetypeは、zip中の、
e3dhsp3.as
で、D3DRSで始まる定数として宣言していますので、
このファイルの定数を使用してください。

1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードのステートを設定できます。

2. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

  partnoに-1を渡すと、
  全てのパーツにステートをセットできます。

3. [IN] 数値または、変数 : statetype
  設定するタイプを指定してください。
  e3dhsp_rs.as中の定数を使用してください。

4. [IN] 数値または、変数 : value
  設定する値を指定してください。
ver1.0.0.1
E3DSetScale モデル情報 パーツ単位で、形状を拡大、縮小できます。

特殊効果用を想定していますので、
地面データには使用できません。

また、拡大縮小の結果は、
E3DChkConflictには反映されますが、
E3DChkConfBySphereには反映されません。

倍率は、形状データ読み込み時の大きさに対する比率です。

その時点で、表示されている大きさに対する比率ではないので、注意してください。

1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードのスケールを設定できます。

2. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

  partnoに-1を渡すと、
  全てのパーツにスケールをセットできます。


3. [IN] 数値または、変数 : scalex
4. [IN] 数値または、変数 : scaley
5. [IN] 数値または、変数 : scalez

  X,Y,Zのそれぞれの倍率を指定します。
  それぞれ、
  scalex、
  scaleyt、
  scalez 倍されます。
  等倍は1.0。
  実数。

6. [IN] 数値または、変数 : centerflag
  拡大縮小する際の中心を指定します。

  0を指定すると、
  hsidで指定したモデル全体の中心を拡大の中心とします。

  1を指定すると、
  それぞれのパーツの中心を拡大の中心とします。

  2を指定すると、
  原点を拡大の中心とします。

ver1.0.0.1
E3DGetScreenPos モデル情報 形状データの画面上での2Dの座標を取得する関数です。

パーツ単位、モデル単位、ビルボード単位で
使用できます。

頂点単位での2D座標を取得できます。

3Dキャラクターの位置に、2Dのスプライトを表示する、などの用途に使えます。


E3DChkInViewより後で、呼び出してください。


具体的な使用例は、zip中の、
e3dhsp_screenpos.as
に書きましたので、ご覧ください。

1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードの2D位置を取得できます。

3. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

  partnoに-1を渡すと、
  モデル全体の中心座標の2D座標を
  取得できます。

4. [OUT] 変数 : scx
5. [OUT] 変数 : scy
  指定したパーツの2Dスクリーン座標が代入されます。
  整数。 

  ただし、以下の場合には、
  scx = -1, scy = -1が代入されます。
  
  1,パーツが表示用オブジェクトではない場合
  2,パーツ全体が画面外にある場合
  3,パーツのディスプレイスイッチがオフの場合
  4,パーツが無効になっていた場合
    (E3DSetValidFlagで0を指定した場合)

6. [IN] 数値または、変数 : vertno
  取得したい頂点の番号を指定します。
  この引数を省略した場合や、-1を指定した場合は、
  パーツの中心の2D座標を取得します。

7. [IN] 数値または、変数 : calcmode
  計算モードを指定します。
  
  1を指定すると、
  新しいキャラクターの位置や、カメラの位置で、
  新たに計算し直します。
  0を指定すると、
  calcmode 1 で、すでに計算した結果を取得します。

  0を指定した方が、処理が軽く、高速です。
ver1.0.0.1
E3DGetScreenPos2 モデル情報 任意の3D座標から、スクリーン(2D)座標を取得する関数。

ラインの点の位置や、ボーンの位置に
スプライトを表示したりできます。


具体的な使用例は、        
teste3dhsp_autorun_getscreenpos2.as
をご覧ください。

#表示オブジェクトの頂点や、
パーツの中心の2D座標を取得する場合は、
既にある、E3DGetScreenPosをご利用ください。


1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 変数または、数値 : x3d
3. [IN] 変数または、数値 : y3d
4. [IN] 変数または、数値 : z3d
  3D座標を、(x3d, y3d, z3d)に指定してください。
  実数。


5. [OUT] 変数 : x2d
6. [OUT] 変数 : y2d
7. [OUT] 変数 : validflag
  変換後の2D座標が、(x2d, y2d)に代入されます。
  整数型の変数。

  2D座標が、スクリーンの大きさの内側にあるかどうかは、
  ユーザーさんがチェックしてください。

  指定した3D座標が、カメラより後ろにある場合や、
  見えないくらい遠いところにある場合には、
  validflag に 0 が代入されます。
  validflagに0が代入されているときの、(x2d, y2d)座標は、
  意味のない値が入っています。
ver1.0.0.1
E3DCreateQ 算術 クォータニオンを作成し、操作用のid を取得します。

クォータニオンの各操作には、
この関数で取得した qidを使用します。

クォータニオンを知らない方は、
とりあえず、
姿勢情報 (回転情報)を格納できる
便利なもの、
とくらいに、考えておいてください。


モーションポイントや、モデルなどに、
クォータニオンをセットすることにより、
任意の姿勢を持たせることが出来ます。

作成方法は、工夫してみましたが、
それほど、高速ではありません。
この関数は、メインループの外で、
あらかじめ呼んでおくことが、
望ましいです。
1. [OUT] 変数 : qid
  新しいクォータニオンを作成し、
  そのクォータニオンを、
  一意に識別する番号を qid に代入します。
  
  クォータニオン操作関数に、
  この番号を渡して使用してください。
  
ver1.0.0.1
E3DDestroyQ 算術 クォータニオンを削除します。

この関数に渡したqidは、使用できなくなります。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
ver1.0.0.1
E3DInitQ 算術 クォータニオンを初期化します。

姿勢情報が、初期化されます。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
ver1.0.0.1
E3DSetQAxisAndDeg 算術 クォータニオンを、指定した軸に関して、指定した角度だけ回転した姿勢をセットします。

既に、qidにセットしてある姿勢情報は、
上書きされます(無視されます)。

1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。

2. [IN] 数値または、変数 : axisx
3. [IN] 数値または、変数 : axisy
4. [IN] 数値または、変数 : axisz
  回転の軸のベクトルを、
  (axisx, axisy, axisz)に指定します。 
  軸のベクトルは、内部で正規化されます。
  実数。

5. [IN] 数値または、変数 : deg
  指定した軸に関して、
  deg度だけ回転した姿勢をセットします。
  実数。
ver1.0.0.1
E3DGetQAxisAndDeg 算術 クォータニオンにセットされている姿勢情報を解析します。

回転軸と、回転角度が得られます。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。

2. [OUT] 変数 : axisxptr
3. [OUT] 変数 : axisyptr
4. [OUT] 変数 : axiszptr
  回転の軸のベクトルを、
  (axisxptr, axisyptr, axiszptr)に代入します。 
  実数型の変数。

5. [OUT] 変数 : degptr
  回転角度を代入します。
  実数型の変数。
ver1.0.0.1
E3DRotateQX 算術 クォータニオンの姿勢情報を、X軸に関して回転します。

既に、qidにセットしてある姿勢情報に対して、
さらに、X軸回転することになります。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。

2. [IN] 数値または、変数 : deg
  X軸に関して、deg度だけ回転します。
  実数。
ver1.0.0.1
E3DRotateQY 算術 クォータニオンの姿勢情報を、Y軸に関して回転します。

既に、qidにセットしてある姿勢情報に対して、
さらに、Y軸回転することになります。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。

2. [IN] 数値または、変数 : deg
  Y軸に関して、deg度だけ回転します。
  実数。
ver1.0.0.1
E3DRotateQZ 算術 クォータニオンの姿勢情報を、Z軸に関して回転します。

既に、qidにセットしてある姿勢情報に対して、
さらに、Z軸回転することになります。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。

2. [IN] 数値または、変数 : deg
  Z軸に関して、deg度だけ回転します。
  実数。
ver1.0.0.1
E3DMultQ 算術 クォータニオンの掛け算をします。

例えば、
qid1にX軸に関して30度回転する姿勢が格納されていて、
qid2には、Y軸に関して20度回転する姿勢が格納されていたとします。

このとき、
E3DMultQ qid3, qid1, qid2
という命令を呼んだとします。

すると、
qid3には、
X軸に関して30度回転した後に、
さらにY軸に関して20度回転した姿勢情報が
格納されます。

気を付けなければいけないのは、
E3DMultQ qid3, qid1, qid2

E3DMultQ qid3, qid2, qid1
では、qid3に格納される姿勢情報が異なる
ということです。

2番目の引数に指定した回転の後に、
3番目の引数に指定した回転を適用するからです。

回転の順番によって、結果が異なるのは、
覚えておいてください。

後から処理したい方を、3番目の引数に
いれれば、OKです。
1. [IN] 数値または、変数 : resqid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidのクォータニオンに結果が代入されます。

2. [IN] 数値または、変数 : befqid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。

3. [IN] 数値または、変数 : aftqid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。

  befqidの回転の後に、aftqidの回転をした結果を、
  resqidで識別されるクォータニオンに代入します。
ver1.0.0.1
E3DNormalizeQ 算術 クォータニオンを正規化します。

様々なクォータニオンの操作を、
とてつもない回数繰り返していると、
計算誤差などで、
クォータニオンの情報がおかしくなることがあります。

例えば、E3DRotateQXをメインループで、
延々と繰り返す場合などに、
ひょっとしたら、不具合が出るかもしれません。

そんなときは、
ある程度の回数ごとに、
この関数を呼んでください。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
ver1.0.0.1
E3DCopyQ 算術 srcqidで識別されるクォータニオンの情報を、dstqidで識別されるクォータニオンにコピーします。
1. [IN] 数値または、変数 : dstqid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。 

2. [IN] 数値または、変数 : srcqid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
ver1.0.0.1
E3DGetBoneNoByName モデル情報 指定した名前を持つボーンを識別するidを取得します。

該当するボーンが見つからなかった場合は、
bonenoに-1が代入されます。

ボーン以外の名前を指定した場合も、
bonenoに-1が代入されます。


複数のパーツやボーンに、
同じ名前があった場合、
一番最初に見つかった物のidだけしか
取得できません。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 文字列または、文字列の変数 : bonename
  ボーンの名前を渡してください。

3. [OUT] 変数 : boneno
  ボーンを識別するID
ver1.0.0.1
E3DGetNextMP モーション モーションポイントを識別するidを取得します。

モーションポイントとは、
RokDeBone2のモーションダイアログ中の、
下の方に白い長いウインドウがありますが、
その中に表示されている、
点のことだと思ってください。

モーションポイントは、
ユーザーさんがIKで設定した姿勢を
保持しています。

モーションポイントは、ボーンごとに作られています。

気を付けて欲しいのは、
RokDeBone2で、白いウインドウ中に
点が表示されていないフレーム番号には、
モーションポイントは存在しないということです。

モーションポイントが無いフレーム番号の姿勢は
どうなっているかというと、
計算で、求めています。


モーションポイントは、フレーム番号の小さい順に、格納されています。

E3DGetNextMPは、prevmpidで指定した
モーションポイントのフレーム番号を見て、
そのフレーム番号の次に大きいフレーム番号を持つモーションポイントのidを取得します。

prevmpidに-1を指定すると、
一番小さいフレーム番号を持つ、モーションポイントのidが取得できます。

prevmpidのモーションポイントが持つフレーム番号より、大きいフレーム番号を持つモーションポイントが存在しない場合は、
mpidに-1が代入されます。


つまり、取得したmpidを
prevmpidに指定して、
再びE3DGetNextMPを呼び出す、
という作業を、
mpidに-1が代入されるまで、繰り返せば、
フレーム番号の小さい順に、
全てのモーションポイントのidが取得出来る
ということになります。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : motid
  モーションを識別するID
  E3DAddMotionで取得したmkを指定してください。

3. [IN] 数値または、変数 : boneno
  ボーンを識別するID
  E3DGetBoneNoByNameで取得した
  ボーンの番号を渡してください。

4. [IN] 数値または、変数 : prevmpid
  モーションポイントを識別するID
  E3DGetNextMPで取得したidを渡してください。

  -1を指定すると、一番小さなフレーム番号を持つ
  モーションポイントのidがmpidに代入されます。

5. [OUT] 変数 : mpid
  mpidに、prevmpidの次に大きいフレーム番号を持つ
  モーションポイントのidが代入されます。




ver1.0.0.1
E3DGetMPInfo モーション mpidで識別されるモーションポイントの情報を取得します。

mpinfoで指定した配列に、
情報が代入されます。

情報は12(MPI_MAX)種類です

mpinfoには、
dim mpinfo, MPI_MAX
で作成した配列を指定してください。

MPI_で始まる定数は、
e3dhsp.asで、定義されています。


mpinfo.MPI_QUAは、クォータニオン情報
mpinfo.MPI_TRAXは、X方向の移動量の情報
mpinfo.MPI_TRAYは、Y方向の移動量の情報
mpinfo.MPI_TRAZは、Z方向の移動量の情報
mpinfo.MPI_FRAMENOは、フレーム番号の情報
mpinfo.MPI_DISPSWITCHは、
   ディスプレイスイッチの情報
mpinfo.MPI_INTERPは、補間計算方法の情報
mpinfo.MPI_SCALEXは、X方向の拡大情報
mpinfo.MPI_SCALEYは、Y方向の拡大情報
mpinfo.MPI_SCALEZは、Z方向の拡大情報
mpinfo.MPI_USERINT1は、ユーザーデータの情報
mpinfo.MPI_SCALEDIVは、拡大率の係数情報
として、使用されます。

mpinfo.0には、
E3DCreateQで取得したqidを、
この関数の呼び出し前に、セットしておく必要があります。
mpinfo.MPI_QUAに格納されているqidで
識別されるクォータニオンに、
モーションポイントの姿勢情報が代入されます。

mpinfo.MPI_DISPSWITCHの
ディスプレイスイッチ情報は、ビットごとの和になっています。
ディスプレイスイッチ番号ds がオンの場合は、
2のds乗の値が足されていることになります。
例えば、ディスプレイスイッチ3だけがオンの場合は、2の3乗の8という値が代入されています。

mpinfo.MPI_INTERPの
補間計算方法の情報は、
mpidで識別されるモーションポイントと、
その次に大きいフレーム番号を持つモーションポイントの間の、補間計算方法を示しています。
0の時は、球面線形補間
1の時は、スプライン補間
となります。

現バージョンでは、
スプライン補間は、大きな角度の補間時には
使用できません。
(望ましい結果が得られません)
ですので、
急激に変化することがあるかもしれない
モーションポイント間の補間計算には、
球面線形補間を使用することを、
おすすめします。

拡大率は、MPI_SCALEDIVで割った値が
適用されています。
例えば、X軸方向の拡大率は、
mpinfo.MPI_SCALEX / mpinfo.MPI_SCALEDIV
です。
小数点以下をセットできるように、
MPI_SCALEDIVが用意されています。


具体的な使用例は、
e3dhsp_motionpoint.as
をご覧ください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : motid
  モーションを識別するID
  E3DAddMotionで取得したmkを指定してください。

3. [IN] 数値または、変数 : boneno
  ボーンを識別するID
  E3DGetBoneNoByNameで取得した
  ボーンの番号を渡してください。

4. [IN] 数値または、変数 : mpid
  モーションポイントを識別するID
  E3DGetNextMPで取得したidを渡してください。

5. [IN, OUT] 長さMPI_MAXの配列 : mpinfo
  モーションポイントの情報を格納する配列。
  mpinfo.MPI_QUAだけは、呼び出し前に、
  あらかじめ設定しておく必要があります。

  mpinfo.MPI_QUAで識別されるクォータニオンに
  モーションポイントの姿勢情報が
  代入されることになります。
ver1.0.0.1
E3DSetMPInfo モーション mpidで識別されるモーションポイントに情報をセットします。

mpinfo、mpinfoflagには、それぞれ
dim mpinfo, MPI_MAX
dim mpinfoflag, MPI_MAX

で作成した配列を使用してください。


mpinfoにあらかじめセットされている情報を、
mpidで識別されるモーションポイントに、
設定します。

mpinfoの、どの成分に、
何の情報をセットすれば良いかは
E3DGetMPInfoをご覧ください。

mpinfoflagは、部分的に情報をセットできるようにするために、使用します。

mpinfoflag.MPI_QUAが1の場合は、
mpinfo.MPI_QUAのクォータニオン情報を
モーションポイントにセットします。

mpinfoflag.MPI_TRAXが1の場合は、
mpinfo.MPI_TRAXのX方向の移動量情報を
モーションポイントにセットします。

以下同様に、
mpinfoflagMPI_QUA 〜mpinfoflag.MPI_SCALEDIV
までに、セットしたい項目に1を、
セットしたくない項目に0を指定してください。


具体的な使用例は、zip中の、
e3dhsp_motionpoint.as
に書いてありますので、
ご覧ください。


モーションポイントに情報をセットしただけでは、モデルのポーズに反映されません。
ポーズに反映させるためには、
E3DFillUpMotionを呼んでください。

だたし、E3DFillUpMotionは、
とても、計算量が多く、実行時間が長いので、
なるべく呼び出し回数は少なくしてください。

つまり、必要なモーションポイントの操作が
全て終わってから、
まとめて一回だけ、E3DFillUpMotionするように
してください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : motid
  モーションを識別するID
  E3DAddMotionで取得したmkを指定してください。

3. [IN] 数値または、変数 : boneno
  ボーンを識別するID
  E3DGetBoneNoByNameで取得した
  ボーンの番号を渡してください。

4. [IN] 数値または、変数 : mpid
  モーションポイントを識別するID
  E3DGetNextMPで取得したidを渡してください。

5. [IN] 長さMPI_MAXの配列 : mpinfo
  モーションポイントの情報を格納する配列。

6. [IN] 長さMPI_MAXの配列 : mpinfoflag
  mpinfoのどの成分を有効にするのかを、
  mpinfoflagの各成分で指定します。


ver1.0.0.1
E3DIsExistMP モーション framenoで指定したフレーム番号に、モーションポイントがあるかどうかを調べます。

見つかった場合は、
mpidに、モーションポイントのidが代入され、
無かった場合は、
-1が代入されます。


1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : motid
  モーションを識別するID
  E3DAddMotionで取得したmkを指定してください。

3. [IN] 数値または、変数 : boneno
  ボーンを識別するID
  E3DGetBoneNoByNameで取得した
  ボーンの番号を渡してください。

4. [IN] 数値または、変数 : frameno
  モーションポイントがあるかどうか、
  調べたいフレーム番号を指定します。

5. [OUT] 変数 : mpid
  モーションポイントを識別するID
  framenoが示すフレーム番号に、
  モーションポイントがあった場合は、
  そのモーションポイントのidが代入されます。
  無かった場合は、-1が代入されます。
ver1.0.0.1
E3DGetMotionFrameLength モーション motidで識別されるモーションのフレーム数を取得します。

気を付けて欲しいのは、
フレーム番号は、0から始まるので、
最大のフレーム番号は、
leng - 1
だということです。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : motid
  モーションを識別するID
  E3DAddMotionで取得したmkを指定してください。

3. [OUT] 変数 : leng
  モーションのフレーム数が代入されます。
ver1.0.0.1
E3DSetMotionFrameLength モーション モーションのフレーム数をframelengに変更します。

framelengが、変更前のフレーム数より小さかった場合は、
frameleng - 1より大きなフレーム番号を持つ
モーションポイントは、削除されます。

あたり判定情報や、視野内判定情報が
削除されます。
再構築したい場合は、
initflagに1を指定してください。
しなくてもいい、もしくは、後でする場合は、
0を指定してください。

あたり判定情報と、視野内判定情報は、
E3DFillUpMotion呼び出し時の
initflagに1を指定することでも、
再構築できます。

再構築の計算は、時間がかかります。


ポーズの情報も、削除されます。
再構築する場合には、
E3DFillUpMotionを呼んでください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : motid
  モーションを識別するID
  E3DAddMotionで取得したmkを指定してください。

3. [IN] 数値または、変数 : frameleng
  モーションのフレーム数を指定します。

4. [IN] 数値または、変数 : initflag
  あたり判定情報と、視野内判定情報を
  再構築する場合は1を、
  しない場合は0を指定してください。
ver1.0.0.1
E3DAddMP モーション mpinfoで指定した情報を持つモーションポイントを、新たに作成し、作成したモーションポイントを識別するidを取得します。


mpinfoには、
dim mpinfo, MPI_MAX
で作成した配列を使用してください。


mpinfoの、どの成分に、
何の情報をセットすれば良いかは
E3DGetMPInfoをご覧ください。

mpinfo.MPI_FRAMENOで指定したフレーム番号に、
既に、モーションポイントが存在する場合は、エラーになりますので、
注意してください。

(呼び出し前にE3DIsExistMPで、
チェックすると確実です。)


モーションポイントに情報をセットしただけでは、モデルのポーズに反映されません。
ポーズに反映させるためには、
E3DFillUpMotionを呼んでください。

だたし、E3DFillUpMotionは、
とても、計算量が多く、実行時間が長いので、
なるべく呼び出し回数は少なくしてください。

つまり、必要なモーションポイントの操作が
全て終わってから、
まとめて一回だけ、E3DFillUpMotionするように
してください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : motid
  モーションを識別するID
  E3DAddMotionで取得したmkを指定してください。

3. [IN] 数値または、変数 : boneno
  ボーンを識別するID
  E3DGetBoneNoByNameで取得した
  ボーンの番号を渡してください。

4. [IN] 要素数MPI_MAXの配列 : mpinfo
  モーションポイントの情報を格納する配列。

5. [OUT] 変数 : mpid
  新たに作成したモーションポイントを識別するidが
  代入されます。

ver1.0.0.1
E3DDeleteMP モーション mpidで識別されるモーションポイントを削除します。

この関数に渡したmpidは、
以後、使えなくなります。


モーションポイントの情報を更新しただけでは、モデルのポーズに反映されません。
ポーズに反映させるためには、
E3DFillUpMotionを呼んでください。

だたし、E3DFillUpMotionは、
とても、計算量が多く、実行時間が長いので、
なるべく呼び出し回数は少なくしてください。

つまり、必要なモーションポイントの操作が
全て終わってから、
まとめて一回だけ、E3DFillUpMotionするように
してください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : motid
  モーションを識別するID
  E3DAddMotionで取得したmkを指定してください。

3. [IN] 数値または、変数 : boneno
  ボーンを識別するID
  E3DGetBoneNoByNameで取得した
  ボーンの番号を渡してください。

4. [IN] 数値または、変数 : mpid
  モーションポイントを識別するID
  E3DGetNextMPで取得したidを渡してください。
ver1.0.0.1
E3DFillUpMotion モーション モーションを指定したフレーム番号分だけ、補間計算します。

この計算の結果、
モデルのポーズに、モーションポイントの情報が、反映されるようになります。

bonenoで指定したボーンと、
その全ての子供ボーンの計算が行われます。

そのため、
変更したボーンの内で、
一番、親のボーンの番号で、
1回だけこの関数を呼び出せば、
良いことになります。



initflagに1を指定すると、
E3DChkConfBySphere

E3DChkInView
で使用する情報を更新します。
これは、かなり時間のかかる計算です。

ですので、操作しているモデルが
ずっと視野内にいることが保証されている場合で、かつ、
E3DChkConfBySphereではなく、
E3DChkConflictを使う場合は、
initflagに0を指定することをおすすめします。

リアルタイム処理する場合は、
このフラグの値が、パフォーマンスに
かなり、影響します。


具体的な使用例は、zip中の、
e3dhsp_fillupmotion.as
に書きましたので、
ご覧ください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : motid
  モーションを識別するID
  E3DAddMotionで取得したmkを指定してください。

3. [IN] 数値または、変数 : boneno
  ボーンを識別するID
  E3DGetBoneNoByNameで取得した
  ボーンの番号を渡してください。

  bonenoで指定したボーンと
  その子供ボーン全てのポーズを計算します。

  boneno に -1を指定した場合は、
  全てのボーンの計算が行われます。

  ですが、
  bonenoを指定した方が、
  計算量が少なくなります。


4. [IN] 数値または、変数 : startframe
5. [IN] 数値または、変数 : endframe
  フレーム番号が、
  startframeから、endframeまでの間の
  モデルのポーズを計算します。
  startframeとendframeには、
  モーションポイントが存在しなくても、
  計算可能です。

  endframeに-1を指定した場合は、
  startrframeから、最後のフレームまで
  計算されます。


6. [IN] 数値または、変数 : initflag
  E3DChkConfBySphere
  と
  E3DChkInView
  で使用する情報を更新するかどうかの指定します。
  0の時は更新しません。
  1の時は更新します。

ver1.0.0.1
E3DCopyMotionFrame モーション srcmotidで識別されるモーションの、フレーム番号srcframenoの、全てのモーションポイントの情報を、dstmotidで識別されるモーションの、フレーム番号dstframenoのモーションポイントへ、コピーします。

dstframenoに、モーションポイントが無い場合は、作成されます。

srcframenoにモーションポイントが無い場合は、
計算で求めて、dstframeにコピーします。
この場合、計算時間が、余分にかかります。



モーションポイントに情報をセットしただけでは、モデルのポーズに反映されません。
ポーズに反映させるためには、
E3DFillUpMotionを呼んでください。

だたし、E3DFillUpMotionは、
とても、計算量が多く、実行時間が長いので、
なるべく呼び出し回数は少なくしてください。

つまり、必要なモーションポイントの操作が
全て終わってから、
まとめて一回だけ、E3DFillUpMotionするように
してください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : srcmotid
  コピー元のモーションを識別するID
  E3DAddMotionで取得したmkを指定してください。

3. [IN] 数値または、変数 : srcframeno
  コピー元のフレーム番号

4. [IN] 数値または、変数 : dstmotid
  コピー先のモーションを識別するID
  E3DAddMotionで取得したmkを指定してください。

5. [IN] 数値または、変数 : dstframeno
  コピー先のフレーム番号

ver1.0.0.1
E3DGetDirQ2 モデル向き E3DGetDirQをqidで操作できるようにしたものです。

qidで指定したクォータニオンに、
モデルデータの姿勢情報が、
格納されます。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN, (OUT)] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
ver1.0.0.1
E3DSetDirQ2 モデル向き E3DSetDirQをqidで操作できるようにしたものです。

qidで識別されるクォータニオンの
姿勢情報を、
モデルデータにセットします。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
ver1.0.0.1
E3DLookAtQ 算術 指定した向きを、徐々に向くための姿勢情報を、クォータニオンにセットします。

この関数は、この関数の呼び出し前の
クォータニオンの姿勢情報も、計算に使用します。
ですので、
qidには、一回前にこの関数を呼び出したときと、同じqidが渡されるものと仮定しています。

qidを他のボーンの姿勢情報などの計算の際に、使い回ししている場合は、
計算したいボーンの姿勢情報を、
呼び出し前に、
E3DCopyQなどで、コピーしておいてください。


(basevecx, basevecy, basevecz)のベクトルを
(vecx, vecy, vecz)の方向に向ける計算をします。

キャラクター全体の姿勢の制御をする場合は、
basevecには、初期状態の向き、
つまり、(0, 0, -1)を与えれば、よいことになります。

ボーンの姿勢を制御する場合には、
初期状態のボーンの向き
つまり、ボーンの座標から、親ボーンの座標を
引いたものを、basevecに与えれば、
よいことになります。


(vecx, vecy, vecz)には、
向きたい位置座標から、
自分の位置座標を引いたものを、
与えてください。


upflagの値によって、4つのモードがあります。

upflag == 0 のときは、
上向き方向が、常にY軸上方を向くように
制御されます。

upflag == 1 のときは、
上向き方向が、常にY軸下方を向くように
制御されます。

upflag == 2 のときは、
上向き方向が、連続した向きをとるように、
制御されます。
その結果、宙返りがかのうとなります。

upflag == 3 のときは、
上向き方向を、特に制御しません。
上向き方向は、連続した向きをとりますが、
その方向は、拘束されません。

飛行機の制御などに、upflag 2を使用し、
人型キャラなどの制御に、upflag 0 を使用する
ことを、おすすめします。

upflag == 0とupflag== 1のときには、
真上と真下を向かないようにしてください。

upflag == 2とupflag==3のときは、
真上と真下を向いても、大丈夫です。


divnum引数に、分割数を指定します。
現在の位置と、目標地点との間の間隔を
1 / divnum ずつ、内分して、近づきます。


具体的な使用例は、
e3dhsp_lookatq.as
に書きましたので、ご覧ください。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンに、
  指定した方向を向くための情報が、
  格納されます。

2. [IN] 数値または、変数 : vecx
3. [IN] 数値または、変数 : vecy
4. [IN] 数値または、変数 : vecz
  (vecx, vecy, vecz)に、
  向きたい向きのベクトルを指定してください。
  位置ではなくて、向きを指定してください。
  実数。

5. [IN] 数値または、変数 : basevecx
6. [IN] 数値または、変数 : basevecy
7. [IN] 数値または、変数 : basevecz
  (basevecx, basevecy, basevecz)に、
  初期状態の向きを指定してください。
  実数。

8. [IN] 数値または、変数 : upflag
  上方向の制御モードを指定してください。
  

9. [IN] 数値または、変数 : divnum
  内分する割合を指定してください。
  大きな値をいれるほど、
  細かく動きます。

ver1.0.0.1
E3DMultQVec 算術 (befvecx, befvecy, befvecz)というベクトルに対して、qidで識別されるクォータニオンによる回転をした後のベクトルを、(aftvecx, aftvecy, aftvecz)に代入します。


例えば、初期状態で、-Z方向を向いている
モデルの場合、

qidに、E3DGetDirQ2呼び出しに使用した
qidを渡し、
basevecに、(0, 0, -1)を渡せば、
aftvecに、現在、キャラクターが向いている向きが代入されます。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンの
  回転変換をします。
  
2. [IN] 数値または、変数 : befvecx
3. [IN] 数値または、変数 : befvecy
4. [IN] 数値または、変数 : befvecz
  (befvecx, befvecy, befvecz)に、
  回転前のベクトルを指定してください。
  実数。

5. [OUT] 変数 : aftvecx
6. [OUT] 変数 : aftvecy
7. [OUT] 変数 : aftvecz
  (aftvecx, aftvecy, aftvecz)に、
  クォータニオンでの回転後のベクトルが
  代入されます。
  実数型の変数。
ver1.0.0.1
E3DTwistQ 算術 クォータニオンに、ねじりを加えます。

basevecには、E3DLookAtQで説明したのと
同じ、初期状態の向きを指定してください。


ねじりの角度は、初期状態からの角度ではなく、現在の姿勢に、追加したい分だけの、
ねじりの角度を、指定してください。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンに、
  指定した方向を向くための情報が、
  格納されます。

2. [IN] 数値または、変数 : twistdeg
  twistdeg 度だけ、ねじりを加えます。
  実数。

3. [IN] 数値または、変数 : basevecx
4. [IN] 数値または、変数 : basevecy
5. [IN] 数値または、変数 : basevecz
  (basevecx, basevecy, basevecz)に、
  初期状態の向きを指定してください。
  E3DLookAtQで指定したのと同じbasevecを指定してください。
  実数。
ver1.0.0.1
E3DInitTwistQ 算術 E3DTwistQで与えた、ねじれを、初期化します。

basevecには、E3DLookAtQで説明したのと
同じ、初期状態の向きを指定してください。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンの
  ねじれを初期化します。
  
2. [IN] 数値または、変数 : basevecx
3. [IN] 数値または、変数 : basevecy
4. [IN] 数値または、変数 : basevecz
  (basevecx, basevecy, basevecz)に、
  初期状態の向きを指定してください。
  E3DLookAtQで指定したのと同じbasevecを指定してください。
  実数。
ver1.0.0.1
E3DGetTwistQ 算術 E3DTwistQで与えた、ねじれの角度の合計を取得します。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンの
  ねじれを取得します。

2. [OUT] 変数 : twist
  ねじれ角度の合計の値を、
  代入します。
  実数型の変数。
ver1.0.0.1
E3DRotateQLocalX 算術 クォータニオンを、ローカルなX軸に関して、回転します。

現在の姿勢に対して、更に、回転します。

E3DRotateQXと違うのは、
姿勢変換を行う前のX軸に関して、
回転できる点です。

使用例は、e3dhsp_motionpoint.asに書きましたので、ご覧ください。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンに、
  回転を加えます。

2. [IN] 数値または、変数 : deg
  deg 度だけ、回転を加えます。
  実数。
ver1.0.0.1
E3DRotateQLocalY 算術 クォータニオンを、ローカルなY軸に関して、回転します。

現在の姿勢に対して、更に、回転します。

E3DRotateQYと違うのは、
姿勢変換を行う前のY軸に関して、
回転できる点です。

使用例は、e3dhsp_motionpoint.asに書きましたので、ご覧ください。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンに、
  回転を加えます。

2. [IN] 数値または、変数 : deg
  deg 度だけ、回転を加えます。
ver1.0.0.1
E3DRotateQLocalZ 算術 クォータニオンを、ローカルなZ軸に関して、回転します。

現在の姿勢に対して、更に、回転します。

E3DRotateQZと違うのは、
姿勢変換を行う前のZ軸に関して、
回転できる点です。

使用例は、e3dhsp_motionpoint.asに書きましたので、ご覧ください。
1. [IN] 数値または、変数 : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンに、
  回転を加えます。

2. [IN] 数値または、変数 : deg
  deg 度だけ、回転を加えます。
ver1.0.0.1
E3DGetBonePos モデル情報 ボーンの位置情報を取得します。

poskind == 0のときは、ローカル座標
poskind == 1のときは、グローバル座標
が取得できます。

partnoには、E3DGetBoneNoByName
で取得した番号を指定してください。



1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : boneno
  ボーンを識別するID
  E3DGetBoneNoByNameで取得した
  ボーンの番号を渡してください。
  
3. [IN] 数値または、変数 : poskind
  ローカル座標と、グローバル座標の
  どちらを取得するかを指定します。

4. [IN] 数値または、変数 : motid
  モーションを識別するID
  E3DAddMotionで取得したmkを指定してください。

5. [IN] 数値または、変数 : frameno
  モーションのフレーム番号を指定してください。
  E3DSetNewPose呼び出し直後の、
  stat変数に、現在のフレーム番号が代入されるので、
  参考にしてください。


6. [OUT] 変数 : posx
7. [OUT] 変数 : posy
8. [OUT] 変数 : posz
  (posx, posy, posz)に、
  ボーンの座標が代入されます。
  実数型の変数。


9. [IN] 数値または、変数 : scaleflag
  scaleflagに1をセットすると、
  E3DSetScaleの結果を反映したposを計算します。
  0がセットされた場合には、
  E3DSetScaleの結果が反映されません。
ver1.0.0.1
E3DCreateLine ライン 線を作成して、lineidを取得します。
lineidは、線オブジェクトを一意に識別するための番号です。

E3DCreateLine、E3DDestroyLine
E3DSetLineColor、E3DAddPoint2Line
E3DDeletePointOfLine、E3DSetPointPosOfLine
E3DGetPointPosOfLine
E3DGetNextPointOfLine
E3DGetPrevPointOfLine
に渡すlineidは、この関数で取得したlineidを
使用してください。

pointposには、
ddim pointpos, pointnum, 3
で確保したデータを渡してください。

dimではなくて、ddimで確保してください。

pointnumには、点の数を入れてください。
点の数の最大値は65535です。
pointnumが2より小さい場合は、エラーになります。
pointpos.点の番号.0 にX座標、
pointpos.点の番号.1 にY座標、
pointpos.点の番号.2 にZ座標
を入れて、初期化しておいてください。


作成した線は、
E3DRenderで、描画できます。
hsidの代わりに、lineidを指定してください。


LINE関係の関数の使用例は、
e3dhsp_autorun.as
に書きましたので、ご覧ください。
1. [IN] 変数 : pointpos
  線を構成する点の座標を指定してください。
  メモリの確保の仕方、値のセットの仕方は、
  左の記述をご覧ください。
  必ず、ddimでメモリを作成してください。
  実数型の変数。


2. [IN] 数値または、変数 : pointnum
  初期化する点の数を指定してください。
  pointposのデータを確保する際に使った
  点の数を渡してください。

3. [IN] 数値または、変数 : maxpointnum
  Lineは、E3DAddPoint2Line命令で、
  点の数を増やすことが可能です。
  最大何個まで、点の数を増やせるかを
  指定してください。
  (点の数の合計です。)
  
  ビデオメモリは、pointnumではなくて、
  maxpointnumでアロケートされます。

4. [IN] 数値または、変数 : linekind
  線の種類を指定します。
  LINELISTの場合は2を、
  LINESTRIPの場合は3を指定してください。
  LINELIST, LISTSTRIPについての説明は、
  線の種類の説明をご覧ください。

5. [OUT] 変数 : lineid
  作成した線を識別する番号が、代入されます。

ver1.0.0.1
E3DDestroyLine ライン E3DCreateLine で作成した線を削除します。
削除したlineidは、
以降、どの命令にも使わないでください。
1. [IN] 数値または、変数 : lineid
  削除する線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。
ver1.0.0.1
E3DSetLineColor ライン 線の色を設定します。 1. [IN] 数値または、変数 : lineid
  線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。

2. [IN] 数値または、変数 : A
  透明度を指定します。
  0から255の値を渡してください。

3. [IN] 数値または、変数 : R  
4. [IN] 数値または、変数 : G
5. [IN] 数値または、変数 : B
  色の成分(R,G,B)を指定してください。
  それぞれ、0から255の値を渡してください。
ver1.0.0.1
E3DAddPoint2Line ライン 線に点を追加し、追加した点を識別するpidを取得します。

点の数の合計が、
E3DCreateLineに渡したmaxpointnum
より大きくなると、エラーになります。

取得したpidをE3DSetPointPosOfLine関数に
渡して、
付け足した点の座標をセットしてください。

1. [IN] 数値または、変数 : lineid
  線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。

2. [IN] 数値または、変数 : prevpid
  線の中のどこに、新しい点を追加するかを指定します。
  prevpidで指定した点の次の点として、
  新しい点を追加します。
  prevpidに-2を指定した場合には、線の先頭に、
  prevpidに-1を指定した場合には、線の最後に
  新しい点を追加します。

3. [OUT] 変数 : pid
  新しく追加した点を識別する番号が、代入されます。
  pidは、線ごとに固有な値です。
ver1.0.0.1
E3DDeletePointOfLine ライン 線の中の点を削除します。 1. [IN] 数値または、変数 : lineid
  線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。

2. [IN] 数値または、変数 : pid
  削除する点を識別する番号を指定してください。
ver1.0.0.1
E3DSetPointPosOfLine ライン 線の中の点の座標をセットします。

座標posは、
ddim pos, 3
で確保したメモリを渡してください。

必ず、dimではなくて、ddimでメモリを作成してください。


pos.0には、X座標を、
pos.1には、Y座標を、
pos.2には、Z座標を指定してください。
1. [IN] 数値または、変数 : lineid
  線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。

2. [IN] 数値または、変数 : pid
  点を識別する番号を渡します。

3. [IN] 変数 : pos
  点の座標を渡してください。
  posの確保の仕方、値のセットの仕方は、
  左の記述をご覧ください。
  ddimで作成した実数型配列。
ver1.0.0.1
E3DGetPointPosOfLine ライン 線の中の点の座標を取得します。

座標が代入されるposは、
ddim pos, 3
で確保したメモリを渡してください。

必ず、dimではなくて、ddimでメモリを作成してください。


pos.0には、X座標が、
pos.1には、Y座標が、
pos.2には、Z座標が代入されます。
1. [IN] 数値または、変数 : lineid
  線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。

2. [IN] 数値または、変数 : pid
  点を識別する番号を渡します。

3. [OUT] 変数 : pos
  点の座標が代入される配列を渡してください。
  posの確保の仕方、値のセットのされ方は、
  左の記述をご覧ください。
  ddimで作成した実数型配列。
ver1.0.0.1
E3DGetNextPointOfLine ライン previdで指定した点の、一つ後の点のIDを取得します。

線は、点を、双方向リストで、格納しています。


一つ後の点が存在しない場合は、
nextid には、負の値が代入されます。
1. [IN] 数値または、変数 : lineid
  線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。

2. [IN] 数値または、変数 : previd
  点を識別する番号

3. [OUT] 変数 : nextid
  previdの点の、一つ後の点のIDが代入されます。

  previd に-1が指定されている場合は、
  nextidには、先頭の点のIDが代入されます
ver1.0.0.1
E3DGetPrevPointOfLine ライン pidで指定した点の、一つ前の点のIDを取得します。


線は、点を、双方向リストで、格納しています。

一つ前の点が存在しない場合は、
previd には、負の値が代入されます。
1. [IN] 数値または、変数 : lineid
  線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。

2. [IN] 数値または、変数 : pid
  点を識別するID

3. [OUT] 変数 : previd
  pidの点の、一つ後の点のIDが代入されます。
ver1.0.0.1
E3DWriteDisplay2BMP 出力 バックバッファの内容を、BMPファイルに保存します。

filenameには、拡張子を除いた名前を
指定してください。


E3DInitのmultisamplenumに0以外を指定した場合は、この命令は使えません。
(エラーになります。)
1. [IN] 文字列または、文字列の変数 : filename
  出力するBMP のパス文字列。

  拡張子を除いたパスを指定してください。
  この関数で、自動的に、”.bmp”が付加されます。

  既に同じファイル名が存在している場合は、
  そのファイルは、上書きされるので注意してください。
ver1.0.0.1
E3DCreateAVIFile 出力 AVIファイルを初期化して、aviidを取得します。

aviidは、AVIファイルを識別するための番号です。

この命令で作成したAVIファイルに対して、
E3DWriteData2AVIFile命令で、
バックバッファの内容を書き込み、
E3DCompleteAVIFile命令で、
終了処理をします。

E3DWriteData2AVIFile命令、
E3DCompleteAVIFile命令には、
E3DCreateAVIFile命令で取得したaviidを
渡してください。


E3DInitのmultisamplenumに0以外を指定した場合は、この命令は使えません。
(エラーになります。)



AVI関係の命令の具体的な使用例は、
e3dhsp_savedisplay.as
に書きましたので、ご覧ください。
1. [IN] 文字列または、文字列の変数 : filename
  出力するBMP のパス文字列。

  拡張子を除いたパスを指定してください。
  この関数で、自動的に、”.avi”が付加されます。

  既に同じファイル名が存在している場合は、
  そのファイルは、上書きされるので注意してください。

2. [IN] 数値または、変数 : datatype
  作成するデータの種類を指定します。
  現バージョンでは、映像のみしか扱わないため、
  常に1を指定してください。

3. [IN] 数値または、変数 : compkind
  圧縮の種類を指定します。
  0を指定した場合は、
    圧縮なし
  1を指定した場合は、
    cinepak Codec by Radiusによる圧縮
  2を指定した場合には、
    Microsoft Video 1による圧縮
  をします。

4. [IN] 数値または、変数 : framerate
  AVIファイルのフレームレートを指定してください。
  通常は、スクリプトプログラムのFPSを指定します。
  60FPSで表示している場合は、60と指定します。


5. [IN] 数値または、変数 : frameleng
  AVIファイルのフレーム数の合計数。
  frameleng回だけ、E3DWriteData2AVIFileで、
  データをファイルに書き込むことが出来ます。

6. [OUT] 変数 : aviid
  作成したAVIファイルを識別するための
  番号が代入されます。
ver1.0.0.1
E3DWriteData2AVIFile 出力 バックバッファの内容を、AVIファイルに書き込みます。

E3DCreateAVIFileで指定したframeleng回だけ
この命令を呼ぶことが出来ます。

frameleng回を超えた呼び出しは、
エラーとなり、無視されます。
1. [IN] 数値または、変数 : aviid
  AVIファイルを識別するための番号を指定してください。
  E3DCreateAVIFileで取得した番号を使用してください。

2. [IN] 数値または、変数 : datatype
  作成するデータの種類を指定します。
  現バージョンでは、映像のみしか扱わないため、
  常に1を指定してください。
ver1.0.0.1
E3DCompleteAVIFile 出力 AVIファイルの終了処理をします。

必要な回数、E3DWriteData2AVIFile命令を
呼び出した後に、この命令を呼び出してください。
1. [IN] 数値または、変数 : aviid
  AVIファイルを識別するための番号を指定してください。
  E3DCreateAVIFileで取得した番号を使用してください。

2. [IN] 数値または、変数 : datatype
  作成するデータの種類を指定します。
  現バージョンでは、映像のみしか扱わないため、
  常に1を指定してください。
ver1.0.0.1
E3DCameraLookAt カメラ カメラを向きたい方向に、徐々に向けます。

(vecx, vecy, vecz)には、注視点ではなくて、
向きたい向きのベクトルを指定してください。

例えば、注視点(tx, ty, tz)を向きたい場合は、
E3DGetCameraPos camx, camy, camz
として、カメラの位置を求め、
引き算するだけでOKです。
vecx = tx - camx
vecy = ty - camy
vecz = tz - camz
のようにして、計算し、指定してください。


upflagは、E3DLookAtQでの用法と同じです。
upflag == 0 のときは、
上向き方向が、常にY軸上方を向くように
制御されます。

upflag == 1 のときは、
上向き方向が、常にY軸下方を向くように
制御されます。

upflag == 2 のときは、
上向き方向が、連続した向きをとるように、
制御されます。
その結果、宙返りがかのうとなります。

upflag == 3 のときは、
上向き方向を、特に制御しません。
上向き方向は、連続した向きをとりますが、
その方向は、拘束されません。


divnum引数に、分割数を指定します。
現在の位置と、目標地点との間の間隔を
1 / divnum ずつ、内分して、近づきます。


具体的な使用例は、
e3dhsp_CameraOnNaviline.as
に書きましたので、
ご覧ください。

また、このページの最初に書いてある、
カメラの使い方の所も、お読みください。
1. [IN] 数値または、変数 : vecx
2. [IN] 数値または、変数 : vecy
3. [IN] 数値または、変数 : vecz
  向きたいベクトルを、指定してください。
  ベクトルの計算方法は、左記をご覧ください。
  実数。

4. [IN] 数値または、変数 : upflag
  上向き制御方法のモードを指定してください。
  詳しくは、左記をご覧ください。

5. [IN] 数値または、変数 : divnum
  分割数を指定してください。
ver1.0.0.1
E3DCameraOnNaviLine カメラ カメラをナビラインに沿って動かします。

mode引数に0を指定すると、
カメラの位置だけを制御します。

mode引数に1を指定すると、
位置に加え、向きも制御します。

ループ移動や、反対方向への移動も
サポートしています。


ナビラインの作成には、
GViewer.exeを使うと便利です。
(おちゃっこLABでダウンロード可能です。)

ナビラインは、地面の高さに作成することが、
普通なので、ナビラインからカメラまでの
オフセット値を指定できるようにしました。

例えば、地面から1000だけ上方を、
カメラを動かしたいときは、
地面の高さにナビラインを作成し、
この関数のオフセット引数に
offsetx = 0 : offsety = 1000 : offsetz = 0
の値を指定すればOKです。



具体的な使用例は、
e3dhsp_CameraOnNaviline.as
に書きましたので、
ご覧ください。

また、このページの最初に書いてある、
カメラの使い方の所も、お読みください。
1. [IN] 数値または、変数 : nlid
  ナビラインを識別するID

2. [IN] 数値または、変数 : mode
  位置だけを制御する場合は0を、
  位置と向きを制御する場合は1を指定してください。

3. [IN] 数値または、変数 : roundflag
  ナビラインの最後のナビポイントに移動した後、
  ナビラインの最初のナビポイントの位置を
  目指すかどうかを示します。

  1を指定すると、円形のナビラインの場合は、
  ずっと、ぐるぐる回ることになります。

4. [IN] 数値または、変数 : reverseflag
  1を指定すると、
  ナビラインのポイントを逆順にたどるようになります。


5. [IN] 数値または、変数 : offsetx
6. [IN] 数値または、変数 : offsety
7. [IN] 数値または、変数 : offsetz
  ナビラインから、カメラ位置までのオフセット値を
  指定します。
  詳しくは、左記をご覧ください。
  実数。

8. [IN] 数値または、変数 : posstep
  カメラを一度にどれくらいの距離を移動させるかを
  指定します。
  ただし、ナビポイント付近では、
  posstepより小さな距離しか移動させないことがあります。
  実数。

9. [IN] 数値または、変数 : dirdivnum
  向きたい向きまで、徐々にカメラを向けるための
  引数です。
  目標までの角度を1/dirdivnumずつ内分して、
  徐々に向きを制御します。

10. [IN] 数値または、変数 : upflag
  E3DCameraLookAt関数のupflag引数と同じ意味です。
  詳しくは、E3DCameraLookAtの説明部分を
  お読みください。


11. [IN] [OUT] 変数 : targetpointid
  現在目指しているナビポイントのIDを入れます。
  移動後は、次に目指すべきナビポイントのIDが
  代入されます。

  ですので、一番最初の呼び出し時のみ、
  自分でtargetpoinidを指定すれば、
  あとは、同じ変数を渡すだけで、
  自動的に、目指すべきポイントのIDが
  代入されていくことになります。

  targetpointidに、
  存在しないナビポイントのIDを入れた場合は、
  (例えば-1など)
  自動的に、目指すべきナビポイントを決定します。
  
ver1.0.0.1
E3DCameraDirUp カメラ カメラの現在向いている方向を、徐々に、上の方向に向けます。

現バージョンでは、
宙返りはサポートしていません。


具体的な使用例は、
e3dhsp_CameraOnNaviline.as
に書きましたので、
ご覧ください。

また、このページの最初に書いてある、
カメラの使い方の所も、お読みください。
1. [IN] 数値または、変数 : deg
  角度。
  実数。

2. [IN] 数値または、変数 : divnum
  deg度の角度を、1/divnumずつ内分して、
  カメラを、上方向に向けます。
ver1.0.0.1
E3DCameraDirDown カメラ カメラの現在向いている方向を、徐々に、下の方向に向けます。

現バージョンでは、
宙返りはサポートしていません。


具体的な使用例は、
e3dhsp_CameraOnNaviline.as
に書きましたので、
ご覧ください。

また、このページの最初に書いてある、
カメラの使い方の所も、お読みください。
1. [IN] 数値または、変数 : deg
  角度。
  実数。

2. [IN] 数値または、変数 : divnum
  deg度の角度を、1/divnumずつ内分して、
  カメラを、下方向に向けます。
ver1.0.0.1
E3DCameraDirRight カメラ カメラの現在向いている方向を、徐々に、右の方向に向けます。

具体的な使用例は、
e3dhsp_CameraOnNaviline.as
に書きましたので、
ご覧ください。

また、このページの最初に書いてある、
カメラの使い方の所も、お読みください。
1. [IN] 数値または、変数 : deg
  角度。
  実数。

2. [IN] 数値または、変数 : divnum
  deg度の角度を、1/divnumずつ内分して、
  カメラを、右方向に向けます。
ver1.0.0.1
E3DCameraDirLeft カメラ カメラの現在向いている方向を、徐々に、左の方向に向けます。


具体的な使用例は、
e3dhsp_CameraOnNaviline.as
に書きましたので、
ご覧ください。

また、このページの最初に書いてある、
カメラの使い方の所も、お読みください。
1. [IN] 数値または、変数 : deg
  角度。
  実数。

2. [IN] 数値または、変数 : divnum
  deg度の角度を、1/divnumずつ内分して、
  カメラを、左方向に向けます。
ver1.0.0.1
E3DCreateFont テキスト フォントを作成し、フォントを識別するIDを取得します。

具体的な使用例は、
e3dhsp_font.as
に書きましたので、ご覧ください。
1. [IN] 数値または、変数 : height
  フォントの文字セルまたは文字の高さを論理単位で指定します。
  文字の高さとは、
  文字セルの高さから内部レディング(アクセント記号などのためのスペース)の
  高さを引いたものです。
  要求されたサイズを超えない最大のフォントを探して処理されます。

2. [IN] 数値または、変数 : width
  フォントの平均文字幅を論理単位で指定します。
  0 を指定すると、条件に最も近い値が選択されます。
  条件に最も近い値は、利用可能な各フォントの現在のデバイスでの
  縦横比とデジタル化された縦横比の差の絶対値を比較することにより
  決定されます。

3. [IN] 数値または、変数 : weight
  フォントの太さを表す 0 から 1000 までの範囲内の値を指定します。
  たとえば、400 を指定すると標準の太さになり、
  700 を指定すると太字になります。
  0 を指定すると、既定の太さが選択されます。

4. [IN] 数値または、変数 : bItalic
  斜体にするかどうかを指定します。
  1 を指定すると、斜体になります。

5. [IN] 数値または、変数 : bUnderline
  下線を付けるかどうかを指定します。
  1 を指定すると、下線付きになります。

6. [IN] 数値または、変数 : bStrikeout
  取り消し線を付けるかどうかを指定します。
  1 を指定すると、取り消し線が付きます。

7. [IN] 文字列または、文字列の変数 : fontname
  フォントの名前が入った 文字列を指定します。
  文字列の長さは、 31 文字以下にしなければなりません。

8. [OUT] 変数 : fontid
  作成したフォントを識別するための
  番号が代入されます。
ver1.0.0.1
E3DDrawTextByFontID テキスト E3DCreateFontで作成したフォントにより、指定した位置、色で、テキストを表示します。
1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 数値または、変数 : fontid
  E3DCreateFontで作成した、フォントの番号を指定します。

3. [IN] 数値または、変数 : posx
4. [IN] 数値または、変数 : posy
  テキストをする位置を (x, y)=(posx, posy)で指定します。

5. [IN] 文字列または、文字列の変数 : textstr
  表示したい文字列を指定します。

6. [IN] 数値または、変数 : a
7. [IN] 数値または、変数 : r
8. [IN] 数値または、変数 : g
9. [IN] 数値または、変数 : b
  文字の透明度と色を(透明度, 赤, 緑, 青)=(a, r, g, b)で
  指定します。
ver1.0.0.1
E3DDrawTextByFontIDWithCnt テキスト カウンター制御で、一定間隔で、徐々に文字列を表示します。

eachcnt引数に、一文字当たりの待機期間を
指定します。
この値と、curcntに指定したカウンターの値を
比較して、文字を表示します。

curcntには、通常、この命令を呼び出すたびに、
1ずつ増えるカウンターの値を指定します。


例えば、eachcntに10を指定した場合には、
一文字当たり10カウントだけ待機するので、
1文字目は、curcntが10になるまで表示されません。
2文字目は、curcntが20になるまで表示されません。

と、このように、curcntの値が、増えるに従って、
徐々に、表示文字長が増えていきます。


現バージョンでは、半角カタカナには、
対応していません。


具体的な使用例は、
e3dhsp_fontWithCnt.as
に書きましたので、ご覧ください。
1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 数値または、変数 : fontid
  E3DCreateFontで作成した、フォントの番号を指定します。

3. [IN] 数値または、変数 : posx
4. [IN] 数値または、変数 : posy
  テキストをする位置を (x, y)=(posx, posy)で指定します。

5. [IN] 文字列または、文字列の変数 : textstr
  表示したい文字列を指定します。

6. [IN] 数値または、変数 : a
7. [IN] 数値または、変数 : r
8. [IN] 数値または、変数 : g
9. [IN] 数値または、変数 : b
  文字の透明度と色を(透明度, 赤, 緑, 青)=(a, r, g, b)で
  指定します。

10. [IN] 数値または、変数 : eachcnt
  一文字当たり、どれくらい待ってから表示するかを指定します。

11. [IN] 数値または、変数 : curcnt
  現在のカウンターを指定します。

ver1.0.0.1
E3DDrawTextByFontIDWithCnt2 テキスト カウンター制御で、文字ごとに表示タイミングを指定して、文字列を表示します。


cntarray引数に、
文字ごとの表示タイミングを指定した配列を
指定してください。

cntarrayの長さは、
E3DGetCharacterNum関数で、
textstrの文字数を取得して、決定してください。


HSPでは、文字列中に、'\n'が見つかった場合には、自動的に、"\r\n"に変換されるようです。
つまり、改行マーク1個に付き、1文字増えることになりますので、ご注意ください。


cntarray中の表示タイミングと、
curcntに指定したカウンターの値を比べて、
文字を表示するかどうかを決定します。


cntarray.0に10を、
cntarray.1に20を指定した場合には、
curcntが10になったときに1文字目が表示され、
curcntが20になったときに2文字目が表示されます。

curcnt.1にcurcnt.0より小さな値を入れることも可能です。
その場合は、2文字目は1文字目よりも後で、
表示されることになります。

\nを文字列中に含む場合は、
自動的に挿入される\rの分の表示タイミングも
指定しないといけませんので、ご注意ください。


現バージョンでは、半角カタカナには、
対応していません。


具体的な使用例は、
e3dhsp_fontWithCnt.as
に書きましたので、ご覧ください。

1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 数値または、変数 : fontid
  E3DCreateFontで作成した、フォントの番号を指定します。

3. [IN] 数値または、変数 : posx
4. [IN] 数値または、変数 : posy
  テキストをする位置を (x, y)=(posx, posy)で指定します。

5. [IN] 文字列または、文字列の変数 : textstr
  表示したい文字列を指定します。

6. [IN] 数値または、変数 : a
7. [IN] 数値または、変数 : r
8. [IN] 数値または、変数 : g
9. [IN] 数値または、変数 : b
  文字の透明度と色を(透明度, 赤, 緑, 青)=(a, r, g, b)で
  指定します。

10. [IN] 配列の変数 : cntarray
  文字数分の要素数を持つ配列変数を指定します。
  それぞれの要素には、文字の表示タイミングを指定します。

11. [IN] 数値または、変数 : arrayleng
  cntarray中の要素数を指定します。

12. [IN] 数値または、変数 : curcnt
  現在のカウンターを指定します。

ver1.0.0.1
E3DGetCharacterNum テキスト 1バイト文字、2バイト文字を判別して、textstr中の文字数を取得します。


HSPでは、文字列中に、'\n'が見つかった場合には、自動的に、"\r\n"に変換されるようです。
つまり、改行マーク1個に付き、1文字増えることになりますので、ご注意ください。


現バージョンでは、半角カタカナには、
対応していません。
1. [IN] 文字列または、文字列の変数 : textstr
  調べたい文字列を指定します。

2. [OUT] 変数 : charanum
  文字の数が代入されます。
ver1.0.0.1
E3DDestroyFont テキスト E3DCreateFontで作成したフォントを、
削除します。
1. [IN] 数値または、変数 : fontid
  E3DCreateFontで作成した、フォントの番号を指定します。
ver1.0.0.1
E3DSlerpQ 算術 クォータニオンを、球面線形補間します。

startqid, endqid, resqid には、
E3DCreateQ で取得した、IDを渡してください。

resqidで識別されるクォータニオンに、
startqid, endqidの間の姿勢を、
t の比率に基づいて補間計算し、
セットします。

t の値が、0.0 から1.0の間になるように、指定してください。

t が0.0のときは、
startqidと同じ姿勢がセットされます。

t が1.0のときは、
endqidと同じ姿勢がセットされます。

具体的な使い方は、
e3dhsp_Spline.as
をご覧ください。
1. [IN] 数値または、変数 : startqid
2. [IN] 数値または、変数 : endqid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  startqidとendqidのクォータニオンの間の姿勢を、
  補間計算して、resqidのクォータニオンにセットします。


3. [IN] 数値または、変数 : t
  補間計算するクォータニオンのstartqidからの比率を指定してください。
  t の値は、0.0から1.0の間の値を指定してください。
  実数。

5. [IN] 数値または、変数 : resqid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  計算結果が、resqidのクォータニオンに代入されます。
ver1.0.0.1
E3DSquadQ 算術 クォータニオンを、スプライン補間します。

befqid, startqid, endqid, aftqid, resqidには、
E3DCreateQ で取得した、IDを渡してください。

resqidで識別されるクォータニオンに、
startqid, endqidの間の姿勢を、
t の比率に基づいて補間計算し、
セットします。

befqidには、startqidの一つ前の姿勢を、
aftqidには、endqidの一つ後の姿勢を、
セットしておいてください。

この関数は、大きく姿勢が変化する場合には、
向いていません。
大きく変化する姿勢を補完する場合には、
E3DSlerpQを使用してください。
または、2つを組み合わせて、使用してください。


t の値が、0.0 から1.0の間になるように、指定してください。

t が0.0のときは、
startqidと同じ姿勢がセットされます。

t が1.0のときは、
endqidと同じ姿勢がセットされます。


具体的な使い方は、
e3dhsp_Spline.as
をご覧ください。
1. [IN] 数値または、変数 : befqid
2. [IN] 数値または、変数 : startqid
3. [IN] 数値または、変数 : endqid
4. [IN] 数値または、変数 : aftqid

  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  startqidとendqidのクォータニオンの間の姿勢を、
  補間計算して、resqidのクォータニオンにセットします。

  befqidには、startqidの一つ前の姿勢を、
  aftqidには、endqidの一つ後の姿勢を、
  セットしておいてください。

5. [IN] 数値または、変数 : t
  補間計算するクォータニオンのstartqidからの比率を指定してください。
  t の値は、0.0から1.0の間の値を指定してください。


6. [IN] 数値または、変数 : resqid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  計算結果が、resqidのクォータニオンに代入されます。


ver1.0.0.1
E3DSplineVec 算術 位置座標を、スプライン補間計算します。

befpos, startpos, endpos, aftpos, resposには、
それぞれ、
ddim befpos, 3
ddim startpos, 3
ddim endpos, 3
ddim aftpos, 3
ddim respos, 3
で、確保した配列を渡してください。

必ず、dimではなくて、ddimでメモリを確保してください。


配列の第1要素(例えばbefpos.0)には、
X座標、
配列の第2要素(例えばbefpos.1)には、
Y座標、
配列の第3要素(例えばbefpos.2)には、
Z座標、
をセットしておいてください。


startposとendposの間の座標を、
tvの比率に基づいて、
スプライン補間計算して、
resposに代入します。

befposには、startposの一つ前の座標を、
aftposには、endposの一つ後の座標を
セットしておいてください。


t の値が、0.0 から1.0の間になるように、指定してください。

t が0.0のときは、
startposと同じ位置がセットされます。

t が1.0のときは、
endposと同じ位置がセットされます。


具体的な使い方は、
e3dhsp_Spline.as
をご覧ください。
1. [IN] 変数 : befpos
2. [IN] 変数 : startpos
3. [IN] 変数 : endpos
4. [IN] 変数 : aftpos
  計算の元となる、位置座標の配列を指定してください。
  詳しくは、左記をご覧ください。
  ddimで作成した実数型配列。

5. [IN] 数値または、変数 : t
  補間計算する位置座標のstartposからの比率を指定してください。
  t の値は、0.0から1.0の間の値を指定してください。

7. [OUT] 変数 : respos
  計算結果が、代入される配列を指定してください。
  ddimで作成した実数型配列。
ver1.0.0.1
E3DDbgOut デバッグ dbg.txtに、指定した文字列を出力します。

この命令を呼ぶ前に、
一回だけE3DEnableDbgFileを
呼ぶ必要があります。
1. [IN] 文字列または、文字列変数 : dbgstr
  出力文字列を指定してください。
ver1.0.0.1
E3DGetDiffuse モデル情報 任意のパーツの任意の頂点の、diffuse色を取得します。


1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードの色を取得できます。

2. [IN] 数値または、変数 : partno
  取得したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

3. [IN] 数値または、変数 : vertno
  色を取得したい頂点の番号を指定します。

4. [OUT] 変数 : r
5. [OUT] 変数 : g
6. [OUT] 変数 : b
   指定した頂点のdiffuse色が、
   RGB = ( r, g, b )に代入されます。
   r, g, bそれぞれ、0から255の値が代入されます。
ver1.0.0.1
E3DGetAmbient モデル情報 任意のパーツの任意の頂点の、ambient色を取得します。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードの色を取得できます。

2. [IN] 数値または、変数 : partno
  取得したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

3. [IN] 数値または、変数 : vertno
  色を取得したい頂点の番号を指定します。

4. [OUT] 変数 : r
5. [OUT] 変数 : g
6. [OUT] 変数 : b
   指定した頂点のambient色が、
   RGB = ( r, g, b )に代入されます。
   r, g, bそれぞれ、0から255の値が代入されます。
ver1.0.0.1
E3DGetSpecular モデル情報 任意のパーツの任意の頂点の、specular色を取得します。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードの色を取得できます。

2. [IN] 数値または、変数 : partno
  取得したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

3. [IN] 数値または、変数 : vertno
  色を取得したい頂点の番号を指定します。

4. [OUT] 変数 : r
5. [OUT] 変数 : g
6. [OUT] 変数 : b
   指定した頂点のspecular色が、
   RGB = ( r, g, b )に代入されます。
   r, g, bそれぞれ、0から255の値が代入されます。
ver1.0.0.1
E3DGetAlpha モデル情報 任意のパーツの透明度を取得します。 1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードの色を取得できます。

2. [IN] 数値または、変数 : partno
  取得したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

3. [IN] 数値または、変数 : vertno
  この引数は、ver1.0.4.4では、使用されません。
  適当な数字を入れてください。

4. [OUT] 変数 : alpha
  指定したパーツの透明度が、0〜255の値で代入されます。
ver1.0.0.1
E3DSaveQuaFile 出力 読み込み済みのモーションを、ファイルに保存します。 1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : mkid
  モーションを識別する番号を指定してください。

3. [IN] 文字列または、文字列変数 : filename
  保存ファイル名(パス)を指定してください。
ver1.0.0.1
E3DSaveSigFile 出力 形状データをsigファイルに保存します。

地面データは、この関数では、
保存しないでください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 文字列または、文字列変数 : filename
  保存ファイル名(パス)を指定してください。

ver1.0.0.1
E3DSetMipMapParams 描画パラメータ ミップマップのパラメータを設定します。

この関数を呼んだ後に実行される
全てのE3DSigLoadに影響します。


この命令を一度も呼ばなかった場合は、
miplevelに0、
mipfilterに
D3DX_FILTER_TRIANGL|D3DX_FILTER_MIRROR
を指定したのと同じになります。

1. [IN] 数値または、変数 : miplevels
  要求されるミップ レベルの数。
  この値が 0 または D3DX_DEFAULT の場合は、
  完全なミップマップ チェーンが作成されます。

2. [IN] 数値または、変数 : mipfilter
  イメージをフィルタリングする方法を制御する 1 つ以上のフラグの組み合わせ。
  このパラメータに D3DX_DEFAULT を指定することは、
  D3DX_FILTER_BOX を指定することと等しい。
  有効なそれぞれのフィルタに、次のフラグの 1 つが含まれていなければならない。
  D3DX_FILTER_BOX
  各ピクセルは、ソース イメージ内の 2 × 2 (× 2) のサイズのボックスに含まれ
  ピクセルの平均を算出することにより計算される。
  このフィルタは、ミップマップを使用する場合のように、
  転送先のディメンジョンがソースの半分の場合のみ機能する。

  D3DX_FILTER_LINEAR
  各転送先ピクセルは、最も近い 4 つのピクセルをソース イメージからサンプリング
  することにより計算される。
  このフィルタは、両軸のスケールが 2 未満の場合に最も効率よく機能する。

  D3DX_FILTER_NONE
  スケーリングまたはフィルタリングを行わない。
  ソース イメージの境界の外側にあるピクセルは透明な黒であると見なされる。

  D3DX_FILTER_POINT
  各転送先ピクセルは、最も近いピクセルをソース イメージからサンプリング
  することにより計算される。

  D3DX_FILTER_TRIANGLE
  ソース イメージ内の各ピクセルが、転送先イメージに等しく反映される。
  これは、最も処理に時間のかかるフィルタである。
  さらに、OR 演算子を使用して、有効なフィルタと共に次に示すオプションの
  フラグを 0 個以上指定できる。

  D3DX_FILTER_MIRROR
  このフラグを指定すると、D3DX_FILTER_MIRROR_U、D3DX_FILTER_MIRROR_V、
  および D3DX_FILTER_MIRROR_W フラグを指定したことになる。

  D3DX_FILTER_MIRROR_U
  u 軸のテクスチャのエッジから離れたピクセルを、ラッピングせずにミラーリング
  するよう指定する。

  D3DX_FILTER_MIRROR_V
  v 軸のテクスチャのエッジから離れたピクセルを、
  ラッピングせずにミラーリングするよう指定する。

  D3DX_FILTER_MIRROR_W
  w 軸のテクスチャのエッジから離れているピクセルを、
  ラッピングせずにミラーリングするよう指定する。

  D3DX_FILTER_DITHER
  結果として作成されたイメージを、4x4 の順序付きディザ アルゴリズム
  を使ってディザリングする必要がある。
ver1.0.0.1
E3DPickVert モデル情報 画面上の2D座標を指定して、その座標に、一番近い頂点を検出する関数です。

全く同じ座標の頂点が見つかった場合には、
複数のパーツ、複数の頂点の番号を
取得するするようになっています。
同じ座標でも、UVだけが違う頂点などが
存在するので、複数取得できるようになっています。

取得した情報の数が、getnumに代入されます。
該当するデータが無い場合は、getnumに0が
代入されます。

getnumが0出ない場合には、
maxindex = getnum - 1とすると
pickpartarray.0 から、pickpartarray.maxindex
までに、パーツの番号が代入されます。
pickvertarray.0から、pickvertarray.maxindex
までに、頂点の番号が代入されます。


pickarrayleng変数に、
一度に取得できる情報の数をセットした後、
dim pickpartarray, pickarrayleng
dim pickvertarray, pickarrayleng
で、メモリを確保してください。

rangex, rangey引数を調整することで、
検出の感度を調整できます。



この関数の使用例は、
e3dhsp_pickvert.as
に書きましたので、ご覧ください。
1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 数値または、変数 : hsid
  形状データを識別するID

3. [IN] 数値または、変数 : posx
4. [IN] 数値または、変数 : posy
  画面上の2D座標を(posx, posy)で指定します。

5. [IN] 数値または、変数 : rangex
6. [IN] 数値または、変数 : rangey
  検出距離を指定します。
  rangexには、X座標がどれだけ離れた点まで検索するかを指定します。
  rangeyには、Y座標がどれだけ離れた点まで検索するかを指定します。
  大きい値を指定すると、
  指定した座標より遠い頂点まで検索します。

  感度の調整に使用してください。

7. [OUT] 変数 : pickpartarray
8. [OUT] 変数 : pickvertarray
  指定した座標に一番近いパーツ番号と、
  頂点の番号がgetnum個だけ、代入されます。

9. [IN] 数値または、変数 : pickarrayleng
  pickpartarray, pickvertarrayの配列の大きさを指定してください。
  dim 命令で使用した値を渡してください。
  詳しくは、左記をご覧ください。

10. [OUT] 変数 : getnum
  pickpartarray, pickvertarrayに、何個の値を代入したかを
  取得できます。

  例えば、getnum が3だった場合には、
  pickpartarray.0, pickpartarray.1, pickpartarray.2に値が代入されています。
  
ver1.0.0.1
E3DGetCullingFlag モデル情報 この関数は、現在、機能していません。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : partno
  取得したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。


3. [IN] 数値または、変数 : vertno
  調べたい頂点の番号を指定してください。

4. [OUT] 変数 : viewcullflag
  視野外カリングされているとき1が、
  されていないとき0が代入されます。

5. [OUT] 変数 : revcullflag
  背面カリングされているとき1が、
  されていないとき0が代入されます。
ver1.0.0.1
E3DGetOrgVertNo モデル情報 mqoファイル内での頂点番号を取得する。

パーツ内の頂点の数は、E3DGetVertNumOfPartのvertnumで取得されます。

E3Dのプログラムでは、頂点の番号に、0から(vertnum - 1)の頂点の番号を使用できます。

この頂点の番号は、表示用の最適化をした後の、頂点の番号で、
rok, mqoファイル内での頂点の番号と異なる場合があります。

この関数は、最適化後の頂点番号に対応する、rok,mqoファイル内での頂点の番号を取得します。

mqoの場合は、
mqoファイル中の、パーツごとの頂点の出現順番を返します。(0から始まる数字)

rokの場合は、
rokファイル中の、1から始まる頂点のインデックスを返します。
rokの場合は、パーツごとの番号ではなくて、
頂点全体を通しての番号ですので
注意してください。


指定した頂点と同じ座標を持つ頂点の番号が代入されるので、場合によっては、複数取得されます。

この関数は、E3Dのプログラムから、im2ファイルを作る際などに使用することを想定して、作りました。

地面データには使わないでください。


この関数を使う前に、
E3DChkIM2Status関数で、引数に
1が返されることを確認してください。

0が返された場合は、sigファイルを新しい形式にコンバートする必要があります。
コンバーターについては、
SigConvForIM2のページをご覧ください。


orgarraylengに、取得できる情報の数をセットして、
dim orgnoarray, orgarrayleng
で、メモリを確保してください。

1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : partno
  取得したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。


3. [IN] 数値または、変数 : vertno
  調べたい頂点の番号を指定してください。


4. [OUT] 変数 : orgnoarray
  この配列に、元データの頂点の番号が代入されます。
  maxindex = getnum - 1とすると
  orgnoarray.0 から、orgnoarray.maxindexまでに
  頂点の番号が代入されます。

5. [IN] 数値または、変数 : arrayleng
  orgnoarrayをdimしたときの、配列の大きさを指定してください。


6. [OUT] 変数 : getnum
  orgnoarrayに代入した情報の数を取得できます。
ver1.0.0.1
E3DChkIM2Status ボーン影響 影響マップ情報(im2)が、利用可能かどうかを調べます。

status引数に1が返された場合は、
利用可能。
0が返された場合は、
利用不可能です。

0が返された場合は、sigファイルを新しい形式にコンバートする必要があります。
コンバーターについては、
SigConvForIM2のページをご覧ください。


E3DGetOrgVertNo, E3DLoadIM2File,
E3DSaveIM2File関数などを使用する前に、
このE3DChkIM2Status関数で、
影響マップファイルの機能が使えるかどうかを
調べてください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID


2. [OUT] 変数 : status
  影響マップ情報が、利用可能かどうかが代入されます。
ver1.0.0.1
E3DLoadIM2File ボーン影響 hsidで識別されるモデルデータに、im2ファイルのボーン影響情報をセットします。

この関数を使う前に、
E3DChkIM2Status関数で、引数に
1が返されることを確認してください。

0が返された場合は、sigファイルを新しい形式にコンバートする必要があります。
コンバーターについては、
SigConvForIM2のページをご覧ください。


1. [IN] 数値または、変数 : hsid
  hsidで識別されるモデルデータに、
  im2ファイルのボーン影響情報をセットします。

2. [IN] 文字列または、文字列の変数 : fname
  *.im2 のパス文字列。
ver1.0.0.1
E3DSaveIM2File ボーン影響出力 hsidで識別されるモデルデータの影響マップ情報を、im2ファイルに書き出します。


この関数を使う前に、
E3DChkIM2Status関数で、引数に
1が返されることを確認してください。

0が返された場合は、sigファイルを新しい形式にコンバートする必要があります。
コンバーターについては、
SigConvForIM2のページをご覧ください。

1. [IN] 数値または、変数 : hsid
  hsidで識別されるモデルデータの影響マップ情報を、
  im2ファイルに書き出します。

2. [IN] 文字列または、文字列の変数 : fname
  *.im2 のパス文字列。
ver1.0.0.1
E3DGetJointNum モデル情報 ジョイントの総数を取得します。

E3DGetJointInfoで詳細情報を取得する際の、
配列データの大きさの決定などに、
使用してください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [OUT] 変数 : jointnum
  ジョイントの総数が、代入されます。
ver1.0.0.1
E3DGetJointInfo モデル情報 ジョイントの詳細情報を、一括取得します。

この関数を使用するには、
データ取得用の配列を、sdim, dim命令を使って、
作成する必要があります。
(データによって、ジョイントの総数が変化するので、ユーザーさん側で、データ長を調整する必要があります。)


まず、jointmaxnum変数に、
E3DGetJointInfo関数で、
ジョイントの総数を取得してください。

jointname引数は、
sdim jointname, 256, jointmaxnum
で作成してください。

maxnameno = jointmaxnum - 1
とすると、
jointname.0 から、jointname.maxnameno
で、jointmaxnum個の名前にアクセスできます。


jointinfo引数は、
dim jointinfo, JI_MAX, jointmaxnum
で作成してください。

JI_* は、e3dhsp3.asの
最初の方で定義されている定数です。

#define global JI_SERIAL 0
#define global JI_NOTUSE 1
#define global JI_PARENT 2
#define global JI_CHILD 3
#define global JI_BROTHER 4
#define global JI_SISTER 5
#define global JI_MAX 6

のように、定義されています。
配列のインデックスとして、使用してください。

JI_SERIALインデックスは、
ジョイントのシリアル番号にアクセスするときに、
使用します。
ジョイントのシリアル番号とは、
E3DGetPartNoByName あるいは、
E3DGetBoneNoByName 
で取得できる番号と同じものです。

JI_NOTUSEインデックスは、
ジョイントが無効になっているかどうかの
フラグにアクセスするときに、使用します。
無効なときに1が、有効なときに0が代入されています。

JI_PARENT, JI_CHILD,
JI_BROTHER, JI_SISTER
インデックスは、
ジョイントの階層構造にアクセスするときに
使用します。
詳しくは、
ジョイントの階層構造のページ
をご覧ください。

JI_MAXは、
JI_ で始まる定数の個数を定義しています。
jointinfoをdimするときに使用します。



jointinfoの内容を参照する場合には、
1つ目のインデックスに、
JI_で始まる定数を指定し、
2つ目のインデックスに、
何番目のジョイントかを表す番号
(シリアル番号ではありません)
を指定します。

例えば、3番目のジョイントのシリアル番号に
アクセスしたいときには、
jointinfo.JI_SERIAL.2
と書きます。

同様に、1番目のジョイントの親の番号に
アクセスしたい場合には、
jointinfo.JI_PARENT.0
と書きます。


具体的な使用例は、サンプルの
e3dhsp_getjointinfo.asをご覧ください。

1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : jointmaxnum
  データ取得用配列の大きさ(ジョイントの数)を指定します。

3. [OUT] 文字列の配列変数 : jointname
  名前情報を取得するための配列を渡してください。
  右に書いた方法で、sdimした配列を渡してください。

4. [OUT] 配列変数 : jointinfo
  シリアル番号や、階層構造などを取得するための配列変数を渡してください。
  右に書いた方法で、dimした配列を渡してください。

5. [OUT] 変数 : jointgetnum
  何個lのジョイントの情報を出力したかが、代入されます。
  通常は、jointmaxnumと同じ値が取得されます。

ver1.0.0.1
E3DGetFirstJointNo モデル情報 相対値0のジョイントの、シリアル番号を取得します。

ジョイント番号の相対値とは、
ボーンファイルや、im2ファイルなどで、
使用します。
各ファイルの説明をご覧ください。
ボーンファイルのページ
im2ファイルのページ

1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [OUT] 変数 : firstno
  相対値0のシリアル番号が、代入されます。
  
ver1.0.0.1
E3DGetDispObjNum モデル情報 表示用オブジェクトの総数を取得します。
E3DGetDispObjInfoで詳細情報を取得する際の、
配列データの大きさの決定などに、
使用してください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [OUT] 変数 : dispobjnum
  表示オブジェクトの総数が、代入されます。
ver1.0.0.1
E3DGetDispObjInfo モデル情報 表示オブジェクトの詳細情報を、一括取得します。

この関数を使用するには、
データ取得用の配列を、sdim, dim命令を使って、
作成する必要があります。
(データによって、表示オブジェクトの総数が変化するので、ユーザーさん側で、データ長を調整する必要があります。)


まず、dispobjmaxnum変数に、
E3DGetDispObjInfo関数で、
表示オブジェクトの総数を取得してください。


dispobjname引数は、
sdim dispobjname, 256, dispobjmaxnum
で作成してください。

maxnameno = dispobjmaxnum - 1
とすると、
dispobjname.0 から、dispobjname.maxnameno
で、dispobjmaxnum個の名前にアクセスできます。


dispobjinfo引数は、
dim dispobjinfo, DOI_MAX, dispobjmaxnum
で作成してください。

DOI_* は、e3dhsp3.asで定義されている定数です。

#define global DOI_SERIAL 0
#define global DOI_NOTUSE 1
#define global DOI_DISPSWITCH 2
#define global DOI_INVISIBLE 3
#define global DOI_MAX 4

のように、定義されています。
配列のインデックスとして、使用してください。

DOI_SERIALインデックスは、
表示オブジェクトのシリアル番号にアクセスするときに、
使用します。
表示オブジェクトのシリアル番号とは、
E3DGetPartNoByName 
で取得できる番号と同じものです。

DOI_NOTUSEインデックスは、
表示オブジェクトが無効になっているかどうかの
フラグにアクセスするときに、使用します。
無効なときに1が、有効なときに0が代入されています。

DOI_DISPSWITCHインデックスは、
表示オブジェクトのディスプレイスイッチの番号
にアクセスするときに使用します。
ディスプレイスイッチは、
RokDeBone2で、パーツごとに設定可能です。
ディスプレイスイッチのページ


DOI_INVISIBLEインデックスは、
表示オブジェクトが表示されているかどうかのフラグにアクセスするときに使用します。
詳しくは、
E3DSetInvisibleFlag
の説明をお読みください。


DOI_MAXは、
DOI_ で始まる定数の個数を定義しています。
dispobjinfoをdimするときに使用します。


dispobjinfoの内容を参照する場合には、
1つ目のインデックスに、
DOI_で始まる定数を指定し、
2つ目のインデックスに、
何番目の表示オブジェクトかを表す番号
(シリアル番号ではありません)
を指定します。

例えば、3番目の表示オブジェクトのシリアル番号に
アクセスしたいときには、
dispobjinfo.DOI_SERIAL.2
と書きます。

同様に、1番目の表示オブジェクトの
ディスプレイスイッチ番号に、
アクセスしたい場合には、
jointinfo.DOI_DISPSWITCH.0
と書きます。



具体的な使用例は、サンプルの
e3dhsp_getjointinfo.asをご覧ください。


1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : dispobjmaxnum
  データ取得用配列の大きさ(表示オブジェクトの数)を指定します。

3. [OUT] 文字列の配列変数 : dispobjname
  名前情報を取得するための配列を渡してください。
  右に書いた方法で、sdimした配列を渡してください。

4. [OUT] 配列変数 : dispobjinfo
  シリアル番号などを取得するための配列変数を渡してください。
  右に書いた方法で、dimした配列を渡してください。

5. [OUT] 変数 : dispobjgetnum
  何個lの表示オブジェクトの情報を出力したかが、代入されます。
  通常は、dispobjmaxnumと同じ値が取得されます。

ver1.0.0.1
E3DEnableTexture 描画パラメータ 一時的に、テクスチャー表示をオンオフする関数です。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : partno
  パーツを識別する番号(シリアル番号)

3. [IN] 変数または、数値 : enableflag
  テクスチャーをオフにするときには0を、
  オンにするときには1を指定してください。
ver1.0.0.1
E3DJointAddToTree モデル情報 パーツに親子関係を設定します。
childjointをparentjointの子供として、
設定します。

lastflagが0のときは、長男として追加され、
1のときは、末っ子として追加されます。

ジョイント以外に、親子関係を設定しても、
現バージョンでは、意味がありません。

childjoint, parentjointは、
E3DGetPratNoByNameまたは、
E3DGetJointInfoで取得した番号を
使用してください。

E3DjointRemake命令もお読みください。
1. [IN] 変数または、数値 : hsid
  形状データを識別する番号

2. [IN] 変数または、数値 : parentjoint
3. [IN] 変数または、数値 : childjoint
  parentjointの子供として、childjointを設定します。

4. [IN] 変数または、数値 : lastflag
  0を指定するとparentjointの長男として、
  1を指定するとparentjointの末っ子として設定されます。
ver1.0.0.1
E3DJointRemoveFromParent モデル情報 パーツの親子関係を取り除きます。

rmjointで指定したパーツと、
その親のパーツとの関係を切り離します。

rmjointの子供の情報は、そのまま残ります。

ジョイント以外に、親子関係を設定しても、
現バージョンでは、意味がありません。


この命令で、親が存在しないまま、
E3DSaveSigFileでファイルに保存すると、
そのファイルは、読み込みできなくなります。

最終的には、E3DJointAddToTreeで、
必ず、親を設定するようにしてください。

一番親のジョイントにしたい場合には、
ジョイントではないフォルダ的な役割をしているパーツの番号を取得して、
それを親に設定してください。


rmjointは、
E3DGetPratNoByNameまたは、
E3DGetJointInfoで取得した番号を
使用してください。

E3DjointRemake命令もお読みください。

1. [IN] 変数または、数値 : hsid
  形状データを識別する番号

2. [IN] 変数または、数値 : rmjoint
  rmjointと、その親の関係を切り離します。
ver1.0.0.1
E3DJointRemake モデル情報 親子関係や、有効無効の変更を、Easy3D内部の関連データに反映させます。

一連の、E3DJointAddToTreeや
E3DJointRemoveFromParent命令や
E3DSetValidFlagを
呼び出した後に、一回、呼び出してください。


1. [IN] 変数または、数値 : hsid
  形状データを識別する番号
ver1.0.0.1
E3DSigImport 形状データ hsidに読み込み済の形状データに、
filenameで指定した形状データを
インポートします。

この命令を呼ぶと、
読み込み済のモーションデータが破棄されます。

1. [IN] 変数または、数値 : hsid
  形状データを識別する番号

2. [IN] 文字列または、文字列の変数 : fname
  インポートする*.sig のパス文字列。

3. [IN] 変数または、数値 : adjustuvflag
  UV値を正規化するかどうかのフラグ
  正規化する場合は1を指定
  しない場合は0を指定

4. [IN] 変数または、数値 : mult
  倍率の値を指定してください。
  デフォルトは1.0です。
  等倍は、1.0。
  実数。

5. [IN] 変数または、数値 : offsetx
6. [IN] 変数または、数値 : offsety
7. [IN] 変数または、数値 : offsetz
  読み込み位置のオフセット座標を、
  (offsetx, offsety, offsetz)で指定します。
  ローカル座標で指定します。
  実数。

8. [IN] 変数または、数値 : rotx
9. [IN] 変数または、数値 : roty
10. [IN] 変数または、数値 : rotz
  追加形状を、X,Y,Zそれぞれの軸に対して、
  rotx, roty, rotz度だけ、回転してから、
  インポートを行います。
  回転順序は、Z,Y,Xの順番です。
  実数。

パラメータの適用順序は、
まず、倍率を掛けて、
次に、回転をして、
最後に、移動します。

ver1.0.0.1
E3DSigLoadFromBuf 形状データ メモリから形状データのロードを行います。
メモリ内には、sigファイルと同じフォーマットが
入っているとみなして、処理します。

テクスチャファイルは、通常読込と同様に、
ファイルから行います。

resdirには、テクスチャの存在するフォルダのパスを指定してください。
最後に、"\\"を付けるのを忘れないでください。

例えば、
resdir = "C:\\hsp\\Meida\\"

resdir = dir_cur + "\\"
などのように指定してください。
1. [IN] 文字列または、文字列の変数 : resdir
  テクスチャーのあるフォルダ のパス文字列。
  最後に、"\\"が必要。

2. [IN] 変数 : buf
  バッファの変数

3. [IN] 変数または、数値 : bufleng
  バッファの中のデータの長さ

4. [OUT] 変数 : hsid
  読み込んだ形状データを識別するhsid

5. [IN] 変数または、数値 : adjustuvflag
  UV値を正規化するかどうかのフラグ
  正規化する場合は1を指定
  しない場合は0を指定

6. [IN] 変数または、数値 : mult
  倍率の値を指定してください。
  デフォルトは1.0です。
  等倍は1.0。
  実数。
ver1.0.0.1
E3DSigImportFromBuf 形状データ メモリから、形状データのインポートを行います。
メモリ内には、sigファイルと同じフォーマットが
入っているとみなして、処理します。

テクスチャファイルは、通常読込と同様に、
ファイルから行います。

resdirには、テクスチャの存在するフォルダのパスを指定してください。
最後に、"\\"を付けるのを忘れないでください。

1. [IN] 変数または、数値 : hsid
  形状データを識別するhsid

2. [IN] 文字列または、文字列の変数 : resdir
  テクスチャーのあるフォルダ のパス文字列。
  最後に、"\\"が必要。

3. [IN] 変数 : buf
  バッファの変数

4. [IN] 変数または、数値 : bufleng
  バッファの中のデータの長さ


5. [IN] 変数または、数値 : adjustuvflag
  UV値を正規化するかどうかのフラグ
  正規化する場合は1を指定
  しない場合は0を指定

6. [IN] 変数または、数値 : mult
  倍率の値を指定してください。
  デフォルトは1.0です。
  等倍は1.0。
  実数。

7. [IN] 変数または、数値 : offsetx
8. [IN] 変数または、数値 : offsety
9. [IN] 変数または、数値 : offsetz
  読み込み位置のオフセット座標を、
  (offsetx, offsety, offsetz)で指定します。
  ローカル座標で指定します。
  実数。

10. [IN] 変数または、数値 : rotx
11. [IN] 変数または、数値 : roty
12. [IN] 変数または、数値 : rotz
  追加形状を、X,Y,Zそれぞれの軸に対して、
  rotx, roty, rotz度だけ、回転してから、
  インポートを行います。
  回転順序は、Z,Y,Xの順番です。
  実数。

パラメータの適用順序は、
まず、倍率を掛けて、
次に、回転をして、
最後に、移動します。

ver1.0.0.1
E3DAddMotionFromBuf モーション メモリからモーションデータのロードを行います。
メモリ内には、quaまたはmotファイルと
同じフォーマットが入っているとみなして、
処理します。

quaデータの読み込み時は、
datakindに0を指定し、
motデータの読み込み時には、
datakindに1を指定してください。
1. [IN] 変数または、数値 : hsid
  形状データを識別するhsid

2. [IN] 変数または、数値 : datakind
  quaデータの時は0を、
  motデータの時は1を指定してください。

3. [IN] 変数 : buf
  バッファの変数

4. [IN] 変数または、数値 : bufleng
  バッファの中のデータの長さ

5. [OUT] 変数 : mk
  読み込んだモーションを識別する番号

6. [OUT] 変数 : maxframe
  読み込んだモーションの最大フレーム番号
  (総フレーム数 - 1 と同じ)
ver1.0.0.1
E3DCheckFullScreenParams 描画パラメータ フルスクリーンのパラメータをチェックし、与えた条件に近いパラメータを取得します。

validflagに1が返された場合のみ、
validw, validh, validbitsの値は有効です。

validflagに0が返された場合には、
ウインドウの大きさなどの条件を変えて、
有効なパラメータが取得できるまで、
繰り返し、この命令を呼び出してください。


この命令は、E3DInitよりも前に呼ぶことを前提にしています。

この命令で、取得したvalidwとvalidhでウインドウを作成した後(screen命令やbgscr命令などで)、
E3DInit 1, validbits で、フルスクリーン初期化してください。


具体的な使用例は、
e3dhsp_fullscreen.as
に書きましたので、ご覧ください。


1. [IN] 数値または、変数 : screenw
2. [IN] 数値または、変数 : screenh
3. [IN] 数値または、変数 : bits
  使用したいフルスクリーンのパラメータを指定します。
  screenwにスクリーンの幅
  screenhにスクリーンの高さ
  bitsに色数を示すビット数を指定します。

4. [OUT] 変数 : validflag
  screenw, screenh, bitsで指定したパラメータに近い
  フルスクリーンが作れることが分かった場合に、
  1がセットされます。

  与えられたパラメータでは、フルスクリーンが作れないことが
  分かった場合には、0がセットされます。

5. [OUT] 変数 : validw
6. [OUT] 変数 : validh
7. [OUT] 変数 : validbits
  フルスクリーンの作成に有効なパラメータが返されます。
  screenw, screenh, bitsで指定したものとは、
  多少、異なる場合があります。

  これらの値は、validflagに1が代入されているときのみ有効です。
ver1.0.0.1
E3DGetMaxMultiSampleNum 描画パラメータ アンチエイリアスに必要な、マルチサンプルの数の最大値を取得します。

この関数は、E3DInitよりも前に呼び出すことを
想定しています。

E3DInitに渡すmultisamplenumの値の決定に
使用してください。


具体的な使用例は、
e3dhsp_antialias.as
に書きましたので、ご覧ください。
1. [IN] 数値または、変数 : bits
  色数を決めるビット数を指定してください。

2. [IN] 数値または、変数 : iswindowmode
  ウインドウモードの時は1を
  フルスクリーンの時は0を指定してください。

3. [OUT] 変数 : maxmultisamplenum
  マルチサンプルの数の指定に有効な、最大の値を代入します。
  0または、2から16の値が代入されます。
  ハードウェアによって、異なる値が代入されます。
ver1.0.0.1
E3DChkConfLineAndFace 当たり判定 任意の線分と、sigの面との当たり判定をします。

この当たり判定は、
hsidで指定したデータのボーン変形が、
必要になります。

ですが、同じポーズで、何回も当たり判定を行う場合などには、いちいち、ボーン変形を計算し直さない方が、高速です。
needtransに、0を指定すると、
ボーン変形計算を、省略することが出来ます。
(ポーズが変わった場合や、
カメラ位置を変えた場合には、
needtransを1にしてください。)


線分と面との当たりE3DChkConfLineAndFaceは、結構、重い処理です。
ですので、出来るだけ、呼び出し回数を、
少なくするように、心がけてください。
呼び出し回数を少なくするための工夫として、
まず、E3DChkConflictで、
おおざっぱな当たり判定を行い、
E3DChkConflictで、当たっていると判定されたときのみ、
E3DChkConfLineAndFaceを、呼び出す、
などの方法が、有効です。

E3DChkInViewより後で呼び出してください。

具体的な使用例は、
e3dhsp_ConfLineAndFace.as
に書きましたので、ご覧ください。

1. [IN] 数値または、変数 : posx1
2. [IN] 数値または、変数 : posy1
3. [IN] 数値または、変数 : posz1

4. [IN] 数値または、変数 : posx2
5. [IN] 数値または、変数 : posy2
6. [IN] 数値または、変数 : posz2

線分を、(posx1, posy1, posz1)と、(posx2, posy2, posz2)で
指定してください。
  実数。

7. [IN] 数値または、変数 : hsid
  モデルデータを識別するID

8. [IN] 数値または、変数 : needtrans
  ボーン変形計算をするかどうかのフラグ
  詳しくは、左記をご覧ください。

9. [OUT] 変数 : partno
10. [OUT] 変数 : faceno
  線分とhsidのモデルが衝突していた場合に、
  衝突したパーツの番号と、面の番号が、代入されます。
  衝突していなかった場合は、-1が代入されます。

11. [OUT] 変数 : confx
12. [OUT] 変数 : confy
13. [OUT] 変数 : confz
  衝突していた場合に、衝突した座標が代入されます。
  実数型の変数。

14. [OUT] 変数 : nx
15. [OUT] 変数 : ny
16. [OUT] 変数 : nz
  衝突していた場合に、衝突したhsidの面の法線ベクトルが代入されます。
  実数型の変数。

17. [OUT] 変数 : revfaceflag
  衝突していた面が、裏面だった場合、1が代入されます。
  表面だった場合は、0が代入されます。
ver1.0.0.1
E3DPickFace 当たり判定 2Dの画面の座標に対応する、3Dモデルの座標を取得できます。

マウスでクリックした場所に、
3Dオブジェクトを移動させることなどに使用してください。

E3DPickVertが、3Dモデルの頂点を抽出するのに対し、
E3DPickFaceは、3Dモデルの面を抽出し、
2D座標に対応する面上の3D座標を取得します。

maxdist によって、どのくらい遠くまで
検索するかを指定できます。
maxdistの値を小さくするほど、
処理は高速になります。



計算には、E3DChkInViewの結果を
使用しています。


具体的な使用例は、
e3dhsp_pickface.as
に書きましたので、ご覧ください。
1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。


3. [IN] 数値または、変数 : pos2x
4. [IN] 数値または、変数 : pos2y
  画面上の2D座標を指定してください。

5. [IN] 数値または、変数 : maxdist
  どのくらいの距離まで、3Dモデルの検索をするかを指定します。
  この値を小さくするほど、処理は高速になります。

6. [OUT] 変数 : partno
7. [OUT] 変数 : faceno
  2D座標に対応する3D座標が見つかった場合に、
  その3Dモデルのパーツの番号と、面の番号が
  代入されます。

  見つからなかった場合は、-1が代入されます。

8. [OUT] 変数 : pos3x
9. [OUT] 変数 : pos3y
10. [OUT] 変数 : pos3z
  2D座標に対応する3D座標が代入されます。
  partnoに-1以外の値が代入されているときのみ、
  これらの値は意味を持ちます。
  実数。

11. [OUT] 変数 : nx
12. [OUT] 変数 : ny
13. [OUT] 変数 : nz
  2D座標に対応する3D座標を含む面の法線ベクトルが
  代入されます。

  ベクトルの大きさは1のものを代入します。

  partnoに-1以外の値が代入されているときのみ、
  これらの値は意味を持ちます。

  実数型の変数。

14. [OUT] 変数 : dist
  視点と(pos3x, pos3y, pos3z)との距離が代入されます。
  partnoに-1以外の値が代入されているときのみ、
  この値は意味を持ちます。
  実数型の変数。

15. [IN] 数値または、変数 : calcmode
  1を指定してください。

ver1.0.0.1
E3DGetBBox モデル情報 読み込んだモデルデータのバウンダリーボックスの取得が出来ます。

カメラの設定や、プロジェクションの設定を、モデルの大きさに応じて変更する場合などに使ってください。

mode引数で、
ローカル座標か、グローバル座標かを
指定できるようにする予定です。
現在は、ローカル座標しか取得できません。


1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : partno
  パーツを識別する番号を指定してください。
  -1を指定した場合は、モデル全体のバウンダリーボックスを取得します。

3. [IN] 数値または、変数 : mode
  現在はサポートされていません。
  0を指定してください。

4. [OUT] 変数 : minx
5. [OUT] 変数 : maxx
6. [OUT] 変数 : miny
7. [OUT] 変数 : maxy
8. [OUT] 変数 : minz
9. [OUT] 変数 : maxz
  X座標の最小、最大
  Y座標の最小、最大
  Z座標の最小、最大
  がそれぞれ、代入されます。
  実数型の変数。
ver1.0.0.1
E3DGetVertNoOfFace モデル情報 facenoで指定した面に含まれる頂点の番号を3つ取得します。(3角形の頂点です)

facenoには、E3DPickFaceなどで取得した
面の番号を指定してください。

E3DGetSamePosVertの説明も
お読みください。
1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : partno
  パーツを識別する番号を指定してください。

3. [IN] 数値または、変数 : faceno
  面を識別する番号を指定してください。

4. [OUT] 変数 : vertno1
5. [OUT] 変数 : vertno2
6. [OUT] 変数 : vertno3
  3角形の面を構成する3つの頂点の番号が
  代入されます。
ver1.0.0.1
E3DGetSamePosVert モデル情報 同じ位置の頂点番号を取得する。

モデルデータ中には、同じ頂点座標で、
UV座標だけ違う頂点が存在します。

同じ位置の頂点の番号を取得する関数です。
E3DGetVertNoOfFaceと組み合わせて
使うことを想定しています。

samevertno には、見つかった頂点数分の
頂点番号が代入されます。

arraylengに5くらいの値を入れて、
dim samevertno, arrayleng
で、配列を作成してください。


1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : partno
  パーツを識別する番号を指定してください。

3. [IN] 数値または、変数 : vertno
  頂点を識別する番号を指定してください。

4. [OUT] 変数 : samevertno
  dim samevertno, arraylengで作成した配列を指定してください。
  見つかった頂点の番号が代入されます。

5. [IN] 数値または、変数 : arrayleng
  samevertno配列を作成したときの大きさを指定してください。

6. [OUT] 変数 : samenum
  見つかった頂点の数が代入されます。
  つまり、maxindex = samenum - 1とすると
  samevertno.0 から samevertno.maxindex
  まで、見つかった頂点の番号が、代入されていることになります。

ver1.0.0.1
E3DRdtscStart 同期 時間の計測。

E3DRdtscStartとE3DRdtscStopは、セットで使用します。

E3DRdtscStartを呼び出してから、
E3DRdtscStopを呼び出すまでに、
プロセッサのタイムスタンプカウンタが
どれくらい増えたかを取得できます。
なし ver1.0.0.1
E3DRdtscStop 同期 時間の計測。

E3DRdtscStartとE3DRdtscStopは、セットで使用します。

E3DRdtscStartを呼び出してから、
E3DRdtscStopを呼び出すまでに、
プロセッサのタイムスタンプカウンタが
どれくらい増えたかを取得できます。

実数型の値が取得されます。

1. [OUT] 変数 : time
  E3DRdtscStartを呼んでからの、
  タイムスタンプカウンタの増分が代入されます。
  実数型の変数。
ver1.0.0.1
E3DSaveSig2Buf モデル出力 読み込み済の形状データを、メモリ上に保存します。

保存するためのバッファは、
ユーザーさん側が用意します。

バッファの長さが分からないと、
保存操作が行えないため、
バッファ長の取得と、実際の保存とで、
合計2回、この関数を呼び出してください。


bufsize引数に0を指定すると、
保存を行わずに、
保存に必要なバッファの長さを取得します。

バッファの長さを取得した後に、
その長さをbufsize引数に指定して、
実際の保存を行ってください。


実際のコードは、以下のようになります。

E3DSaveSig2Buf hsid, sigbuf, 0, sigwritesize

sdim sigbuf, sigwritesize

E3DSaveSig2Buf hsid2, sigbuf, sigwritesize, writesize1

1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 変数 : buf
  バッファの変数を指定してください。

3. [IN] 数値または、変数 : bufsize
  0を指定すると、
  保存に必要なバッファの長さが、writesizeに代入されます。
  0以外を指定すると、
  バッファbufに、形状データを保存します。

4. [OUT] 変数 : writesize
  bufsizeに0が指定されている場合には、
  必要なバッファのサイズが代入されます。

  bufsizeに0以外が指定されている場合には、
  実際に保存したデータのバイト数を代入します。
ver1.0.0.1
E3DSaveQua2Buf モーション出力 読み込み済のモーションデータを、メモリ上に保存します。

保存するためのバッファは、
ユーザーさん側が用意します。

バッファの長さが分からないと、
保存操作が行えないため、
バッファ長の取得と、実際の保存とで、
合計2回、この関数を呼び出してください。


bufsize引数に0を指定すると、
保存を行わずに、
保存に必要なバッファの長さを取得します。

バッファの長さを取得した後に、
その長さをbufsize引数に指定して、
実際の保存を行ってください。


実際のコードは、以下のようになります。


E3DSaveQua2Buf hsid, mkid, quabuf, 0, quawritesize

sdim quabuf, quawritesize

E3DSaveQua2Buf hsid, mkid, quabuf, quawritesize, writesize2

1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : mkid
  モーションを識別する番号を指定してください。

3. [IN] 変数 : buf
  バッファの変数を指定してください。

4. [IN] 数値または、変数 : bufsize
  0を指定すると、
  保存に必要なバッファの長さが、writesizeに代入されます。
  0以外を指定すると、
  バッファbufに、形状データを保存します。

5. [OUT] 変数 : writesize
  bufsizeに0が指定されている場合には、
  必要なバッファのサイズが代入されます。

  bufsizeに0以外が指定されている場合には、
  実際に保存したデータのバイト数を代入します。
ver1.0.0.1
E3DCameraShiftLeft カメラ カメラを左に平行移動します。 1. [IN] 数値または、変数 : shift
  移動量。
  実数。
ver1.0.0.1
E3DCameraShiftRight カメラ カメラを右に平行移動します。 1. [IN] 数値または、変数 : shift
  移動量。
  実数。
ver1.0.0.1
E3DCameraShiftUp カメラ カメラを上に平行移動します。 1. [IN] 数値または、変数 : shift
  移動量。
  実数。
ver1.0.0.1
E3DCameraShiftDown カメラ カメラを下に平行移動します。 1. [IN] 数値または、変数 : shift
  移動量。
  実数。
ver1.0.0.1
E3DGetCameraQ カメラ カメラの回転変換を表すクォータニオンを
取得します。

使い方の例は、
e3dhsp_toolscamera.as
にあります。
1. [IN] 数値または、変数 : qid
  クォータニオンのIDを渡してください。
  qidで識別されるクォータニオンに、
  カメラの回転情報を代入します。

  qidには、E3DCreateQで取得したIDを使用してください。
ver1.0.0.1
E3DInvQ 算術 逆クォータニオンを取得します。

使い方の例は、
e3dhsp_toolscamera.as
にあります。
1. [IN] 数値または、変数 : srcqid
2. [IN] 数値または、変数 : dstqid
  クォータニオンのIDを渡してください。
  dstqidで識別されるクォータニオンに、
  srcqidで識別されるクォータニオンの逆クォータニオンを代入します。

  srcqid, dstqidには、
  E3DCreateQで取得したIDを使用してください。
ver1.0.0.1
E3DSetCameraTwist カメラ カメラをツイスト(ロール)させます。

カメラの使い方は、この表の前に書いてある部分をお読みください。

E3DSetCameraTwistは、どのタイプのカメラ関数を使用している場合でも、有効です。

E3DSetCameraTargetを使用している場合には、
E3DSetCameraTargetで指定した上方向のベクトルを、さらにtwistdeg分ねじります。

1. [IN] 数値または、変数 : twistdeg
  カメラをtwistdeg度だけ、ツイストします。
  実数。
ver1.0.0.1
E3DIKRotateBeta モーション IKによるジョイントの回転を行います。
目標の座標などを指定すると、
そこに近づくように、回転します。

この関数は、ベータ版です。
今後のバージョンアップで、
互換性のとれない変更をする場合がありますので、ご注意ください。


この関数では、指定したモーションの1フレーム分の姿勢情報しか変更しません。
モーション全体に、IK結果を反映させたい場合は、
IK計算した前後のキーフレーム間で、
E3DFillUpMotionを呼び出す必要があります。


使い方の例は、
e3dhsp_ikrotatebeta.as
にあります。

1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

3. [IN] 数値または、変数 : jointno
  ジョイントパーツを識別する番号を指定してください。
  E3DGetPartNoByNameなどで取得した値や、
  E3DGetJointInfoで取得したシリアル番号を指定してください。
  ジョイント以外のパーツの番号を指定するとエラーになります。
  
4. [IN] 数値または、変数 : motionid
  モーションを識別する番号を指定してください。

5. [IN] 数値または、変数 : frameno
  モーションのフレーム番号を指定してください。

6. [IN] 数値または、変数 : iklevel
  IK計算時の階層数を指定します。
  何階層、親をさかのぼって、IK計算するかを指定します。

7. [IN] 数値または、変数 : axiskind
  IKの回転の際の軸をどのように決定するかを指定します。
  0の時は、視線に平行なベクトルを使います。
  1の時は、axisx, axisy, axiszに指定した軸を使います。
  2の時は、自動的に軸を設定します。
  
8. [IN] 数値または、変数 : axisx
9. [IN] 数値または、変数 : axisy
10. [IN] 数値または、変数 : axisz
  IKの回転軸を指定します。
  axiskindに、1を指定したときのみ、有効です。
  実数。

11. [IN] 数値または、変数 : calclevel
  計算の細かさを指定します。
  正の整数を指定してください。
  値が大きいほど細かく動きますが、
  現バージョンでは、大きすぎても、うまくいきません。

12. [IN] 数値または、変数 : targetx
13. [IN] 数値または、変数 : targety
14. [IN] 数値または、変数 : targetz
  jointnoで指定したジョイントが、
  座標(targetx, targety, targetz)に近づくように、回転します。 
  実数。

15. [OUT] 数値または、変数 : resx
16. [OUT] 数値または、変数 : resy
17. [OUT] 数値または、変数 : resz
  jointnoで指定したジョイントの、計算後の座標が代入されます。
  実数。

18. [OUT] 数値または、変数 : lastparent
  姿勢の変更のあったボーンのうち、
  一番親の番号が代入されます。
  この値を、E3DRenderに渡すと、処理の高速化が出来ます。
  詳しくは、E3DRednerのところの注意事項をお読みください。

ver1.0.0.1
E3DIKRotateBeta2D モーション E3DIKRotateBetaの2D座標指定バージョンです。

目標座標が、2Dになった以外は、
E3DIKRotateBetaと同じです。
詳しくは、E3DIKRotateBetaの説明を
お読みください。

具体的な使用例は、
e3dhsp_MouseDePose.as
に書きましたので、ご覧ください。
1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

3. [IN] 数値または、変数 : jointno
  ジョイントパーツを識別する番号を指定してください。
  E3DGetPartNoByNameなどで取得した値や、
  E3DGetJointInfoで取得したシリアル番号を指定してください。
  ジョイント以外のパーツの番号を指定するとエラーになります。
  
4. [IN] 数値または、変数 : motionid
  モーションを識別する番号を指定してください。

5. [IN] 数値または、変数 : frameno
  モーションのフレーム番号を指定してください。

6. [IN] 数値または、変数 : iklevel
  IK計算時の階層数を指定します。
  何階層、親をさかのぼって、IK計算するかを指定します。

7. [IN] 数値または、変数 : axiskind
  IKの回転の際の軸をどのように決定するかを指定します。
  0の時は、視線に平行なベクトルを使います。
  1の時は、axisx, axisy, axiszに指定した軸を使います。
  2の時は、自動的に軸を設定します。
  
8. [IN] 数値または、変数 : axisx
9. [IN] 数値または、変数 : axisy
10. [IN] 数値または、変数 : axisz
  IKの回転軸を指定します。
  axiskindに、1を指定したときのみ、有効です。
  実数。

11. [IN] 数値または、変数 : calclevel
  計算の細かさを指定します。
  正の整数を指定してください。
  値が大きいほど細かく動きますが、
  現バージョンでは、大きすぎても、うまくいきません。

12. [IN] 数値または、変数 : target2dx
13. [IN] 数値または、変数 : target2dy
  jointnoで指定したジョイントが、
  指定した2D座標に近づくように、回転します。


14. [OUT] 変数 : resx
15. [OUT] 変数 : resy
16. [OUT] 変数 : resz
  jointnoで指定したジョイントの、計算後の座標が代入されます。
  実数。

17. [OUT] 変数 : lastparent
  姿勢の変更のあったボーンのうち、
  一番親の番号が代入されます。
  この値を、E3DRenderに渡すと、処理の高速化が出来ます。
  詳しくは、E3DRednerのところの注意事項をお読みください。
ver1.0.0.1
E3DGetMotionType モーション モーションのタイプを取得します。

得られるタイプの意味は、以下のようになります。
1がフレーム番号固定(Stop)
2が最終フレーム番号まで進んだら固定(Clamp)
3が最終フレーム番号まで進んだら、先頭フレームに戻る(Round)
4が最終フレーム番号まで進んだら、先頭フレームの方向に逆進する(PingPong)
5が最終フレームまで進んだら、指定フレームにジャンプする(Jump)
1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : motid
  モーションを識別する番号を指定してください。

3. [OUT] 変数 : typeptr
  左で説明したモーションの種類が代入されます。
ver1.0.0.1
E3DSetMotionType モーション モーションのタイプをセットします。

typeに指定する値の意味は、以下のようになります。
1がフレーム番号固定(Stop)
2が最終フレーム番号まで進んだら固定(Clamp)
3が最終フレーム番号まで進んだら、先頭フレームに戻る(Round)
4が最終フレーム番号まで進んだら、先頭フレームの方向に逆進する(PingPong)
1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : motid
  モーションを識別する番号を指定してください。

3. [IN] 数値または、変数 : type
  左で説明したモーションの種類を指定してください。
ver1.0.0.1
E3DGetIKTransFlag モデル情報 IK伝達禁止情報を、ジョイントから取得します。
1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : jointid
  ジョイントを識別する番号を指定してください。

3. [OUT] 変数 : flagptr
  通常の場合は0が、
  IK伝達禁止の時は1が代入されます。
ver1.0.0.1
E3DSetIKTransFlag モデル情報 IK伝達禁止情報を、ジョイントにセットします。
1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : jointid
  ジョイントを識別する番号を指定してください。

3. [IN] 数値または、変数 : flag
  通常の場合は0を、
  IK伝達禁止の時は1を指定してください。
ver1.0.0.1
E3DDestroyAllMotion モーション E3DAddMotionで読み込んだ、モーションデータを、全て、破棄します。 1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。
ver1.0.0.1
E3DGetUserInt1OfPart モデル情報 パーツに設定されている、ユーザーデータを、取得します。
1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : partno
  パーツを識別する番号を指定してください。

3. [OUT] 変数 : dataptr
  ユーザーデータが代入されます。
ver1.0.0.1
E3DSetUserInt1OfPart モデル情報 パーツに、ユーザーデータをセットします。 1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : partno
  パーツを識別する番号を指定してください。

3. [IN] 数値または、変数 : data
  ユーザーデータを指定してください。
ver1.0.0.1
E3DGetBSphere モデル情報 パーツ毎の、境界球情報を取得します。
ボーン変形を考慮した、グローバル座標系の
値が取得できます。

E3DChkInViewの計算結果を、もとにしています。

表示用オブジェクトのみに対して有効です。
(ボーンに対して呼んでも、無意味です。)
1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : partno
  パーツを識別する番号を指定してください。

3. [OUT] 変数 : centerx
4. [OUT] 変数 : centery
5. [OUT] 変数 : centerz
  境界球の中心座標が代入されます。
  実数型の変数。

6. [OUT] 変数 : r
  境界球の半径が代入されます。
  実数型の変数。
ver1.0.0.1
E3DGetChildJoint モデル情報 指定したジョイントの、子供ジョイントの数と、子供のシリアル番号を取得します。


childarray配列に、
子供の数分の、シリアル番号が
代入されます。

子供の数より、配列の長さが、大きいように
してください。
1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : parentno
  親のジョイントの番号を指定してください。

3. [IN] 数値または、変数 : arrayleng
  childarray引数に格納できる要素数を指定してください。
  dim childarray, 100とした場合は、
  100を指定してください。

  childnum引数に代入される数が、arraylengより大きい場合は、
  配列の長さが足りないことになります。


4. [OUT] 変数 : childarray
  子供ジョイントの、シリアル番号が、代入されます。
  arraylengがchildnumより、小さい場合は、
  arrayleng個の、シリアル番号しか、代入されません。

5. [OUT] 変数 : childnum
  子供ジョイントの数が、代入されます。
ver1.0.0.1
E3DDestroyMotionFrame モーション 指定したキーフレームを削除します。

モーションの変更を反映させるには、
E3DFillUpMotionを呼ぶ必要があります。

1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : motid
  モーションを識別する番号を指定してください。

3. [IN] 数値または、変数 : frameno
  削除するフレームの番号を指定してください。
  -1を指定すると、全てのキーフレームを削除します。
ver1.0.0.1
E3DGetKeyFrameNo モーション 指定したボーンの、キーフレームのフレーム番号を全て取得します。


framearrayには、
dim framearray, 50
などで作成した、大きめの配列を使用してください。

配列の長さより、framenumが、大きい場合には、エラーになりますので、
注意してください。
1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : motid
  モーションを識別する番号を指定してください。

3. [IN] 数値または、変数 : boneno
  ボーンパーツを識別する番号を指定してください。


4. [OUT] 変数 : framearray
  この配列に、フレーム番号が、代入されます。

5. [IN] 数値または、変数 : arrayleng
  framearrayをアロケート(dim)したときの要素数を指定してください。

6. [OUT] 変数 : framenum
  framearrayに格納した要素の数が代入されます。
  キーフレームの数です。
ver1.0.0.1
E3DConvScreenTo3D 算術 任意の2D座標を3D座標に変換します。

マウスの位置に対応する、3D座標を
求める場合などに、便利です。


この関数を使用して、
マウスクリックで、
3Dラインを描画するサンプルを
e3dhsp_DrawLine.as
に書きましたので、ご覧ください。

1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 数値または、変数 : x2d
3. [IN] 数値または、変数 : y2d
  変換したい、マウスの位置などを、
  (x2d, y2d)で指定します。

4. [IN] 数値または、変数 : z
  カメラからどのくらいの距離の平面上の点を取得するかを
  指定します。

  3D座標のZの値ではありません。
  カメラからの距離を制御出来るものと考えてください。
  (距離の値とは違います。)

  0.0のとき、カメラに一番近い座標がえられます。
  1.0のとき、カメラから、一番遠い(見える範囲での)
  座標がえられます。
  見える範囲とは、
  E3DSetProjectionで指定した範囲のことです。

  実際のカメラの距離と、このzの値は、
  比例関係にありません。

  zの値をちょっと大きくしただけで、
  カメラからの距離が大きく変わったり、
  反対に、zを大きく変えても、
  カメラからの距離が少ししか変わらない領域もあります。

  0に近すぎる値では、
  見えないことがあるので注意してください。

  実数。

5. [OUT] 変数 : x3d
6. [OUT] 変数 : y3d
7. [OUT] 変数 : z3d
  上で指定した2D座標に対応する3D座標が、
  (x3d, y3d, z3d)に代入されます。
  実数型の変数。
ver1.0.0.1
E3DVec3Length 算術 指定したベクトルの長さを取得します。

2点の距離の計算などに使ってください。
例えば、
(posx1, posy1, posz1)と(posx2, posy2, posz2)
の距離を計算したいときには、

vecx = posx1 - posx2
vecy = posy1 - posy2
vecz = posz1 - posz2
として、この関数に渡してください。
1. [IN] 数値または、変数 : vecx
2. [IN] 数値または、変数 : vecy
3. [IN] 数値または、変数 : vecz
  ベクトルを指定します。
  実数。

4. [OUT] 変数 : length
  ベクトルの長さが代入されます。
  実数型の変数。
ver1.0.0.1
E3DSetUV モデル情報 テクスチャーのUV座標をセットします。

partnoには、
E3DGetPartNoByNameで取得した番号を、
vertnoには、
E3DGetVertNumOfPartで取得した頂点数を
vertnumとしたとき、
0から(vertnum - 1)までの値を渡してください。

vertnoに-1を指定すると、
指定パーツの全ての頂点に対して、
処理を行うようにしました。

1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : partno
  パーツを識別する番号

3. [IN] 変数または、数値 : vertno
  頂点の番号

  -1を指定すると、全ての頂点に対して処理します。


4. [IN] 変数または、数値 : u
5. [IN] 変数または、数値 : v
  設定したいUV値の値を指定してください。
  通常は0.0から1.0の値。
  実数。

6. [IN] 変数または、数値 : setflag
  setflag に0を指定すると、
  指定UV値を、そのままセットします。

  setflagに1を指定すると、
  指定UV値を、既存のUV値に、足し算します。
ver1.0.0.1
E3DGetUV モデル情報 テクスチャーのUV座標を取得します。

partnoには、
E3DGetPartNoByNameで取得した番号を、
vertnoには、
E3DGetVertNumOfPartで取得した頂点数を
vertnumとしたとき、
0から(vertnum - 1)までの値を渡してください。

1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : partno
  パーツを識別する番号

3. [IN] 変数または、数値 : vertno
  頂点の番号

4. [OUT] 変数 : u
5. [OUT] 変数 : v
  UV座標の値が、代入されます。
  実数型の変数。
ver1.0.0.1
E3DPickBone モデル情報 指定した2D座標に近いジョイントの番号を取得します。

2D座標には、マウスの座標などを指定してください。


具体的な使用例は、
e3dhsp_MouseDePose.as
に書きましたので、ご覧ください。
1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : posx
3. [IN] 変数または、数値 : posy
  2D座標を、(posx, posy)で指定します。

4. [OUT] 変数 : jointno
  指定した2D座標に近いジョイントがある場合には、
  そのジョイントのIDが代入されます。
  
  近くにジョイントがない場合には、0以下が代入されます。
ver1.0.0.1
E3DShiftBoneTree2D モーション 指定した2D座標に近づくように、ボーンツリー全体を、移動します。


具体的な使用例は、
e3dhsp_MouseDePose.as
に書きましたので、ご覧ください。
1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 数値または、変数 : hsid
  形状データを識別するID

3. [IN] 数値または、変数 : jointno
  ジョイントを識別するID
  E3DPickBoneなどで取得した、
  ジョイントの番号を渡してください。

4. [IN] 数値または、変数 : motid
  モーションを識別するID
  E3DAddMotionで取得したmotidを指定してください。

5. [IN] 数値または、変数 : frameno
  ポーズを設定したいフレーム番号を指定してください。

6. [IN] 数値または、変数 : target2dx
7. [IN] 数値または、変数 : target2dy
  jointnoで指定したジョイントが、
  指定した2D座標に近づくように、
  ボーンツリー全体が移動します。
ver1.0.0.1
E3DGetDispSwitch モデル情報 ディスプレイスイッチの状態を取得します。

ディスプレイスイッチ情報は、ビットごとの和になっています。
ディスプレイスイッチ番号ds がオンの場合は、
2のds乗の値が足されていることになります。
例えば、ディスプレイスイッチ3だけがオンの場合は、2の3乗の8という値が代入されています。


ディスプレイスイッチがオンになっているかを調べて処理するには、
&演算子と、2のスイッチ番号乗の値を使います。

例えば、スイッチ3がオンかどうかを調べるには、

if( (dispswitch & 8) != 0 ) {
  //オンの時の処理
} else {
  //オフの時の処理
}

のようにします。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : motid
  モーションを識別するID

  motidに-1を指定すると、
  E3DSetDispSwitchで、motidに-1を指定して設定した値が
  dispswitch引数に代入されます。

  motidに-2を指定すると、
  現在設定されている、モーションのスイッチ状態が、
  dispswitch引数に代入されます。

3. [IN] 数値または、変数 : frameno
  フレーム番号を指定してください。

  framenoに-1を指定すると、
  現在のフレーム番号の、スイッチ状態が、
  dispswitch引数に代入されます。

4. [OUT] 変数 : dispswitch
  スイッチの状態が代入されます。
  詳しくは、左記をご覧ください。
ver1.0.0.1
E3DRotateBillboard ビルボード ビルボードを、カメラの方向を向けたまま、回転します。
1. [IN] 変数または、数値 : billboardid
  ビルボードを識別する番号

2. [IN] 変数または、数値 : rotdeg
  ビルボードを、rotdeg度だけ、
  回転します。
  実数。

4. [IN] 変数または、数値 : rotkind

  rotkindに0を指定すると、相対値モードになります
  現在のビルボードの向きに、
  更に、指定角度だけ、回転を加えます。

  rotkindに1を指定すると、絶対値モードになります。
  初期状態に対して、指定角度だけ、回転を加えます。
ver1.0.0.1
E3DSetBillboardUV ビルボード ビルボードのUVを設定します。

横方向にunum個、縦方向にvnum個の、タイル状に作ったテクスチャーの、タイルの番号を指定することで、指定した画像のUVを設定します。

タイル状のテクスチャ画像とタイル番号の対応は、タイル番号の説明をご覧ください。


タイルの数が12個の場合は、
タイルの番号は、0から11になりますが、
それより大きな値や小さな値を指定することも可能です。

例えば、タイルの数が12個の場合、
12を指定すると、
タイル番号0が表示され、
13を指定すると、
タイル番号1が表示され、
-1を指定すると、
タイル番号11が表示されるという具合に
機能します。

1. [IN] 変数または、数値 : bbid
  ビルボードを識別するid

2. [IN] 変数または、数値 : unum
3. [IN] 変数または、数値 : vnum
  タイルの横と縦の個数

4. [IN] 変数または、数値 : tileno
  設定したいテクスチャのタイルの番号
ver1.0.0.1
E3DCreateTexture テクスチャ 指定したファイルからテクスチャを作ります。画面と同じテクスチャを作ることも可能です。

テクスチャの操作には、この関数で取得した
テクスチャのID、texidを使用してください。


transparentに1(黒透過)を指定した場合には、
黒透過処理が行われます。
D3DPOOL_DEFAULTで、
テクスチャを作成する場合には、transparentに1を指定すると失敗することがあります。


filenameに、"MainWindow"を指定すると、
バックバッファと同じ内容で、
同じ大きさのサーフェスを作成します。
この際、poolに何を指定しても、
強制的に、システムメモリに作成します。
また、このとき、transparentに1を指定できません。

"MainWindow"を指定した場合は、
E3DSetTextureToDispObjは、使えません。
E3DCopyTextureToBackBufferを使ってください。


"MainWindow"を指定したときは、バックバッファと同じフォーマットで、それ以外は、D3DFMT_A8R8G8B8で作成します。



具体的な使用例は、
e3dhsp_TextureRaster.as
e3dhsp_TextureChange.as
に書きましたので、ご覧ください。
1. [IN] 文字列または、文字列の変数 : filename
  テクスチャファイル のパス文字列。
  "MainWindow"を指定すると、
  画面と同じ内容で、同じ大きさのテクスチャが作成されます。
  ただし、このとき、注意する点がいつくかあるので、
  左記をご覧ください。


2. [IN] 変数または、数値 : pool
  どのメモリ位置にテクスチャを作成するかを指定します。

  e3dhsp.asで定義してある
  D3DPOOL_DEFAULT (普通はビデオメモリに作られます)
  D3DPOOL_MANAGED (DirectXの管理(バックアップ有り))
  D3DPOOL_SYSTEMMEM (システムメモリに作られます)
  の中から選びます。


3. [IN] 変数または、数値 : transparent
  透過情報を指定します。

  0を指定すると、不透明のテクスチャ。
  1を指定すると、黒色を透過するテクスチャ。
  2を指定すると、テクスチャファイルのアルファに従って
  透過するテクスチャになります。


4. [OUT] 変数 : texid
  作成したテクスチャを識別するID
  テクスチャ操作の際には、このIDを使用してください。

ver1.0.0.1
E3DGetTextureInfo テクスチャ 作成したテクスチャの情報を取得します。

テクスチャのサイズは、
ビデオカードによっては、2の乗数のサイズしか
確保できないので、
ファイルのサイズと異なる場合があります。

1. [IN] 変数または、数値 : texid
  テクスチャを識別するID

2. [OUT] 変数 : width
3. [OUT] 変数 : height
  テクスチャの幅と高さ

4. [OUT] 変数 : pool
  作成メモリ位置

5. [OUT] 変数 : transparent
  透過モード

6. [OUT] 変数 : format
  フォーマット
ver1.0.0.1
E3DCopyTextureToTexture テクスチャ テクスチャからテクスチャへ、内容をコピーします。

srcとdstで大きさや、フォーマットが違う場合は、
エラーになります。
1. [IN] 変数または、数値 : texid
  コピー元のテクスチャを識別するID

2. [IN] 変数または、数値 : texid
  コピーされるテクスチャを識別するID
ver1.0.0.1
E3DGetTextureFromDispObj テクスチャ 読み込み済の3Dオブジェクトに設定されているテクスチャを取得します。

1. [IN] 変数または、数値 : hsid
  モデルデータを識別するID

  -1を指定すると、ビルボードの処理を行います。

2. [IN] 変数または、数値 : partno
  パーツの番号。
  E3DGetPartNoByNameで取得した番号を指定してください。

  hsidに-1を指定した場合には、
  ビルボードのIDを指定してください。

3. [OUT] 変数 : texid
  テクスチャを識別するID
  指定したパーツにテクスチャが貼られていない場合には、
  texidには、-1が代入されます。

ver1.0.0.1
E3DSetTextureToDispObj テクスチャ 読み込み済の3Dオブジェクトに、テクスチャを設定します。


テクスチャをセットしても、
UV座標は自動的に生成されません。
動的にテクスチャを設定する場合は、
UV座標も、E3DSetUVで、設定するか、
もしくは、
あらかじめ、モデルに仮のテクスチャを貼っておいて、UV設定しておく必要があります。


具体的な使用例は、
e3dhsp_TextureChange.as
に書きましたので、ご覧ください。
1. [IN] 変数または、数値 : hsid
  モデルデータを識別するID

  -1を指定すると、ビルボードの処理を行います。

2. [IN] 変数または、数値 : partno
  パーツの番号。
  E3DGetPartNoByNameで取得した番号を指定してください。

  hsidに-1を指定した場合には、
  ビルボードのIDを指定してください。

3. [IN] 変数または、数値 : texid
  貼り付けたいテクスチャのIDを指定します。
ver1.0.0.1
E3DRasterScrollTexture テクスチャ テクスチャに、ラスタースクロール処理を加えます。

ゆらゆらと揺れる効果が得られます。

srctexidとdesttexidは、同じ時は、エラーになります。
srcとdestで、大きさ、フォーマットが違うときも、エラーになります。

texidには、両方とも、D3DPOOL_SYSTEMMEMで作成したテクスチャーを指定してください。
それ以外も可能ですが、極端に処理速度が落ちます。
ビデオメモリにラスター処理をしたい場合は、
システムメモリのテクスチャー同士で、ラスター処理をしたあと、
ビデオメモリのテクスチャーに、E3DCopyTextureToTextureで転送してください。

具体的な使用例は、
e3dhsp_TextureRaster.as
に書きましたので、ご覧ください。
1. [IN] 変数または、数値 : srctexid
  処理する前のテクスチャを識別するID

2. [IN] 変数または、数値 : desttexid
  処理した結果を格納するテクスチャを識別するID

3. [IN] 変数または、数値 : t
  時間経過を指定します。

4. [IN] 変数または、数値 : param1
  揺れの縦方向の具合を指定します。
  param1の値が大きいほど、
  変化が激しくなります。
  実数。

5. [IN] 変数または、数値 : param2
  揺れの横方向の具合を指定します。
  param2の値が大きいほど、
  変化が激しくなります。
  実数。
ver1.0.0.1
E3DCopyTextureToBackBuffer テクスチャ テクスチャをバックバッファにコピーします。

E3DCreateTextureで、
filenameに"MainWindow"を指定して作成した
テクスチャーを、バックバッファにコピーします。

フォーマットが異なる場合は、失敗します。
1. [IN] 変数または、数値 : texid
  コピー元のテクスチャを識別するID
ver1.0.0.1
E3DDestroyTexture テクスチャ テクスチャを破棄します。
1. [IN] 変数または、数値 : texid
  テクスチャを識別するID
ver1.0.0.1
E3DSetLightAmbient ライト ライトのアンビエント色を指定します。
地面データにのみ、影響します。
1. [IN] 変数または、数値 : lightid
  ライトを識別するID

2. [IN] 変数または、数値 : R
3. [IN] 変数または、数値 : G
4. [IN] 変数または、数値 : B
  色のRGBを0から255までの値で、指定します。
ver1.0.0.1
E3DSetLightSpecular ライト ライトのスペキュラー色を指定します。
地面データにのみ、影響します。
1. [IN] 変数または、数値 : lightid
  ライトを識別するID

2. [IN] 変数または、数値 : R
3. [IN] 変数または、数値 : G
4. [IN] 変数または、数値 : B
  色のRGBを0から255までの値で、指定します。
ver1.0.0.1
E3DInvColTexture テクスチャ テクスチャの色を反転します。

具体的な使用例は、
e3dhsp_TextureRasteras
に書きましたので、ご覧ください。
1. [IN] 変数または、数値 : texid
  テクスチャを識別するID
ver1.0.0.1
E3DSaveGndFile 地面出力 地面データをgndファイルに保存します。

gndファイルの読み込み速度は、mqoファイルの読み込みよりも、
だいぶ速くなります。

sigファイルをgndファイルに変換するのは禁止とします。
(保証外です)
1. [IN] 数値または、変数 : hsid
  地面データを識別するID

2. [IN] 文字列または、文字列変数 : filename
  保存ファイル名(パス)を指定してください。
ver1.0.0.1
E3DLoadGndFile 地面 地面データ(*.gnd)を読み込んで、hsidを得る。

gndファイルの読み込み速度は、mqoファイルの読み込みよりも、
だいぶ速くなります。
1. [IN] 文字列または、文字列の変数 : fname
  *.gnd のパス文字列。

2. [OUT] 変数 : hsid
  読み込んだ形状データを識別するhsid

3. [IN] 変数または、数値 : adjustuvflag
  UV値を正規化するかどうかのフラグ
  正規化する場合は1を指定
  しない場合は0を指定

4. [IN] 変数または、数値 : mult
  読み込み倍率を指定してください。
  等倍は1.0。
  実数。

ver1.0.0.1
E3DLoadGndFileFromBuf 地面 メモリから地面データのロードを行います。
メモリ内には、gndファイルと同じフォーマットが
入っているとみなして、処理します。

テクスチャファイルは、通常読込と同様に、
ファイルから行います。

resdirには、テクスチャの存在するフォルダのパスを指定してください。
最後に、"\\"を付けるのを忘れないでください。

例えば、
resdir = "C:\\hsp\\Meida\\"

resdir = dir_cur+ "\\"
などのように指定してください。

1. [IN] 文字列または、文字列の変数 : resdir
  テクスチャーのあるフォルダ のパス文字列。
  最後に、"\\"が必要。

2. [IN] 変数 : buf
  バッファの変数

3. [IN] 変数または、数値 : bufleng
  バッファの中のデータの長さ

4. [OUT] 変数 : hsid
  読み込んだ形状データを識別するhsid

5. [IN] 変数または、数値 : adjustuvflag
  UV値を正規化するかどうかのフラグ
  正規化する場合は1を指定
  しない場合は0を指定

ver1.0.0.1
E3DCreateTextureFromBuf テクスチャ メモリに読み込んだ絵のデータから、テクスチャを作成します。

filenameの代わりに、バッファを指定し、
"MainWindow"が扱えないこと以外は、
E3DCreateTextureと同じです。

E3DCreateTextureの説明を、
お読みください。


例えば、以下のような使い方になります。

sdim buf0, 800000 ;ファイルサイズより大きめ
bload "pict.bmp", buf0
bufsize0 = strsize
E3DCreateTextureFromBuf buf0, bufsize0, D3DPOOL_MANAGED, 1, texid0

1. [IN] 変数 : buf
  バッファの変数

2. [IN] 変数または、数値 : bufleng
  バッファの中のデータの長さ(バイト)

3. [IN] 変数または、数値 : pool
  どのメモリ位置にテクスチャを作成するかを指定します。

  e3dhsp.asで定義してある
  D3DPOOL_DEFAULT (普通はビデオメモリに作られます)
  D3DPOOL_MANAGED (DirectXの管理(バックアップ有り))
  D3DPOOL_SYSTEMMEM (システムメモリに作られます)
  の中から選びます。


4. [IN] 変数または、数値 : transparent
  透過情報を指定します。

  0を指定すると、不透明のテクスチャ。
  1を指定すると、黒色を透過するテクスチャ。
  2を指定すると、テクスチャファイルのアルファに従って
  透過するテクスチャになります。


5. [OUT] 変数 : texid
  作成したテクスチャを識別するID
  テクスチャ操作の際には、このIDを使用してください。
ver1.0.0.1
E3DLoadSoundFromBuf サウンド メモリから音データを読み込み、IDを取得します。

メモリから読み込むこと以外は、
E3DLoadSoundと同じです。

E3DLoadSoundの説明をお読みください。
1. [IN] 変数 : buf
  バッファの変数

2. [IN] 変数または、数値 : bufleng
  バッファの中のデータの長さ(バイト)

3. [IN] 変数または、数値 : type
  midiのときは1、それ以外は0を指定してください。

4. [IN] 変数または、数値 : use3dflag
  ファイルをステレオサウンドとして読み込む場合は0を、
  3Dサウンドとして読み込む場合は1を指定してください。
  指定しなかった場合は、ステレオサウンドと見なされます。

5. [IN] 変数または、数値 : bufnum
  同じIDの、3Dサウンドを、同時にいくつ重ねて再生できるかを
  指定します。

  3Dサウンドではない場合は、
  今まで通り、DirectMusicが、自動的に、
  重ねて再生してくれます。

6. [OUT] 変数 : soundid
  作成した音データを識別する番号が代入されます。
ver1.0.0.1
E3DTwistBone モーション ボーンをツイストします。

指定したジョイントと、その親のジョイントのベクトルを軸として、回転します。

boneno引数に指定したジョイントに
親のジョイントがない場合は、
この関数を呼んでも、
何も効果はありません。

1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : motid
  モーションを識別する番号

3. [IN] 変数または、数値 : frameno
  操作するモーションのフレーム番号

4. [IN] 変数または、数値 : jointno
  ジョイントを識別する番号
  E3DGetPartNoByNameなどで取得した値や、
  E3DGetJointInfoで取得したシリアル番号を指定してください。
  ジョイント以外のパーツの番号を指定すると
  エラーになります。



5. [IN] 変数または、数値 : twistdeg
  twistdeg 度だけ、ツイストします。
  実数。
ver1.0.0.1
E3DSetStartPointOfSound サウンド 音の再生開始位置を指定します。

E3DPlaySoundの直前に呼んでください。

E3DLoadSoundのbufnum引数に1を指定していて、3Dサウンドの場合は、
再生中の音にも影響します。

time引数は、
midiの場合と、3Dサウンド(wav)の場合で
意味が異なりますので、注意してください。

midiと、3Dサウンドのための関数です。
3Dサウンド以外のwavには、
効果がありません。

1. [IN] 変数または、数値 : soundid
  音を識別する番号を、指定します。

2. [IN] 変数または、数値 : time
  3Dサウンドの場合は、
  ミリ秒(1秒が1000)を指定してください。

  midiの場合は、4分音符の数による数値を指定してください。
  4分音符あたり768の数値を指定してください。

ver1.0.0.1
E3DGetBoneQ モーション ボーンのクォータニオンを取得します。

kind引数の値により、
親のクォータニオンの影響を受けたものと、
受けていないものの2種類取得できます。

モーションを読み込んでいないときは、
エラーになります。

指定したframenoに、キーフレームがない場合は、
補間計算した結果を取得します。

エンドジョイント(子供を持たないジョイント)
に対しても、呼ぶことが出来ます。

ボーン以外の番号をbonenoに入れると
エラーになります。

1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : boneno
  ボーンを識別する番号を指定してください。
  E3DGetBoneNoByNameまたは、
  E3DGetPartNoByNameで取得した番号を指定してください。

3. [IN] 数値または、変数 : motid
  モーションを識別する番号を指定してください。

4. [IN] 数値または、変数 : frameno
  フレームの番号を指定してください。

5. [IN] 数値または、変数 : kind
  親の影響を受けたクォータニオンを
  取得する場合は、1を指定してください。

  親の影響を受けていないクォータニオンを
  取得する場合は、0を指定してください。

  親の影響を受け、
  更に、モデル全体の向きの影響を受けたクォータニオンを取得
  するには、2を指定してください。


6. [IN] 数値または、変数 : qid
  クォータニオンを識別する番号。
  E3DCreateQで取得した番号を指定してください。

  qidで識別されるクォータニオンの内容に、
  指定したボーンのクォータニオンの内容を、
  代入します。
ver1.0.0.1
E3DSetBoneQ モーション ボーンのクォータニオンをセットします。

指定したフレームに、モーションポイントが存在しない場合は、
自動的に、モーションポイントを作成した後、
クォータニオンをセットします。

E3DFillUpMotionを呼び出さないと、
他のフレームには、反映されません。


1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : boneno
  ボーンを識別する番号を指定してください。
  E3DGetBoneNoByNameまたは、
  E3DGetPartNoByNameで取得した番号を指定してください。

3. [IN] 数値または、変数 : motid
  モーションを識別する番号を指定してください。

4. [IN] 数値または、変数 : frameno
  フレームの番号を指定してください。

5. [IN] 数値または、変数 : qid
  クォータニオンを識別する番号。
  E3DCreateQで取得した番号を指定してください。

  qidで識別されるクォータニオンの内容を、
  ボーンの姿勢にセットします。
ver1.0.0.1
E3DIsSoundPlaying サウンド 音が再生中かどうかを調べます。
1. [IN] 変数または、数値 : soundid
  音を識別する番号を、指定します。

2. [OUT] 変数 : playing
  再生中の場合は1が、
  そうでない場合は0が、代入されます。

ver1.0.0.1
E3DIKTranslate モーション IKで、ボーンの位置を移動します。

RokDeBone2のTボタンと同様に、
一番親のボーン以外で、この関数を呼ぶと、
モデルの形状が、崩れます。
形状を保ちたい場合は、E3DIKRotateBetaを使用してください。

位置には、グローバル座標を指定してください。

モーションを読み込んでいないと、エラーになります。

framenoに、モーションポイントがない場合は、
自動的に作成した後に、移動をセットします。

ジョイント以外に対して呼ぶとエラーになります。

他のフレームにも、結果を反映させたい場合は、
E3DFillUpMotionを呼んでください。

1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : boneno
  ボーンを識別する番号を指定してください。
  E3DGetBoneNoByNameまたは、
  E3DGetPartNoByNameで取得した番号を指定してください。

3. [IN] 数値または、変数 : motid
  モーションを識別する番号を指定してください。

4. [IN] 数値または、変数 : frameno
  フレームの番号を指定してください。

5. [IN] 数値または、変数 : posx
6. [IN] 数値または、変数 : posy
7. [IN] 数値または、変数 : posz
  ボーンを移動させたいグローバル座標を、
  (posx, posy, posz)で指定します。
  実数。

ver1.0.0.1
E3DSetUVTile モデル情報 ひとつの画像に、タイル画像を敷き詰めたテクスチャの、UV座標を、タイル番号で、セットできます。

タイル状のテクスチャ画像とタイル番号の対応は、タイル番号の説明をご覧ください。


タイルの数が12個の場合は、
タイルの番号は、0から11になりますが、
それより大きな値や小さな値を指定することも可能です。

例えば、タイルの数が12個の場合、
12を指定すると、
タイル番号0が表示され、
13を指定すると、
タイル番号1が表示され、
-1を指定すると、
タイル番号11が表示されるという具合に
機能します。



5種類の投影、貼り付けをサポートします。

1. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

2. [IN] 数値または、変数 : partno
  表示パーツを識別する番号を指定してください。
  E3DGetPartNoByNameで取得した番号を指定してください。

3. [IN] 数値または、変数 : texrule
  投影、貼り付けのモードを指定します。

  0を指定すると、X軸投影
  1を指定すると、Y軸投影
  2を指定すると、Z軸投影
  3を指定すると、円筒貼り付け
  4を指定すると、球貼り付け
  です。


4. [IN] 数値または、変数 : unum
  テクスチャのタイル画像の
  横方向の個数を指定してください。

5. [IN] 数値または、変数 : vnum
  テクスチャのタイル画像の
  縦方向の個数を指定してください。

6. [IN] 数値または、変数 : tileno
  表示したいタイルの番号を指定してください。
  タイル番号については、左記をお読みください。
ver1.0.0.1
E3DImportMQOFileAsGround 地面 hsidに読み込み済の地面データに、
filenameで指定した地面データを
インポート(追加読み込み)します。



1. [IN] 数値または、変数 : hsid
  読み込み済の地面モデルを識別する番号を
  指定してください。

2. [IN] 文字列または、文字列変数 : filename
  読み込む、mqo ファイル名。

3. [IN] 変数または、数値 : adjustuvflag
  UV座標を正規化したいときは1を、
  そうでないときは、0を指定してください。

4. [IN] 変数または、数値 : mult
  形状データの座標に掛ける数値。
  座標値 * multで計算されます。
  等倍は1.0。
  実数。

5. [IN] 変数または、数値 : offsetx
6. [IN] 変数または、数値 : offsety
7. [IN] 変数または、数値 : offsetz
  読み込み位置のオフセット座標を、
  (offsetx, offsety, offsetz)で指定します。
  ローカル座標で指定します。
  実数。

8. [IN] 変数または、数値 : rotx
9. [IN] 変数または、数値 : roty
10. [IN] 変数または、数値 : rotz
  追加形状を、X,Y,Zそれぞれの軸に対して、
  rotx, roty, rotz度だけ、回転してから、
  インポートを行います。
  回転順序は、Z,Y,Xの順番です。
  実数。

パラメータの適用順序は、
まず、倍率を掛けて、
次に、回転をして、
最後に、移動します。
ver1.0.0.1
E3DLoadMQOFileAsMovableAreaFromBuf 移動可能領域を定義するデータを、メモリから読み込みます。

メモリから読み込むこと以外は、
E3DLoadMQOFileAsMovableArea
と同じです。
E3DLoadMQOFileAsMovableArea
の説明をお読みください。

メモリから読み込む手順は、
sdim buf0, 500000 ;ファイルサイズより大きく
bload ファイル名, buf0
bufsize = strsize

E3DLoadMQOFileAsMovableAreaFromBuf
buf0, bufsize, mult100, hsid

という流れになります。


1. [IN] 変数 : buf
  バッファの変数

2. [IN] 変数または、数値 : bufleng
  バッファの中のデータの長さ

3. [IN] 変数または、数値 : mult
  形状データの座標に掛ける数値。
  座標値 * mult で計算されます。
  等倍は1.0。
  実数。

4. [OUT] 変数 : hsid
  作成した壁データを識別するhsidが代入されます。
ver1.0.0.1
E3DChkThreadWorking スレッド管理 関数の最後に、Threadが付いている関数は、新たにスレッドを作成します。

この作成したスレッドが、
現在、動作中であるかどうかをチェックするための関数です。

スレッドが終了している場合には、
スレッドの動作結果が、
returnval1, reteurnval2変数で取得できます。
この変数は、hsidや、モーションIDを取得するために、使用します。


具体的な使用例は、
e3dhsp_LoadByNewThread.as
をご覧ください。

1. [IN] 変数または、数値 : threadid
  スレッドを識別するID
  名前の最後にThreadが付いている関数で、
  取得したIDを指定してください。

2. [OUT] 変数 : working
  スレッドが、動作中かどうかが代入されます。
  動作中の場合は1が、
  動作が終了している場合には0が、代入されます。

  workingが0の場合は、
  returnval1, returnval2に代入される値が、
  意味を持ちます。

3. [OUT] 変数 : returnval1
4. [OUT] 変数 : returnval2
  スレッドの実行結果が、代入されます。
  returnval1, returnval2に代入される値の
  意味については、
  各Thread作成関数の説明をお読みください。

ver1.0.0.1
E3DLoadMQOFileAsGroundThread 地面 スレッドを作成して、E3DLoadMQOFileAsGroundを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が、代入されます。

threadidは、
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は、全部で、4098回まで、
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)

スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

複数のスレッド読み込み関数を、
同時に呼ぶ場合には、
テクスチャが同じディレクトリにないと、
テクスチャの読み込みに失敗することがあります。


E3DLoadMQOFileAsGroundの説明もお読みください。
1. [IN] 文字列または、文字列変数 : filename
  読み込む、mqo ファイル名。

2. [IN] 変数または、数値 : mult
  形状データの座標に掛ける数値。
  座標値 * mult で計算されます。
  等倍は1.0。
  実数。

3. [IN] 変数または、数値 : adjustuvflag
  UV座標を正規化したいときは1を、
  そうでないときは、0を指定してください。
  何も指定しないときは、0として扱われます。

4. [OUT] 変数 : threadid
  作成したスレッドを識別するIDが、代入されます。
ver1.0.0.1
E3DSigLoadThread 形状データ スレッドを作成して、E3DSigLoadを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が、代入されます。

threadidは、
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は、全部で、4098回まで、
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)

スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

複数のスレッド読み込み関数を、
同時に呼ぶ場合には、
テクスチャが同じディレクトリにないと、
テクスチャの読み込みに失敗することがあります。


E3DSigLoadの説明も、お読みください。
1. [IN] 文字列または、文字列の変数 : fname
  *.sig のパス文字列。

2. [IN] 変数または、数値 : adjustuvflag
  UV値を正規化するかどうかのフラグ
  正規化する場合は1を指定
  しない場合は0を指定

3. [IN] 変数または、数値 : mult
  読み込み倍率を指定してください。
  等倍は1.0。
  実数。

4. [OUT] 変数 : threadid
  作成したスレッドを識別するIDが、代入されます。

ver1.0.0.1
E3DSigLoadFromBufThread 形状データ スレッドを作成して、E3DSigLoadFromBufを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が、代入されます。

threadidは、
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は、全部で、4098回まで、
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)

スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

複数のスレッド読み込み関数を、
同時に呼ぶ場合には、
テクスチャが同じディレクトリにないと、
テクスチャの読み込みに失敗することがあります。


E3DSigLoadFromBufの説明もお読みください。
1. [IN] 文字列または、文字列の変数 : resdir
  テクスチャーのあるフォルダ のパス文字列。
  最後に、"\\"が必要。

2. [IN] 変数 : buf
  バッファの変数

3. [IN] 変数または、数値 : bufleng
  バッファの中のデータの長さ

4. [IN] 変数または、数値 : adjustuvflag
  UV値を正規化するかどうかのフラグ
  正規化する場合は1を指定
  しない場合は0を指定

5. [IN] 変数または、数値 : mult
  倍率を指定してください。
  デフォルトは1.0です。
  等倍は、1.0。
  実数。

6. [OUT] 変数 : threadid
  作成したスレッドを識別するIDが、代入されます。
ver1.0.0.1
E3DLoadMQOFileAsMovableAreaThread スレッドを作成して、E3DLoadMQOFileAsMovableAreaを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が、代入されます。

threadidは、
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は、全部で、4098回まで、
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)

スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

E3DLoadMQOFileAsMovableAreaの説明もお読みください。
1. [IN] 文字列または、文字列変数 : filename
  読み込む、mqo ファイル名。

2. [IN] 変数または、数値 : mult
  形状データの座標に掛ける数値。
  座標値 * mult で計算されます。
  等倍は1.0。
  実数。

3. [OUT] 変数 : threadid
  作成したスレッドを識別するIDが、代入されます。
ver1.0.0.1
E3DLoadMQOFileAsMovableAreaFromBufThread スレッドを作成して、E3DLoadMQOFileAsMovableAreaFromBufを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が、代入されます。

threadidは、
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は、全部で、4098回まで、
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)

スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

E3DLoadMQOFileAsMovableAreaFromBufの説明もお読みください。
1. [IN] 変数 : buf
  バッファの変数

2. [IN] 変数または、数値 : bufleng
  バッファの中のデータの長さ

3. [IN] 変数または、数値 : mult
  形状データの座標に掛ける数値。
  座標値 * mult で計算されます。
  等倍は1.0。
  実数。

4. [OUT] 変数 : threadid
  作成したスレッドを識別するIDが、代入されます。


ver1.0.0.1
E3DLoadGroundBMPThread 地面 スレッドを作成して、E3DLoadGroundBMPを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が、代入されます。

threadidは、
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は、全部で、4098回まで、
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)

スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

E3DLoadGroundBMPの説明もお読みください。
1. [IN] 文字列または、文字列変数 : filename1
  地面の座標情報の元となる、BMPファイル名

2. [IN] 文字列または、文字列変数 : filename2
  地面の道の情報の元となる、BMPファイル名

3. [IN] 文字列または、文字列変数 : filename3
  地面の川の情報の元となる、BMPファイル名

4. [IN] 文字列または、文字列変数 : filename4
  地面、道、川の模様を決める、BMPファイル名

5. [IN] 変数または、数値 : maxx
  地面のX座標の最大値
  実数。

6. [IN] 変数または、数値 : maxz
  地面のZ座標の最大値
  実数。

7. [IN] 変数または、数値 : divx
  X方向の分割数

8. [IN] 変数または、数値 : divz
  Z方向の分割数

9. [IN] 変数または、数値 : maxheight
  地面の高さの最大値
  実数。

10. [OUT] 変数 : threadid
  作成したスレッドを識別するIDが、代入されます。
ver1.0.0.1
E3DLoadGndFileThread 地面 スレッドを作成して、E3DLoadGNDFileを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が、代入されます。

threadidは、
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は、全部で、4098回まで、
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)

スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

複数のスレッド読み込み関数を、
同時に呼ぶ場合には、
テクスチャが同じディレクトリにないと、
テクスチャの読み込みに失敗することがあります。


E3DLoadGNDFileの説明もお読みください。
1. [IN] 文字列または、文字列の変数 : fname
  *.gnd のパス文字列。

2. [IN] 変数または、数値 : adjustuvflag
  UV値を正規化するかどうかのフラグ
  正規化する場合は1を指定
  しない場合は0を指定

3. [IN] 変数または、数値 : mult
  読み込み倍率を指定してください。
  等倍は1.0。
  実数。

4. [OUT] 変数 : threadid
  作成したスレッドを識別するIDが、代入されます。
ver1.0.0.1
E3DLoadGndFileFromBufThread 地面 スレッドを作成して、E3DLoadGNDFileFromBufを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が、代入されます。

threadidは、
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は、全部で、4098回まで、
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)

スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。


複数のスレッド読み込み関数を、
同時に呼ぶ場合には、
テクスチャが同じディレクトリにないと、
テクスチャの読み込みに失敗することがあります。


E3DLoadGNDFileFromBufの説明もお読みください。
1. [IN] 文字列または、文字列の変数 : resdir
  テクスチャーのあるフォルダ のパス文字列。
  最後に、"\\"が必要。

2. [IN] 変数 : buf
  バッファの変数

3. [IN] 変数または、数値 : bufleng
  バッファの中のデータの長さ

4. [IN] 変数または、数値 : adjustuvflag
  UV値を正規化するかどうかのフラグ
  正規化する場合は1を指定
  しない場合は0を指定

5. [OUT] 変数 : threadid
  作成したスレッドを識別するIDが、代入されます。
ver1.0.0.1
E3DAddMotionThread モーション スレッドを作成して、E3DAddMotionを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が、代入されます。

threadidは、
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は、全部で、4098回まで、
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)

スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モーションをを識別するhsidが代入されます。
returnval2に、
最大フレーム番号が代入されます。

この関数が終了するまで、
この関数に渡したhsidに対して、
モーションの再生命令などは、使わないようにしてください。


E3DAddMotionの説明もお読みください。

1. [IN] 変数または、数値 : hsid
  どのモデルデータに対するモーションかを指定する。

2. [IN] 文字列または、文字列の変数 : fname
  *.quaのパス文字列。

3. [OUT] 変数 : threadid
  作成したスレッドを識別するIDが、代入されます。
ver1.0.0.1
E3DAddMotionFromBufThread モーション スレッドを作成して、E3DAddMotionFromBufを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が、代入されます。

threadidは、
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は、全部で、4098回まで、
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)

スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モーションをを識別するhsidが代入されます。
returnval2に、
最大フレーム番号が代入されます。

この関数が終了するまで、
この関数に渡したhsidに対して、
モーションの再生命令などは、使わないようにしてください。


E3DAddMotionFromBufの説明もお読みください。
1. [IN] 変数または、数値 : hsid
  形状データを識別するhsid

2. [IN] 変数または、数値 : datakind
  quaデータの時は0を、
  motデータの時は1を指定してください。

3. [IN] 変数 : buf
  バッファの変数

4. [IN] 変数または、数値 : bufleng
  バッファの中のデータの長さ

5. [OUT] 変数 : threadid
  作成したスレッドを識別するIDが、代入されます。

ver1.0.0.1
E3DGetShaderType モデル情報 シェーダーの種類と、オーバーフロー処理を取得します。

それぞれの値の意味は、
E3DSetShaderTypeの説明をお読みください。
1. [IN] 変数または、数値 : hsid
  形状データを識別するhsid

2. [OUT] 変数 : shader
3. [OUT] 変数 : overflow
  シェーダーの種類と、
  オーバーフロー処理が、代入されます。
ver1.0.0.1
E3DSetShaderType モデル情報 シェーダーの種類と、
色のオーバーフロー処理を設定します。

シェーダーの種類は、
e3dhsp.asのCOL_ で始まる定数で、定義されています。

COL_OLD
  従来のRokDeBone2の計算法
  emissiveは、無効。
  スペキュラーは、形だけの実装。
  一番高速。
COL_PHONG
  Lambertのディフーズ
  Phongのスペキュラー
  emissive有り
COL_BLINN
  Lambertのディフーズ
  Blinnのスペキュラー
  emissive有り
COL_SCHLICK
  Lambertのディフーズ
  Schlickのスペキュラー
  emissive有り
COL_MQCLASSIC
  メタセコイアのマテリアルで
  Classicを指定したときのモード
  emissive有り

COL_TOON1
  テクスチャを使用したトゥーン表示
  頂点色は設定しないことを推奨。


色のオーバーフロー処理は、
e3dhsp3.asのOVERFLOW_ で始まる定数で、
定義されています。

OVERFLOW_CLAMP
  クランプ。
  自己照明がきついと、色が破綻する。
  一番高速。
OVERFLOW_SCALE
  スケール。色は破綻しないが、暗くなる。
OVERFLOW_ORG
  オリジナル。明るさを保つ。


1. [IN] 変数または、数値 : hsid
  形状データを識別するhsid

2. [IN] 変数または、数値 : shader
3. [IN] 変数または、数値 : overflow
  シェーダーの種類と、
  オーバーフロー処理の指定をします。
  値の意味は、左記をご覧ください。
ver1.0.0.1
E3DSetLightBlendMode モデル情報 頂点のdiffuse色と、ライト色をブレンディングする際の、方法を設定します。
ブレンド方式には、PhotoShopのブレンドモードを使います。


mode引数には、LBLEND_で始まる定数を使用します。
これらの定数は、e3dhsp.asで定義されています。

LBLEND_MULT
  乗算
LBLEND_SCREEN
  スクリーン
LBLEND_OVERLAY
  オーバーレイ
LBLEND_HARDLIGHT
  ハードライト
LBLEND_DODGE
  覆い焼き

1. [IN] 変数または、数値 : lid
  ライトを識別するID

2. [IN] 変数または、数値 : mode
  ブレンドモードを指定します。
  LBLEND_ で始まる定数を使用します。

ver1.0.0.1
E3DGetLightBlendMode モデル情報 頂点のdiffuse色と、ライト色とのブレンドモードを取得します。

取得されるモードの数値は、
e3dhsp.asで定義されている
LBLEND_で始まる定数です。

詳しくは、E3DSetLightBlendModeをお読みください。
1. [IN] 変数または、数値 : lid
  ライトを識別するID

2. [OUT] 変数 : mode
  ブレンドモードが代入されます。
ver1.0.0.1
E3DSetEmissive モデル情報 パーツのemissive色をセットする関数です。

指定した色を、
そのまま設定、乗算して設定、加算して設定、
減算して設定の、4種類出来ます。

その時点で、表示されている色に対して、
乗算、加算、減算します。


1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードの色を設定できます。

2. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

  partnoに-1を渡すと、
  全てのパーツに色をセットできます。

3. [IN] 数値または、変数 : R
4. [IN] 数値または、変数 : G
5. [IN] 数値または、変数 : B
  指定したい色を(R,G,B)で指定します。
  0から255までの値を指定してください。

  setflagに乗算を指定した場合は、
  各成分に、R/255, G/255, B/255を乗算します。

6. [IN] 数値または、変数 : setflag
  setflagが0のときは、
  パーツの色を(R,G,B)にセットします。

  setflagが1のときは、
  パーツの色に(R/255, G/255, B/255)を乗算します。

  setflagが2のときは、
  パーツの色に(R,G,B)を足し算します。

  setflagが3のときは、
  パーツの色から(R,G,B)を減算します。

7. [IN] 数値または、変数 : vertno
  指定した頂点番号の色をセットします。
  この引数を省略、または、-1をセットした場合には、
  partnoで指定したパーツ全体の色の設定をします。
ver1.0.0.1
E3DSetSpecularPower モデル情報 パーツのspecular powerをセットする関数です。

指定した色を、
そのまま設定、乗算して設定、加算して設定、
減算して設定の、4種類出来ます。

その時点で、表示されている色に対して、
乗算、加算、減算します。


1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードの色を設定できます。

2. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

  partnoに-1を渡すと、
  全てのパーツに色をセットできます。

3. [IN] 数値または、変数 : pow
4. [IN] 数値または、変数 : mult
  pow / mult の値を、setflagに基づいて、
  現在の色に対して処理を行います。

5. [IN] 数値または、変数 : setflag
  setflagが0のときは、
  指定した値をセットします。

  setflagが1のときは、
  現在の値に、指定した値を乗算します。

  setflagが2のときは、
  現在の値に、指定した値を足し算します。

  setflagが3のときは、
  現在の値に、指定した値を減算します。

6. [IN] 数値または、変数 : vertno
  指定した頂点番号の色をセットします。
  この引数を省略、または、-1をセットした場合には、
  partnoで指定したパーツ全体の色の設定をします。

ver1.0.0.1
E3DGetEmissive モデル情報 任意のパーツの任意の頂点の、emissive色を取得します。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードの色を取得できます。

2. [IN] 数値または、変数 : partno
  取得したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

3. [IN] 数値または、変数 : vertno
  色を取得したい頂点の番号を指定します。

4. [OUT] 変数 : r
5. [OUT] 変数 : g
6. [OUT] 変数 : b
   指定した頂点のdiffuse色が、
   RGB = ( r, g, b )に代入されます。
   r, g, bそれぞれ、0から255の値が代入されます。
ver1.0.0.1
E3DGetSpecularPower モデル情報 任意のパーツの任意の頂点の、specular powerを取得します。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードの色を取得できます。

2. [IN] 数値または、変数 : partno
  取得したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

3. [IN] 数値または、変数 : vertno
  色を取得したい頂点の番号を指定します。

4. [OUT] 変数 : pow
   指定した頂点のspecular powerが、
   代入されます。
  実数。
ver1.0.0.1
E3DGetInfElemNum ボーン影響 指定した頂点が、何個のボーンの影響を受けているかを取得します。

影響度情報は、影響を受けるボーンごとに存在します。
(影響を受けるボーンの数だけ存在します)

この影響度情報のことを、
Easy3Dでは、InfElemと呼びます。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : partno
  取得したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

3. [IN] 数値または、変数 : vertno
  頂点の番号

4. [OUT] 変数 : num
  影響度情報の個数が代入されます。
ver1.0.0.1
E3DGetInfElem ボーン影響 指定した頂点の、ボーン影響度情報を取得します。

infnoには、
E3DGetInfElemNumで取得した数値をinfnumとすると、
0から(infnum - 1)の値を渡してください。


childjointnoに0以下(0を含む)の数値が取得された場合には、そのデータはダミーデータですので、無視するようにしてください。



calcmodeの意味
calcmodeは、影響度の計算方法を表します。
e3dhsp3.as中で定義されているCALCMODE_で始まる定数を使用します。
以下のように定義されています。
#define CALCMODE_NOSKIN0 0
#define CALCMODE_ONESKIN0 1
#define CALCMODE_ONESKIN1 2
#define CALCMODE_DIRECT0 3
#define CALCMODE_SYM 4
NOSKIN0は、スキニング無し。
ONESKIN0は、距離と角度によりスキニング。
ONESKIN1は、距離のみによりスキニング。
DIRECT0は、直接数値指定。
SYMは、対称コピーによる指定。
を表します。



Easy3D内部での影響度の計算方法
影響度を算出する際には、
orginf, dispinf, userrate, normalizeflagを使います。
orginfは、calcmodeで指定した方法で、算出した影響度。
userrateは、比重。
normalizeflagは、正規化(一つの頂点の影響度の合計が1になるようにする)をするかどうかのフラグ。
dispinfが、最終的な、影響度。
まず、InfElemごとに、以下の計算をします。
orginf * userrate / 100
normalizeflagが0のときは、この値がそのまま、dispinfになります。
normalizeflagが1のときは、
全部のInfElemの影響度(dispinf)の合計が1になるように、正規化します。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : partno
  取得したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

3. [IN] 数値または、変数 : vertno
  頂点の番号

4. [IN] 数値または、変数 : infno
  影響度情報の番号
  0から(影響度の個数-1)までの数

5. [OUT] 変数 : childjointno
  どのボーンの影響を受けるかが代入されます。
  この値が、0以下の値の時は、ダミーデータです。
  ボーンの線分の内、子供の方のジョイントの番号が
  代入されます。

6. [OUT] 変数 : calcmode
  影響度の計算方法が代入されます。

7. [OUT] 変数 : userrate
  比重が代入されます。
  %値が代入されます。
  例えば、100%の場合は、100.0が代入されます。
  実数。

8. [OUT] 変数 : orginf
9. [OUT] 変数 : dispinf
  orginf, dispinfの値が代入されます。
  それぞれの意味は、左記をご覧ください。
  実数型の変数。
ver1.0.0.1
E3DSetInfElem ボーン影響 頂点にボーン影響度を設定します。


paintmodeの意味
paintmodeは、影響度の設定方法を表します。
e3dhsp3.as内で、PAINT_で始まる定数で、
定義されています。
#define PAINT_NOR 0
#define PAINT_EXC 1
#define PAINT_ADD 2
#define PAINT_SUB 3
#define PAINT_ERA 4
NORは、
すでに設定してある影響度情報に、影響度データを追加します。
同じボーンの情報が既にある場合は、上書きします。
EXCは、すでに設定してある影響度情報を、破棄してから、影響度データを設定します。
ADDは、すでに設定してある影響度の比重に、指定した比重を足し算します。
SUBは、すでに設定してある影響度の比重から、指定した比重を引き算します。
ERAは、指定したボーンの影響度データを削除します。

calcmodeについては、
E3DGetInfElemの説明をご覧ください。


calcmodeとpaintmodeの依存関係
CALCMODE_NOSKIN0のときは、PAINT_EXCを設定してください。
CALCMODE_DIRECT0のときは、PAINT_NORまたは、PAINT_EXCを設定してください。


影響度の計算方法については、
E3DGetInfElemの説明をご覧ください。


directvalは、CALCMODE_DIRECT0のときのみ意味を持ちます。この値をorginfとして設定します。
正の小数を指定してください。


スムージング角度の関係などで、同じ位置に複数の頂点が存在する場合があります。
これらの頂点を同時に同じように設定しないと、ボーン変形が、乱れることがあるので、注意してください。


childjointnoは、ボーンの線分の内の子供のジョイントの番号です。
childjointnoには、必ず親が存在するジョイントの番号を指定してください。
一番親のジョイントは、childjointには、指定できません。


1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : partno
  パーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

3. [IN] 数値または、変数 : vertno
  頂点の番号

4. [IN] 数値または、変数 : childjointno
  影響を受けるボーンの指定。
  ボーンの線分の内、子供の方のジョイントの番号を
  指定します。

5. [IN] 数値または、変数 : calcmode
  影響度の計算方法を指定します。

6. [IN] 数値または、変数 : paintmode
  影響度の設定方法を指定します。

7. [IN] 数値または、変数 : normalizeflag
  正規化をするときは1、
  しないときは0を指定します。
  詳しくは、E3DGetInfElemの説明をお読みください。

8. [IN] 数値または、変数 : userrate
  比重%の値を指定します。
  100%の時は、100.0を指定します。
  詳しくは、E3DGetInfElemの説明をお読みください。
  実数。

9. [IN] 数値または、変数 : directval
  直接数値指定の数値を指定します。
  詳しくは、左記をご覧ください。
  実数。
ver1.0.0.1
E3DDeleteInfElem ボーン影響 ボーン影響度情報を削除します。

normalizeflagに1を指定すると、
削除した後に、
指定頂点の残りの影響度情報を、
正規化します。

1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : partno
  パーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

3. [IN] 数値または、変数 : vertno
  頂点の番号

4. [IN] 数値または、変数 : childjointno
  影響を受けるボーンの指定。
  ボーンの線分の内、子供の方のジョイントの番号を
  指定します。

5. [IN] 数値または、変数 : normalizeflag
  正規化をするときは1、
  しないときは0を指定します。
  詳しくは、E3DGetInfElemの説明をお読みください。
ver1.0.0.1
E3DSetInfElemDefault ボーン影響 ボーン影響度情報を、デフォルト状態に戻します。

partnoに、-1を指定すると、
全パーツの全頂点の影響度を
デフォルト状態に戻します。


1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : partno
  パーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

3. [IN] 数値または、変数 : vertno
  頂点の番号
ver1.0.0.1
E3DNormalizeInfElem ボーン影響 ボーン影響度情報を、正規化します。

指定した頂点の影響度の合計が1になるように、各影響度を合計値で割り算します。

vertnoに、-1を指定すると、
指定パーツの、全頂点に対して、
正規化を行います。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : partno
  パーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

3. [IN] 数値または、変数 : vertno
  頂点の番号
ver1.0.0.1
E3DGetVisiblePolygonNum モデル情報 視野内のポリゴン数を取得します。

E3DRenderの後で呼び出してください。

地面データに対して呼び出した場合は、
num2には、num1と同じ数値が代入されます。

1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [OUT] 変数 : num1
  パーツ単位で計算した視野内ポリゴン数が
  代入されます。

3. [OUT] 変数 : num2
  クリッピング、背面カリングを考慮した
  面単位で計算したポリゴン数が代入されます。
  地面データの場合は、num1と同じ値が代入されます。


ver1.0.0.1
E3DChkConfGroundPart 当たり判定 地面の指定パーツと、キャラクターとの当たり判定を行います。

地面のパーツ番号を指定する他は、
E3DChkConfGroundと同じです。
E3DChkConfGroundの説明をお読みください。
1. [IN] 変数または、数値 : charahsid
  移動する形状データを識別するid

2. [IN] 変数または、数値 : groundhsid
  E3DLoadGroundBMP、
  または、E3DLoadMQOFileAsGroundで
  作成した形状データを
  識別するid

3. [IN] 変数または、数値 : groundpart
  当たり判定をしたい地面のパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  指定してください。

4. [IN] 変数または、数値 : mode
  0を指定すると、飛ぶモード
  1を指定すると、地面を這うモード

5. [IN] 変数または、数値 : diffmaxy
  一度の移動で、登ることが出来る高さの最大値を
  指定してください。
  実数。

6. [IN] 変数または、数値 : mapminy
  groundhsidで識別されるデータの一番低いY座標の値
  通常は、0.0です。
  実数。

7. [OUT] 変数 : result
  あたり判定の結果が代入されます。
  
  mode == 0 のとき
    ぶつからなかった場合は、resutl = 0
    ぶつかった場合は、result = 1
  mode == 1のとき
    キャラクターの下に地面が無かった場合、
    または、全く移動しなかった場合、
    result = 0

    diffmaxyより高い高さを登ろうとしたとき、
    result = 1

    地面を下に降りたとき、
    または、diffmaxyより低い高さを登ったとき、
    result = 2

  となります。

8. [OUT] 変数 : adjustx
9. [OUT] 変数 : adjusty
10. [OUT] 変数 : adjustz
  result != 0 のときに、
    mode == 0のときは、ぶつかった座標
    mode == 1のときは、地面の座標が
    (adjustx, adjusty, adjustz)に代入されます。
  実数型の変数。

11. [OUT] 変数 : nx
12. [OUT] 変数 : ny
13. [OUT] 変数 : nz
  result != 0 のときに、
    mode == 0のときは、ぶつかったポリゴン
    mode == 1のときは、地面のポリゴンの
    法線ベクトルが、
    (nx, ny, nz)に代入されます。
    
    跳ね返る方向を決めるときなどに、
    使用できるのではないかと思い、
    加えてみました。
    実数型の変数。
ver1.0.0.1
E3DChkConfGroundPart2 当たり判定 地面パーツを指定して、線分と地面の当たり判定を行います。

パーツを指定すること以外は、
E3DChkConfGround2と同じです。

詳しくは、E3DChkConfGround2の説明をお読みください。
1. [IN] 変数または、数値 : befposx
2. [IN] 変数または、数値 : befposy
3. [IN] 変数または、数値 : befposz
  線分の始点を(befposx, befposy, befposz)で、
  指定します。
  実数。

4. [IN] 変数または、数値 : newposx
5. [IN] 変数または、数値 : newposy
6. [IN] 変数または、数値 : newposz
  線分の終点を(newposx, newposy, newposz)で、
  指定します。
  実数。

7. [IN] 変数または、数値 : groundhsid
  E3DLoadGroundBMP、
  または、E3DLoadMQOFileAsGroundで
  作成した形状データを
  識別するid

8. [IN] 変数または、数値 : groundpart
  地面のパーツ番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  指定してください。

9. [IN] 変数または、数値 : mode
  0を指定すると、飛ぶモード
  1を指定すると、地面を這うモード

10. [IN] 変数または、数値 : diffmaxy
  一度の移動で、登ることが出来る高さの最大値を
  指定してください。
  実数。

11. [IN] 変数または、数値 : mapminy
  groundhsidで識別されるデータの一番低いY座標の値
  通常は、0です。
  実数。

12. [OUT] 変数 : result
  あたり判定の結果が代入されます。
  
  mode == 0 のとき
    ぶつからなかった場合は、resutl = 0
    ぶつかった場合は、result = 1
  mode == 1のとき
    キャラクターの下に地面が無かった場合、
    または、全く移動しなかった場合、
    result = 0

    diffmaxyより高い高さを登ろうとしたとき、
    result = 1

    地面を下に降りたとき、
    または、diffmaxyより低い高さを登ったとき、
    result = 2

13. [OUT] 変数 : adjustx
14. [OUT] 変数 : adjusty
15. [OUT] 変数 : adjustz
  result != 0 のときに、
    mode == 0のときは、ぶつかった座標
    mode == 1のときは、地面の座標が
    (adjustx, adjusty, adjustz)に代入されます。
  実数型の変数。

16. [OUT] 変数 : nx
17. [OUT] 変数 : ny
18. [OUT] 変数 : nz
  result != 0 のときに、
    mode == 0のときは、ぶつかったポリゴン
    mode == 1のときは、地面のポリゴンの
    法線ベクトルが、
    (nx, ny, nz)に代入されます。
    
    跳ね返る方向を決めるときなどに、
    使用できるのではないかと思い、
    加えてみました。
  実数型の変数。

ver1.0.0.1
E3DGetMidiMusicTime サウンド Midiのミュージックタイムを取得します。

4分音符当たり、768の値が取得されます。

E3DLoadSoundでMidiを読み込んでいるときのみ、機能します。

実際に使用する際には、
E3DPlaySoundの直前に取得したmusictimeを
プレイ中に取得したmusictimeから引いた値で
現在位置を確認します。

1. [IN] 変数または、数値 : soundid
  サウンドを識別するID
  E3DLoadSoundで取得した値を指定してください。

2. [OUT] 変数 : musictime
  現在のミュージックタイムが代入されます。
ver1.0.0.1
E3DSetNextMotionFrameNo モーション モーションの最後のフレーム番号に到達した後、どのモーションの、どのフレーム番号に、ジャンプするかを指定できます。

この関数で、次のモーションの指定を行っておけば、E3DSetNewPoseで、自動的にモーションが切り替わります。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : srcmotid
3. [IN] 数値または、変数 : nextmotid
4. [IN] 数値または、変数 : nextframeno
  srcmotidのモーションが、最後のフレーム番号に達した後、nextmotidのモーションの、nextframenoのフレーム番号に、ジャンプするように設定されます。
ver1.0.0.1
E3DSetLinearFogParams 描画パラメータ 頂点フォグ(線形)を設定します。

頂点フォグなので、ポリゴンのない部分には、フォグはかかりません。
画面全体にフォグをかけたい場合は、
E3DCreateBGで、背景を作成してください。(背景はポリゴンです。)

具体的な使用例は、
e3dhsp3_wall.hsp
に書きましたので、ご覧ください。

1. [IN] 数値または、変数 : enable
  1を指定すると、フォグが有効に、
  0を指定すると、フォグが無効になります。

2. [IN] 数値または、変数 : r
3. [IN] 数値または、変数 : g
4. [IN] 数値または、変数 : b
  フォグの色を、(r, g, b)で指定します。

5 [IN] 数値または、変数 : start
6. [IN] 数値または、変数 : end
  フォグが開始される距離をstartに、
  フォグが終了する(一番濃くなる)距離をendに
  指定します。
  距離は、カメラからの距離です。

7. [IN] 数値または、変数 : hsid
  この引数に、モデルデータのhsidを
  指定することにより、
  モデル単位でのフォグの指定が可能になります。
  特殊効果などで、フォグをかけたくない場合などの
  表示にお使いください。
  この引数を、省略した場合は、
  すべてのモデルデータに対して、設定します。

ver1.0.0.2で追加
E3DChkConflict3 当たり判定 2つの形状データの指定したパーツ同士が、衝突しているかどうを、判定します。

パーツの番号に、配列を指定できること以外は、
ほとんど、E3DChkConflict2と同じです。
(inviewflagが微妙に違います)


パーツ番号には、
E3DGetPartNoByNameで取得した、
パーツの番号を渡してください。

partnoに-1を指定すると、
モデル全体とあたり判定をします。


(判定の元になるデータは、
E3DChkInView命令によって、更新されます。)


すべてのパーツが視野外だった場合は、
inviewflagに3が、
ひとつでも、視野内のパーツがあった場合は、
inviewflagに0が代入されます。

1. [IN] 変数または、数値 : hsid1
  形状データを識別するid
2. [IN] 変数 : partno1
  hsid1のモデル中のパーツの番号の配列
  dim partno1, partnum1
  などで配列を作成し、それぞれの配列要素に、
  判定をしたいパーツの番号を入れてください。
3. [IN] 変数または、数値 : partnum1
  partno1に値をセットした要素数を指定してください。


4. [IN] 変数または、数値 : hsid2
  形状データを識別するid
5. [IN] 変数 : partno2
  hsid2のモデル中のパーツの番号の配列
  dim partno2, partnum2
  などで配列を作成し、それぞれの配列要素に、
  判定をしたいパーツの番号を入れてください。
6. [IN] 変数または、数値 : partnum2
  partno2に値をセットした要素数を指定してください。


7. [OUT] 変数 : confflag
  hsid1, hsid2で識別される形状同士が、
  衝突している場合は、1が、
  衝突していない場合は0がセットされる。

8. [OUT] 変数 : inviewflag
  すべてのパーツが視野外だった場合は、
  inviewflagに3が、
  ひとつでも、視野内のパーツがあった場合は、
  inviewflagに0が代入されます。

ver1.0.0.7で追加
E3DChkConfBySphere3 当たり判定 境界球によるあたり判定を、任意のパーツごとに行います。

パーツの番号に配列を指定できること以外は、
E3DChkConfBySphere2と同じです。


判定の際に、E3DChkInViewでセットした、
データを使用します



パーツ番号には、
E3DGetPartNoByNameで取得した、
パーツの番号を渡してください。

パーツ番号に-1を指定すると、
モデル全体とあたり判定をします。

1. [IN] 変数または、数値 : hsid1
  形状データを識別するid
2. [IN] 変数 : partno1
  hsid1のモデル中のパーツの番号の配列
  dim partno1, partnum1
  などで配列を作成し、それぞれの配列要素に、
  判定をしたいパーツの番号を入れてください。
3. [IN] 変数または、数値 : partnum1
  partno1に値をセットした要素数を指定してください。


4. [IN] 変数または、数値 : hsid2
  形状データを識別するid
5. [IN] 変数 : partno2
  hsid2のモデル中のパーツの番号の配列
  dim partno2, partnum2
  などで配列を作成し、それぞれの配列要素に、
  判定をしたいパーツの番号を入れてください。
6. [IN] 変数または、数値 : partnum2
  partno2に値をセットした要素数を指定してください。


7. [OUT] 変数 : confflag
  hsid1, hsid2で識別される形状同士が、
  衝突している場合は、1が、
  衝突していない場合は0がセットされる。
ver1.0.0.7で追加
E3DSetMovableAreaThread スレッドを作成して、E3DSetMovableAreaを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が、代入されます。

threadidは、
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は、全部で、4098回まで、
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)

スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

複数のスレッド読み込み関数を、
同時に呼ぶ場合には、
テクスチャが同じディレクトリにないと、
テクスチャの読み込みに失敗することがあります。


E3DSetMovableAreaの説明も、お読みください。
1. [IN] 文字列または、文字列変数 : filename1
  壁の座標情報の元となる、BMPファイル名

2. [IN] 変数または、数値 : maxx
  壁のX座標の最大値
  実数。

3. [IN] 変数または、数値 : maxz
  壁のZ座標の最大値
  実数。

4. [IN] 変数または、数値 : divx
  X方向の分割数

5. [IN] 変数または、数値 : divz
  Z方向の分割数

6. [IN] 変数または、数値 : wallheight
  作成する壁の高さ
  実数。

7. [OUT] 変数 : threadid
  作成したスレッドを識別する、ID
ver2.0.0.2で追加
E3DCreateSpriteFromBMSCR スプライト HSPの描画画面(E3Dでの描画を除く)と同じ内容のスプライトを作成します。

内部でテクスチャーを使用するため、
画面の大きさが、2の乗数で無い場合は、
スプライトの大きさと画面の大きさが、異なる場合があります。

スプライトの大きさは、
E3DGetSpriteSizeで確認してください。

使い方としては、
非表示のウインドウを作成しておき、
そこに、mes命令などで、描画を行い、
そのウインドウに対して、この関数を呼び、
出来たスプライトを、メインのウインドウに描画する、
などが、考えられます。

screen命令の4番目の引数で、
パレットモードを指定した場合は、
この関数は、使用できません。



1. [IN] 変数または、数値 : wid
  ウインドウID

2. [IN] 変数または、数値 : transparentflag
  透過フラグ。

  画像ファイルのアルファをもとに透過する場合、
  あるいは、画像ファイルにアルファが無く透過もしない場合、
  0を指定してください。

  1をセットすると、黒色を透過色として色抜きします。

  2をせっとすると、(tpR, tpG, tpB)で指定した色を
  透過色とします

  この関数のtransparetflagの意味は、
  他の関数のtransparentとは、違うので、
  気を付けてください。



3. [OUT] 変数 : spriteID
  作成したスプライトを識別するID。

4. [IN] 変数または、数値 : tpR
5. [IN] 変数または、数値 : tpG
6. [IN] 変数または、数値 : tpB
  transparentflag = 2 のとき、
  透過色を、(tpR, tpG, tpB)で指定します。
ver2.0.0.5で追加
E3DLoadMOAFile モーションアクセラレータ モーションアクセラレータファイル(*.moa)を読み込みます。

moaと同じフォルダに、
moaに記述されている全てのquaファイルが、存在しないと
エラーになります。

詳しくは、マニュアルの、rdb2_ma.htmと
e3dhsp3_MotionAccelerator.hsp
をご覧ください。
1. [IN] 変数または、数値 : hsid
  どのモデルデータに対するmoaかを指定する。

2. [IN] 文字列または、文字列の変数 : fname
  *.moaのパス文字列。

3. [IN] 数値または変数 : FillUpFrameLength
  補間モーションのフレーム長
ver2.0.1.2で追加
E3DSetNewPoseByMOA モーションアクセラレータ モーションアクセラレータに基づいて、モーションの更新をします。E3DSetNewPoseの代わりに呼んでください。

詳しくは、マニュアルの、rdb2_ma.htmと
e3dhsp3_MotionAccelerator.hsp
をご覧ください。
1. [IN] 変数または、数値 : hsid
  モデルデータを識別するID

2. [IN] 変数または、数値 : eventno
  イベント番号
  詳しくは、マニュアルの、rdb2_ma.htmをご覧ください。


ver2.0.1.2で追加
E3DGetMotionFrameNo モーション カレント(現在の)のモーション番号と、フレーム番号を取得します。 1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [OUT] 変数 : mk
  モーションを識別する番号

3. [OUT] 変数 : frame
  フレーム番号
ver2.0.1.2で追加
E3DGetKeyboardCnt キーボード 256 個の仮想キーの状態(カウンター)を、指定されたバッファkeybufへコピーします。


E3DGetKeyboardState関数は、呼び出し時に、キーが押されているかどうかしか、取得できませんが、
E3DGetKeyboardCnt関数は、どのくらいの時間、押し続けているかを表すカウンターを取得できます。

Easy3D内部で、
前回のきーの情報を保存しておき、
呼び出し時に、キーが押されていれば、
カウンターを1増やします。
押されていなければ、カウンターを0にします。


keybuf は、この関数を使用する前に、
dim keybuf, 256
で、確保してください。

複数のキーの状態を、一度の呼び出しで、
取得できます。

例えば、Aキーのカウンタを調べる場合は、
E3DGetKeyboardCnt
呼び出し後に、
keybuf.'A' の値を調べます。
( ’ を忘れずに。 )


具体的な使用例は、zip中の、
e3dhsp3_MotionAccelerator.hspをご覧ください。

バーチャルキー情報は、zip中の、
e3dhsp3.as で、
VK_ で始まる定数として、宣言しています。
1. [OUT] 変数 : keybuf
  keybufに、キーの状態(カウンタ)が、代入されます。
  keybufは、dim keybuf, 256 で、
  作成されている必要があります。
ver2.0.1.2で追加
E3DResetKeyboardCnt キーボード E3DGetKeyboardCntが、内部で使用する、前回のキーの情報をリセットします。
なし ver2.0.1.2で追加
E3DEncodeBeta 簡易暗号化 ファイルの内容を、暗号化します。

暗号化といっても、超簡易な方法ですので、
プログラムに詳しい人なら、復号できてしまう程度のものです。

ファイルを、暗号化して、内容を上書きします。
暗号化したファイルに対して
、この関数を呼べば、暗号化前のファイルに戻ります。

1. [IN] 文字列または、文字列変数 : filename
  簡易暗号化するファイル名

2. [IN] 配列変数 : rnd10
  簡易暗号化する際に使用する、
  ランダムなキー配列を指定します。
  キーは、10個指定します。
  キーの値は、0から255の値を使用してください。
  dim rnd10, 10
  で、配列を作成してから、値をセットしてください。


ver2.0.1.3で追加
E3DDecodeBeta 簡易暗号化 E3DEncodeBetaで暗号化したファイルを、バッファ上で復号します。

バッファは、sdimで確保してください。

1. [IN] 文字列または、文字列変数 : filename
  復号するファイル名

2. [IN] 配列変数 : rnd10
  E3DEncodeBetaで使用したのと同じ内容の
  キー配列。

3. [OUT] 配列変数 : dstbuffer
  復号した内容が、セットされます。
  ファイルの長さをflengthとした場合、
  sdim dstbuffer, flength
  で作成したバッファーを指定してください。

ver2.0.1.3で追加
E3DGetMoaInfo モーション Moaファイルを読み込んだ場合のモーションの名前とIDを取得します。

motmaxnumは、大き目の値を設定してください。
この値が実際のモーションの数よりも小さいとエラーになります。

motionname引数は、
sdim motionname, 256, motmaxnum
で作成した配列を指定してください。

motionid引数は、
dim motionid, motmaxnum
で作成した配列を指定してください。


詳しい使い方は、
e3dhsp3_MotionAccelerator.hspをご覧ください。
1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : motmaxnum
  データ取得用配列の大きさ(モーションの数)を指定します。

3. [OUT] 文字列の配列変数 : motionname
  名前情報を取得するための配列を渡してください。
  左に書いた方法で、sdimした配列を渡してください。

4. [OUT] 配列変数 : motionid
  モーションIDを取得するための配列変数を渡してください。
  右に書いた方法で、dimした配列を渡してください。

5. [OUT] 変数 : motgetnum
  何個lのジョイントの情報を出力したかが、代入されます。
ver3.0.0.1で追加
E3DGetNextMotionFrameNo モーション E3DSetNextMotionFrameNoで設定した情報を取得します。

Moaファイルを読み込んで、
E3DSetNewPoseByMOAを使用する場合、
モーションとモーションの間に補間モーションが入ります。
この補間モーションのもーしょんIDはver3001では常に0です。

この補間モーションには、E3Dが内部で、
次のモーションをE3DSetNextMotionFrameNoでセットしています。

つまり、この補間モーションに対して、
E3DGetNextMotionFrameNoを呼び出せば、
次に再生するモーションの情報が取得できるというわけです。

1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 変数または、数値 : motid
  現在のモーションのID


3. [OUT] 変数 : nextmotionid
  次に再生されるモーションのID

4. [OUT] 変数 : nextframe
  フレーム番号
ver3.0.0.1で追加
E3DGetScreenPos3 モデル情報 形状データの画面上での2Dの座標を取得する関数です。
奥行き情報Zも取得できます。

パーツ単位、モデル単位、ビルボード単位で
使用できます。

頂点単位での2D座標も取得できます。

3Dキャラクターの位置に、2Dのスプライトを表示する、などの用途に使えます。

Z情報は、スプライト描画時のZ指定の値に使用できます。


E3DChkInViewより後で、呼び出してください。


具体的な使用例は、zip中の、
e3dhsp_pickvert.hsp
に書きましたので、ご覧ください。


1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 数値または、変数 : hsid
  形状データを識別するID
  -1を指定すると、ビルボードの2D位置を取得できます。

3. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。

  E3DGetPartNoByNameで取得した番号を渡してください。

  hsidに-1を指定した場合は、
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

  partnoに-1を渡すと、
  モデル全体の中心座標の2D座標を
  取得できます。

4. [OUT] 変数 : scx
5. [OUT] 変数 : scy
  指定したパーツの2Dスクリーン座標が代入されます。
  整数。 

  ただし、以下の場合には、
  scx = -1, scy = -1が代入されます。
  
  1,パーツが表示用オブジェクトではない場合
  2,パーツ全体が画面外にある場合
  3,パーツのディスプレイスイッチがオフの場合
  4,パーツが無効になっていた場合
    (E3DSetValidFlagで0を指定した場合)

6. [OUT] 変数 : scz
  奥行き情報Z
  実数の変数。
  この値に0から1の範囲外の値が得られた場合は、
  画面に描画されない頂点です。


6. [IN] 数値または、変数 : vertno
  取得したい頂点の番号を指定します。
  この引数を省略した場合や、-1を指定した場合は、
  パーツの中心の2D座標を取得します。

7. [IN] 数値または、変数 : calcmode
  1を指定してください。
ver3.0.0.1で追加
E3DEnableToonEdge 描画パラメータ 輪郭線のオンオフをします。

トゥーン設定されたsigを読み込んでいる状態か、
もしくは、E3DSetShaderTypeでCOL_TOON1を設定している状態か
でしか機能しません。


1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  渡してください。

  partnoに-1を渡すと、
  モデル全体の輪郭線のオンオフをします。

3. [IN] 数値または、変数 : type
  輪郭線のタイプを指定します。
  0を指定してください。

4. [IN] 数値または、変数 : flag
  輪郭をオンにしたい場合は1を、
  オフにしたい場合は0を指定してください。
ver3.0.1.1で追加
E3DSetToonEdge0Color 描画パラメータ 輪郭線の色をセットします。

トゥーン設定されたsigを読み込んでいる状態か、
もしくは、E3DSetShaderTypeでCOL_TOON1を設定している状態か
でしか機能しません。

1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  渡してください。

  partnoに-1を渡すと、
  モデル全体の輪郭線の色を設定します。

3. [IN] 文字列または、文字列の変数 : materialname
  マテリアルの名前を指定します。
  RokDeBone2の「トゥ」ボタンを押したときに
  リストボックスに表示されるマテリアル名を
  指定してください。

  partnoに-1を指定している場合は、
  "dummy"と指定してください。

4. [IN] 数値または、変数 : r
5. [IN] 数値または、変数 : g
6. [IN] 数値または、変数 : b
  色のRGBを指定します。
  それぞれ、0から255の整数を指定してください。


ver3.0.1.1で追加
E3DSetToonEdge0Width 描画パラメータ 輪郭線の幅をセットします。

トゥーン設定されたsigを読み込んでいる状態か、
もしくは、E3DSetShaderTypeでCOL_TOON1を設定している状態か
でしか機能しません。

1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  渡してください。

  partnoに-1を渡すと、
  モデル全体の輪郭線の色を設定します。

3. [IN] 文字列または、文字列の変数 : materialname
  マテリアルの名前を指定します。
  RokDeBone2の「トゥ」ボタンを押したときに
  リストボックスに表示されるマテリアル名を
  指定してください。

  partnoに-1を指定している場合は、
  "dummy"と指定してください。

4. [IN] 数値または、変数 : width
  輪郭の幅を実数で指定してください。

ver3.0.1.1で追加
E3DGetToonEdge0Color 描画パラメータ 輪郭線の色を取得します。

トゥーン設定されたsigを読み込んでいる状態か、
もしくは、E3DSetShaderTypeでCOL_TOON1を設定している状態か
でしか機能しません。

1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  渡してください。

3. [IN] 文字列または、文字列の変数 : materialname
  マテリアルの名前を指定します。
  RokDeBone2の「トゥ」ボタンを押したときに
  リストボックスに表示されるマテリアル名を
  指定してください。

4. [OUT] 変数 : r
5. [OUT] 変数 : g
6. [OUT] 変数 : b
  輪郭の色のRGBが代入されます。
  それぞれ、0から255の整数が取得されます。

  指定したマテリアルが見つからなかった場合は
  (0, 0, 0)が代入されます。
ver3.0.1.1で追加
E3DGetToonEdge0Width 描画パラメータ 輪郭線の幅を取得します。

トゥーン設定されたsigを読み込んでいる状態か、
もしくは、E3DSetShaderTypeでCOL_TOON1を設定している状態か
でしか機能しません。

1. [IN] 数値または、変数 : hsid
  形状データを識別するID

2. [IN] 数値または、変数 : partno
  設定したいパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  渡してください。

3. [IN] 文字列または、文字列の変数 : materialname
  マテリアルの名前を指定します。
  RokDeBone2の「トゥ」ボタンを押したときに
  リストボックスに表示されるマテリアル名を
  指定してください。

4. [OUT] 変数 : width
  輪郭の幅が代入されます。
  実数型の変数。

  指定したマテリアルが見つからなかった場合は、
  0.0が代入されます。
ver3.0.1.1で追加
E3DCreateParticle パーティクル パーティクルを作成します。

具体的な使用例は、
e3dhsp3_particle.hsp
をご覧ください。
1. [IN] 数値または、変数 : maxnum
  表示できるパーティクルの最大数を指定します。

2. [IN] 文字列または、文字列の変数 : texname
  テクスチャー名をフルパスで指定します。

3. [IN] 数値または、変数 : width
  パーティクルの幅を指定します。
  実数。

4. [IN] 数値または、変数 : height
  パーティクルの高さを指定します。
  実数。

5. [IN] 数値または、変数 : blendmode
  半透明のブレンドモードを指定します。
  0を指定すると、
  テクスチャのアルファによるブレンドをします。
  1を指定すると、
  アッドモードでのブレンドをします。
  2を指定すると、
  頂点のアルファを考慮した
  アッドモードブレンドをします。

5. [OUT] 変数 : particleid
  パーティクルを識別するIDが代入されます。
ver3.0.1.5で追加
E3DDestroyParticle パーティクル パーティクルを破棄します。
1. [IN] 数値または、変数 : particleid
  削除したいパーティクルを識別するIDを指定します。
ver3.0.1.5で追加
E3DSetParticlePos パーティクル パーティクルの場所を設定します。
設定した場所からパーティクルが噴き出します。

具体的な使用例は、
e3dhsp3_particle.hsp
をご覧ください。
1. [IN] 数値または、変数 : particleid
  パーティクルを識別するIDを指定します。

2. [IN] 数値または、変数 : posx
3. [IN] 数値または、変数 : posy
4. [IN] 数値または、変数 : posz
  パーティクルの位置を(posx, posy, posz)に
  指定します。
  実数。

ver3.0.1.5で追加
E3DSetParticleGravity パーティクル パーティクルの重力を設定します。
設定した値は、Y方向の負の加速度として計算に使用されます。

具体的な使用例は、
e3dhsp3_particle.hsp
をご覧ください。
1. [IN] 数値または、変数 : particleid
  パーティクルを識別するIDを指定します。

2. [IN] 数値または、変数 : gravity
  重力を指定します。
  実数。
ver3.0.1.5で追加
E3DSetParticleLife パーティクル パーティクルの寿命を設定します。
パーティクルが噴き出してから消えるまでの時間を
秒で指定します。

具体的な使用例は、
e3dhsp3_particle.hsp
をご覧ください。
1. [IN] 数値または、変数 : particleid
  パーティクルを識別するIDを指定します。

2. [IN] 数値または、変数 : life
  パーティクルの寿命を指定します。
  実数。
  秒。

ver3.0.1.5で追加
E3DSetParticleEmitNum パーティクル パーティクルの生成個数をします。
E3DRenderParticleを呼ぶたびに指定した個数だけ生成されます。
実数での指定が可能です。
例えば0.2と指定した場合は、
5回E3DRenderParticleを呼び出すごとに1個パーティクルが
生成されます。

具体的な使用例は、
e3dhsp3_particle.hsp
をご覧ください。
1. [IN] 数値または、変数 : particleid
  パーティクルを識別するIDを指定します。

2. [IN] 数値または、変数 : emitnum
  パーティクルの1回あたりの生成個数を指定します。
  実数。
ver3.0.1.5で追加
E3DSetParticleVel0 パーティクル パーティクルの速度を指定します。

速度の最低値をminvelx, minvely, minvelzに指定し、
速度の最大値をmaxvelx, maxvely, maxvelzに指定します。

最低値と最大値の幅が広いほど、
パーティクルは、まばらに放出されます。

具体的な使用例は、
e3dhsp3_particle.hsp
をご覧ください。
1. [IN] 数値または、変数 : particleid
  パーティクルを識別するIDを指定します。

2. [IN] 数値または、変数 : minvelx
3. [IN] 数値または、変数 : minvely
4. [IN] 数値または、変数 : minvelz
  パーティクルの速度の最小値を指定します。
  実数。

5. [IN] 数値または、変数 : maxvelx
6. [IN] 数値または、変数 : maxvely
7. [IN] 数値または、変数 : maxvelz
  パーティクルの速度の最大値を指定します。
  実数。


ver3.0.1.5で追加
E3DSetParticleRotation パーティクル パーティクルの回転を指定します。

この関数を呼び出すたびに、
パーティクルが指定角度だけ回転します。

具体的な使用例は、
e3dhsp3_particle.hsp
をご覧ください。
1. [IN] 数値または、変数 : particleid
  パーティクルを識別するIDを指定します。

2. [IN] 数値または、変数 : rotation
  パーティクルの回転を角度(度)で指定します。
ver3.0.1.5で追加
E3DSetParticleDiffuse パーティクル パーティクルの頂点色を指定します。

テクスチャ色とモジュレートされて表示されます。

具体的な使用例は、
e3dhsp3_particle.hsp
をご覧ください。
1. [IN] 数値または、変数 : particleid
  パーティクルを識別するIDを指定します。

2. [IN] 数値または、変数 : r
3. [IN] 数値または、変数 : g
4. [IN] 数値または、変数 : b
  パーティクルの頂点色を指定します。
  それぞれ、0から255の間の値を指定します。



ver3.0.1.5で追加
E3DRenderParticle パーティクル パーティクルを描画します。

呼び出すたびに、パーティクルの消滅、生成、位置移動をして、
描画します。

1.0 / fps 秒だけ時間を進めて描画します。
fpsにマイナスの値を指定した場合は、
パーティクルが静止した状態で描画します。


E3DCreateParticleで指定したmaxnum個より多いパーティクルは
描画できません。
パーティクルの噴出が、途中で途切れる場合は、
maxnumの値を増やすか、または、
E3DSetParticleEmitNumの値を小さくするか、または、
E3DSetParticleLifeに指定するlifeの値を小さくしてください。

具体的な使用例は、
e3dhsp3_particle.hsp
をご覧ください。
1. [IN] 数値または、変数 : particleid
  パーティクルを識別するIDを指定します。

2. [IN] 数値または、変数 : fps
  1秒間に何回、この関数を呼ぶかを
  指定してください。

3. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

ver3.0.1.5で追加
E3DSetParticleAlpha パーティクル パーティクルの透明度を設定します。

パーティクルが放出されてからの時間帯ごとに、
設定可能です。

生成されてからの時間が、mintimeからmaxtimeの間にある
パーティクルに対して、処理を行います。

この処理は、ビデオメモリにアクセスする必要があるので、
ちょっと重い処理です。
ver3.0.1.7で負荷は気にしなくていい程度になりました。

具体的な使用例は、
e3dhsp3_particle2.hsp
をご覧ください。

1. [IN] 数値または、変数 : particleid
  パーティクルを識別するIDを指定します。

2. [IN] 数値または、変数 : mintime
3. [IN] 数値または、変数 : maxtime
  処理したいパーティクルの時間帯を
  秒で指定します。

4. [IN] 数値または、変数 : alpha
  透明度を0から1の間の実数で指定します。

ver3.0.1.6で追加
E3DSetParticleUVTile パーティクル パーティクルのUVを設定します。

パーティクルが放出されてからの時間帯ごとに、
設定可能です。

生成されてからの時間が、mintimeからmaxtimeの間にある
パーティクルに対して、処理を行います。

この処理は、ビデオメモリにアクセスする必要があるので、
ちょっと重い処理です。

ひとつの画像に、タイル画像を敷き詰めたテクスチャの、UV座標を、タイル番号で、セットできます。

タイル状のテクスチャ画像とタイル番号の対応は、タイル番号の説明をご覧ください。


具体的な使用例は、
e3dhsp3_particle2.hsp
をご覧ください。

1. [IN] 数値または、変数 : particleid
  パーティクルを識別するIDを指定します。

2. [IN] 数値または、変数 : mintime
3. [IN] 数値または、変数 : maxtime
  処理したいパーティクルの時間帯を
  秒で指定します。

4. [IN] 数値または、変数 : unum
  テクスチャの横方向の分割数を指定します。

5. [IN] 数値または、変数 : vnum
  テクスチャの縦方向の分割数を指定します。

6. [IN] 数値または、変数 : tileno
  設定したいタイル番号を指定します。

ver3.0.1.6で追加
E3DInitParticle パーティクル パーティクルの発生状態を初期状態に戻します。 1. [IN] 数値または、変数 : particleid
  パーティクルを識別するIDを指定します。
ver3.0.1.8で追加
E3DPickFace2 当たり判定 2Dの画面の座標に対応する、3Dモデルの座標を取得できます。

判定したいパーツを指定できる点以外は、
E3DPickFaceと同じです。
詳しくはE3DPciFaceの説明をお読みください。

パーツ番号3とパーツ番号4についてのみ、判定を行いたい場合は、
partnum = 2
dim partarray, partnum
partarray( 0 ) = 3
partarray( 1 ) = 4
の用に値をセットして、E3DPickFace2を呼び出してください。
1. [IN] 変数または、数値 : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] 数値または、変数 : hsid
  モデルを識別する番号を指定してください。

3. [IN] 配列変数 : partarray
  判定したいパーツ番号を指定します。
  dim partarray, partnumで作成してください。

4. [IN] 数値または、変数 : partnum
  partarray配列の要素数


5. [IN] 数値または、変数 : pos2x
6. [IN] 数値または、変数 : pos2y
  画面上の2D座標を指定してください。

7. [IN] 数値または、変数 : maxdist
  どのくらいの距離まで、3Dモデルの検索をするかを指定します。
  この値を小さくするほど、処理は高速になります。

8. [OUT] 変数 : partno
9. [OUT] 変数 : faceno
  2D座標に対応する3D座標が見つかった場合に、
  その3Dモデルのパーツの番号と、面の番号が
  代入されます。

  見つからなかった場合は、-1が代入されます。

10. [OUT] 変数 : pos3x
11. [OUT] 変数 : pos3y
12. [OUT] 変数 : pos3z
  2D座標に対応する3D座標が代入されます。
  partnoに-1以外の値が代入されているときのみ、
  これらの値は意味を持ちます。
  実数。

13. [OUT] 変数 : nx
14. [OUT] 変数 : ny
15. [OUT] 変数 : nz
  2D座標に対応する3D座標を含む面の法線ベクトルが
  代入されます。

  ベクトルの大きさは1のものを代入します。

  partnoに-1以外の値が代入されているときのみ、
  これらの値は意味を持ちます。

  実数型の変数。

16. [OUT] 変数 : dist
  視点と(pos3x, pos3y, pos3z)との距離が代入されます。
  partnoに-1以外の値が代入されているときのみ、
  この値は意味を持ちます。
  実数型の変数。

17. [IN] 数値または、変数 : calcmode
  1を指定してください。

ver3.0.2.0で追加
E3DChkConfWall3 当たり判定 E3DSetMovableArea, または、E3DLoadMQOFileAsMovableAreaで、作成した、壁データと、キャラクターのあたり判定を行います。

判定したい壁データのパーツ番号を指定できる点以外は、
E3DChkConfWallと同じです。
詳しくは、E3DChkConfWallの説明をお読みください。

壁モデルのパーツ番号3とパーツ番号4についてのみ、
判定を行いたい場合は、
partnum = 2
dim partarray, partnum
partarray( 0 ) = 3
partarray( 1 ) = 4
の用に値をセットして、E3DConfWall3を呼び出してください。


1. [IN] 変数または、数値 : charahsid
  移動する形状データを識別するid

2. [IN] 変数または、数値 : groundhsid
  E3DSetMovableArea、
  または、E3DLoadMQOFileAsMovableAreaで
  作成した形状データを
  識別するid

3. [IN] 配列変数 : partarray
  判定したい壁のパーツ番号を指定します。
  dim partarray, partnumで作成してください。

4. [IN] 数値または、変数 : partnum
  partarray配列の要素数

5. [IN] 変数または、数値 : dist
  跳ね返る距離。
  distに大きな値を入れると、
  ぶつかった際に、大きく、跳ね返るようになります。
  実数。

6. [OUT] 変数 : result
  あたり判定の結果が代入されます。
  壁とぶつかった場合は、1が、
  ぶつからなかった場合は、0が、代入されます。

7. [OUT] 変数 : adjustx
8. [OUT] 変数 : adjusty
9. [OUT] 変数 : adjustz
  result != 0 のときに、
  修正後の座標が、
  (adjustx, adjusty, adjustz)に代入されます。
  実数型の変数。

10. [OUT] 変数 : nx
11. [OUT] 変数 : ny
12. [OUT] 変数 : nz
  result != 0 のときに、
  ぶつかった面の法線ベクトルの値が、
  代入されます。
  実数型の変数。

ver3.0.2.0で追加
E3DGetMotionIDByName モーション モーションの名前からモーションのIDを取得します。 1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [IN] 文字列または、文字列変数 : motname
  RokDeBone2で設定したモーションの名前。

3. [OUT] 変数 : motid
  名前がmotnameであるモーションのIDが代入されます。

ver3.0.2.0で追加
E3DGetMotionNum モーション 読み込んでいるモーションの総数を取得します。 1. [IN] 変数または、数値 : hsid
  形状データを識別するid

2. [OUT] 変数 : motnum
  モーションの総数が代入されます。
ver3.0.2.0で追加
E3DDot2 算術 内積を計算します。
E3DDotと違って、E3DDot2は、与えたベクトルを正規化しません。

1. [IN] 変数または、数値 : vecx1
2. [IN] 変数または、数値 : vecy1
3. [IN] 変数または、数値 : vecz1
  実数。

4. [IN] 変数または、数値 : vecx2
5. [IN] 変数または、数値 : vecy2
6. [IN] 変数または、数値 : vecz2
  実数。

7. [OUT] 変数 : ret
  内積の結果が代入される。
  実数型の変数。
ver3.0.2.0で追加