Easy3D For Win32 関数の説明

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


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

また、E3DAddMotionでモーションデータを読み込むごとにモーションの番号が得られます。
モーションのセットや変更には、いつもこのモーション番号を使います。


カメラの操作方法は、3種類用意しました。
E3DSetCameraPos と、E3DSetCameraDeg、E3DSetCameraTwist を組で使用する方法と、
E3DSetCameraPos と、E3DSetCameraTarget、E3DSetCameraTwistを組で使用する方法と
E3DSetCameraPos
E3DCameraLookAt
E3DCameraOnNaviLine
E3DCameraDirUp
E3DCameraDirDown
E3DCameraDirRight
E3DCameraDirLeft
E3DSetCameraTwist
を組で、使用する方法です。
他の方法と混ぜて使用することは、想定していません。

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

この表は実装順に記述してあるので非常にみにくいです。
マニュアルフォルダの中のEasy3DFunctions.exeを使ってこの表を見てください。


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

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

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

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


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

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


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




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

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

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

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


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

ver5003でinitcomflagを追加しました。
通常はDirectMusicを使うためにCOMの初期化が必要なので1を指定してください。
.NetFrameworkなどと共用する場合、Easy3Dより先にCOMの初期化をする場合などに0を指定してください。
0を指定するとE3DInit内でのCoInitialize呼び出しとE3DByeでのCoUninitialize呼び出しを省略します。


ver5.1.0.2でindex32bit引数を追加しました。
index32bit引数に1を指定すると32ビットインデックスモードで起動し、0を指定すると16ビットインデックスモードで起動します。
32ビットインデックスモードでは65535/3ポリゴンまでの制限がなくなります。
32ビットインデックスモードではビデオカードに能力が無い場合は起動できなくなります。
多くのネットブックなどでは32ビットインデックスモードは動かないようなので注意してください。

ver5.3.1.3でfullscreenflagの値指定を拡張。
1. [IN] HINSTANCE : hinst
  アプリケーションのhinstanceを
  渡します。

2. [IN] HWND : hwnd
  メインウインドウのハンドルを
  渡してください。

3. [IN] int : fullscreenflag
  フルスクリーンにするときは1を、
  しないとき(ウインドウモード)は0を指定してください。
  E3DCheckFullScreenParamsでflagに2を指定した場合は、fullscreenflagにも2を指定してください。

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


5. [IN] int : multisamplenum
  マルチサンプルの数。
  詳しくは前記をご覧ください。


6. [IN] int : gpuflag
  1を指定するとビデオカードに頂点シェーダー、
  ピクセルシェーダーがある場合には、
  それを使って頂点処理します。
  0を指定すると、ソフトウェアで頂点処理します。


7. [IN] int : enablereverb
  1を指定するとステレオサウンドのリバーブが
  オンになります。
  0を指定するとリバーブがオフになります。

8. [IN] int : initcomflag
  COMを初期化するかどうかのフラグ。
  通常は1。
  詳しくは前記をご覧ください。

9. [IN] int : index32bit
  1を指定すると32ビットインデックスモードになります。0を指定すると16ビットインデックスモードになります。
  詳しくは前記をご覧ください。

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

ver5.0.0.1

ver5.0.0.3で引数追加

ver5.1.0.2で拡張

ver5.3.1.3で拡張
E3DBye 後処理 Direct3Dの後処理をする。

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

2. [IN] int : adjustuvflag
  UV値を正規化するかどうかのフラグ。
  正規化する場合は1を指定。
  しない場合は0を指定。
  2を指定すると0.0から1.0の間にクランプします。


3. [IN] float : mult
  読み込み倍率を指定してください。
  等倍は1.0f

4. [OUT] int* : hsidptr
  読み込んだ形状データを識別するhsid
  が格納される。
ver5.0.0.1
ver5.0.2.6で拡張
E3DCreateSwapChain スワップチェイン スワップチェインを作成します。

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

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

1. [IN] HWND : hwnd
  ウインドウのハンドルを
  渡してください。

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

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

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


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

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

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

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


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

2. [IN] int : hsid
  形状データを識別するid

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

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

5. [IN] int : transskip
  transskipに1をセットすると、
  行列演算処理がスキップされます。
  不透明、半透明と、2回、E3DRenderを呼び出す場合は、
  2回目の呼び出し時に、transskipに1を指定してください。



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

ver5.0.0.1

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

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

ver5.2.1.0でskipflagを拡張しました。

ver5.3.0.1でzbufscidを追加。

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

2. [IN] int : skipflag
  skipflagに0を指定すると色の初期化とZバッファの初期化と背景の描画を行います。
  skipflagに1を足すと色の初期化とZバッファの初期化と背景の描画を行いません。
  skipflagに2を足すとシェーダー定数のビデオカードへの転送をキャンセルします。
  skipflagに4を足すと色の初期化は行いますがZバッファの初期化と背景の描画は行いません。 
 
3. [IN] int : zbufscid
  Zバッファーを指定します。
  デフォルト値は-1です。
  -1を指定したときは最初の引数のscidのZバッファが使用されます。
  正の値のzbufscidを指定すると指定したスワップチェインのZバッファが使用されます。

ver5.0.0.1
ver5.2.1.0で拡張
ver5.3.0.1で拡張。
E3DEndScene 描画 このメソッドが成功すると、シーンがレンダリングされ、レンダリング後のシーンがデバイス サーフェスに保持される。 なし ver5.0.0.1
E3DCreateBG 背景 画面の一番奥に表示される背景をセットします。

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

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


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

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

2. [IN] char* : filename1
  1つ目の画像ファイル名。


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

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

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

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


ver5.0.0.1

E3DSetBGU 背景 背景のUV座標のU座標を指定します。

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

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


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

2. [IN] float : startu
  画面左端のU座標の値。

3. [IN] float : endu
  画面右端のU座標の値。
ver5.0.0.1
E3DSetBGV 背景 背景のUV座標のV座標を指定します。

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

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


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

2. [IN] float : startv
  画面左端のV座標の値。

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

2. [IN] char* : fname
  *.quaのパス文字列。

3. [IN] float : mvmult
  モーションの移動成分に掛ける倍率

4. [OUT] int* : motidptr
  読み込んだモーションを識別する番号が代入されます。

5. [OUT] int* : maxframeptr
  読み込んだモーションの最大フレーム番号(総フレーム数 - 1 と同じ)が代入されます。

ver5.0.0.1
E3DSetMotionKind モーション カレントの、モーション番号を指定する。
(カレントモーションを変更する。)

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

2. [IN] int : motid
  モーションを識別する番号
ver5.0.0.1
E3DGetMotionKind モーション カレントのモーション番号を取得する。 1. [IN] int : hsid
  形状データを識別するid

2. [OUT] int* : motidptr
  モーションを識別する番号が代入される。

ver5.0.0.1
E3DSetNewPose モーション カレントのモーションを
E3DSetMotionStepでセットしたstepフレーム数分、
進ませる。

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

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

2. [IN] int : motid
  モーションを識別する番号

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

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


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

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

新しい、E3DChkConflictOBBをお使いください。
1. [IN] int : hsid1
  形状データを識別するid

2. [IN] int : hsid2
  形状データを識別するid

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

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

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

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

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


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


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

1. [IN] int : hsid1
  形状データを識別するid
2. [IN] int : partno1
  hsid1のモデル中のパーツの番号

3. [IN] int : hsid2
  形状データを識別するid
4. [IN] int : partno2
  hsid2のモデル中のパーツの番号

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

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

ver5.0.0.1
E3DSetBillboardAlpha 描画パラメータ ビルボードの頂点のアルファ値を設定します。

sigモデルデータのアルファの設定は
E3DSetMaterialAlphaをお使いください。


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

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

1. [IN] int : bbid
  E3DCreateBillboardで取得した、
  ビルボードidを渡してください。

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

ver5.0.0.1
E3DSetPos モデル位置 形状データの位置をセットする。 1. [IN] int : hsid
  形状データを識別するid

2. [IN] D3DXVECTOR3 : pos
 形状データを ( pos.x, pos.y, pos.z) に移動する。
ver5.0.0.1
E3DGetPos モデル位置 形状データの位置を取得する。 1. [IN] int : hsid
  形状データを識別するid

2. [OUT] D3DXVECTOR3* : pos
  形状データの位置を取得する。
ver5.0.0.1
E3DSetDir モデル向き 形状データの向きを指定する。
X軸、Y軸、Z軸の順番に、
指定した角度だけ回転します。


ver5.2.2.9からZ,X,Y軸の順番で回転するようになりました。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] D3DXVECTOR3 : deg
  形状データの向きをX,Y,Z軸のそれぞれの角度(degree)で指定する。
ver5.0.0.1
ver5.2.2.9で仕様変更
E3DRotateInit モデル向き 形状データの向きを初期化します。 1. [IN] int : hsid
  形状データを識別するid
ver5.0.0.1
E3DRotateX モデル向き 形状データを、X軸に関して、degx 度だけ回転します。 1. [IN] int : hsid
  形状データを識別するid

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

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

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

2. [IN] float : deg
  回転角度。
ver5.0.0.1
E3DPosForward モデル位置 形状データを、現在向いている方向に、stepだけ移動する。

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

2. [IN] float : step
  移動距離を指定する。
ver5.0.0.1
E3DCloseTo モデル位置 hsid1で識別される形状をhsid2で識別される形状の方向に動かす。

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

2. [IN] int : hsid2
  hsid2で指定した形状データの方向に移動する。

3. [IN] float : step
  移動距離を指定する。
ver5.0.0.1
E3DDirToTheOtherXZ モデル向き hsid1で識別される形状をXZ平面でhsid2で識別される形状の方向を向くようにする。

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

2. [IN] int : hsid2
  hsid2で指定した形状データの方向を向く。
ver5.0.0.1
E3DDirToTheOther モデル向き E3DDirToTheOtherXZの3次元版。

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

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

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

3. [IN] float : dist
  形状同士をどのくらいの距離、離すかを指定する。
ver5.0.0.1
E3DGetCameraPos カメラ カメラの位置を取得する。 1. [OUT] D3DXVECTOR3* : posptr
  カメラの位置 を取得する。
ver5.0.0.1
E3DSetCameraPos カメラ カメラの位置を指定する。 1. [IN] D3DXVECTOR3 : pos
  カメラを ( pos.x, pos.y, pos.z) に移動する。
ver5.0.0.1
E3DGetCameraDeg カメラ カメラの向きを取得する。 1. [OUT] float* : degxzptr
  カメラのXZ平面での角度を取得する。

2. [OUT] float* : degyptr
  カメラの仰ぎ角度を取得する。
ver5.0.0.1
E3DSetCameraDeg カメラ カメラの向きを指定する。 1. [IN] float : degxz
  カメラのXZ平面での角度を指定する。

2. [IN] float : degy
  カメラの仰ぎ角度を指定する。
ver5.0.0.1
E3DSetCameraTarget カメラ カメラの注視点を指定する。 1. [IN] D3DXVECTOR3 : target
  カメラの注視点を(target.x, target.y, target.z)にセットする。

2. [IN] D3DXVECTOR3 : upvec
  カメラの上方向のベクトルを指定する。内部で、正規化して使用される。
ver5.0.0.1
E3DChkInView 描画準備 hsidで識別されるモデルが、視野内にあるかどうかを、判定します。

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

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

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

この命令を呼び出した後の*statptrには、
ひとつも視野内にパーツがない場合は0が、
少なくとも1つは視野内にパーツがある場合は1がセットされます。

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

2. [IN] int : hsid
  形状データを識別するid

3. [OUT] int* : statptr
  視野内情報が格納される。
  詳しくは前記をご覧ください。
ver5.0.0.1
E3DEnableDbgFile デバッグ デバッグ情報を、dbg.txtに出力するように、します。 なし ver5.0.0.1
E3DSetProjection 描画パラメータ プロジェクションを指定する。

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

farが大きいほど描画する範囲が多くなり描画速度は重くなる。
また設定によっては距離の近い物同士の上下関係が崩れることがある。
これを避けるには、なるべくnearを大きくしfarを小さくすることが有効である。ただしnear < far を守ることは言うまでもない。
1. [IN] float : near
  クリッピングの近い側の距離

2. [IN] float : far
  クリッピングの遠い側の距離

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

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

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

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

1. [OUT] int* : keybuf
  keybufに、キーの状態が、代入されます。
  keybufは、int keybuf[256]; で、
  作成されている必要があります。
ver5.0.0.1
E3DDrawText テキスト 画面上の(pos.x, pos.y) にcol.r, col.g, col.b で指定した色でstrの文字列を書く。

col.aは無視される。

英数字のみ。
scaleが1.0のときは、12ポイントの大きさ。

E3DCOLOR4UCはusercoef.hで定義されている。

\nで改行できます。
1. [IN] D3DXVECTOR2 : pos
  座標

2. [IN] float : scale
  スケール。

3. [IN] E3DCOLOR4UC : col
  色

7. [IN] char* : str
  表示文字列。
ver5.0.0.1
E3DDrawBigText テキスト 画面上の(pos.x, pos.y) にcol.r, col.g, col.b で指定した色でstrの文字列を書く。

col.aは無視される。

英数字のみ。
scaleが1.0のときは、36ポイントの大きさ。

E3DCOLOR4UCはusercoef.hで定義されている。
1. [IN] D3DXVECTOR2 : pos
  座標

2. [IN] float : scale
  スケール。

3. [IN] E3DCOLOR4UC : col
  色

7. [IN] char* : str
  表示文字列。

ver5.0.0.1
E3DWaitbyFPS 同期 指定したfpsに、近くなるように、waitします。

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

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

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

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

2. [OUT] int* : retfps
  実際のfpsが代入されます。
ver5.0.0.1
E3DGetFPS 同期 fpsを計測します。

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

1. [OUT] int* : retfpsptr
  fpsが代入されます。
ver5.0.0.1
E3DCreateLight ライト 光源を作成します。

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

2. [IN] D3DXVECTOR3 : dir
  平行光源の向きを
  ベクトル(dir.x, dir.y, dir.z)を正規化したベクトルに設定する。

3. [IN] E3DCOLOR4UC : col
  平行光源の色を
  (col.r, col.g, col.b)に設定する。
  col.aは無視される。
ver5.0.0.1
E3DSetPointLight ライト lightIDで識別される光源に、ポイントライトのパラメータをセットする。 1. [IN] int : lightID
  光源を識別するid

2. [IN] D3DXVECTOR3 : pos
  ポイントライトの位置を
  (pos.x, pos.y, pos.z)に設定する。

3. [IN] float : dist
  ポイントライトの光が届く距離を設定します。

4. [IN] E3DCOLOR4UC : col
  ポイントライトの色を
  (col.r, col.g, col.b)に設定する。
  col.aは無視される。
ver5.0.0.1
E3DDestroyLight ライト ライトを破棄します。 1. [IN] int : lightID
  削除する光源を、識別するid
ver5.0.0.1
E3DClearZ 描画 Zバッファーをクリアーします なし ver5.0.0.1
E3DDestroyHandlerSet 後処理 E3DSigLoad, E3DAddMotionで作成した、
オブジェクトを破棄します。
1. [IN] int : hsid
  形状データを識別するid
ver5.0.0.1
E3DSetMotionFrameNo モーション E3DSetMotionKindの拡張版です。

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

2. [IN] int : motid
  モーションを識別する番号

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

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

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

サイズは、E3DGetSpriteSize で、
確認してください。
1. [IN] char* : filename
  画像ファイル名。

2. [IN] int : transparentflag
  透過フラグ。

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

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

  2をセットするとtpcolで指定した色を透過色とします

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

3. [IN] E3DCOLOR4UC* : tpcolptr
  transparentflag = 2 のとき透過色を指定します。
  透過色を指定しない場合は0を渡します。
  tpcolptr->aは無視されます。

4. [OUT] int* : spriteIDptr
  作成したスプライトを識別するIDが代入されます。
ver5.0.0.1
E3DBeginSprite スプライト スプライトを描画できるように、
デバイスを準備します。

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

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

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

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

4. [IN] D3DXVECTOR3 : tra
  スプライトの描画位置(tra.x, tra.y)を指定します。
  指定した位置がスプライトの左上の座標となります。

tra.zは描画時の奥行き情報。
3D描画との前後関係にも、反映されます。

  tra.zには0.0から1.0のfloatを指定してください。
  0.0のとき、一番手前に描画され、
  1.0のとき、一番奥に描画されます。
  (ビデオカードによっては1.0は表示されません。いちばん奥は0.99999などにしておくのが安全です。)

  0.0から1.0の間は、均等な効果ではありません。
  値を増やしても、あまり効果の無い場所や、
  少し、値を増やしただけで、効果が大きくなる範囲が  あります。
  Easy3Dの場合は、0.99以降が、
  少し値を増やしただけで、
  効果が大きい範囲となります。
ver5.0.0.1
E3DGetSpriteSize スプライト spriteIDで識別される、スプライトの、サイズを取得します。 1. [IN] int : spriteID
  スプライトを識別するID。

2. [OUT] int* : spriteWidthptr
3. [OUT] int* : spriteHeightptr
  幅と高さが代入されます。
ver5.0.0.1
E3DSetSpriteRotation スプライト E3DCreateSprite命令で作成したスプライトを回転させます。

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

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

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

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

1. [IN] int : spid
  スプライトデータを識別するID

2. [IN] D3DXVECTOR2 : center
  (center.x, center.y)の座標を中心に回転します。

3. [IN] float : rotdeg
  rotdeg 度だけスプライトを回転します。
ver5.0.0.1
E3DSetSpriteARGB スプライト スプライトに乗算する色を指定します。

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

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

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

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

衝突したビルボードのIDが取得できます。
1. [IN] D3DXVECTOR3 : center
  境界球の中心座標( center.x, center.y, center.z )

2. [IN] float : r
  境界球の半径

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

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


7. [OUT] int* : confbbidptr

8. [IN] int : arrayleng
  衝突したビルボードのIDを格納するための配列
  confbbidptr = (int*)malloc( sizeof( int ) * arrayleng );
  などの命令で、配列を作成して、
  この関数に指定してください。

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

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

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

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

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


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

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


衝突したビルボードのIDが取得できます。
1. [IN] int : hsid
  形状データを識別する番号

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

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

4. [OUT] int* : confbbidptr

5. [IN] int : arrayleng
  衝突したビルボードのIDを格納するための配列
  confbbidptr = (int*)malloc( sizeof( int ) * arrayleng );
  などの命令で、配列を作成して、
  この関数に指定してください。

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

6. [OUT] int* : confnumptr
  衝突したビルボードの個数が代入されます。
  maxno = *confnumptr - 1
  とすると、
  *confbbidptr から、*(confbbidptr + maxno) までの間に、
  衝突したビルボードのIDが代入されます。


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


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

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


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

1. [IN] int : hsid1
  形状データを識別するid

2. [IN] int : hsid2
  形状データを識別するid

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

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

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



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

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

1. [IN] int : hsid1
  形状データを識別するid
2. [IN] int : partno1
  hsid1のモデル中のパーツの番号

3. [IN] int : hsid2
  形状データを識別するid
4. [IN] int : partno2
  hsid2のモデル中のパーツの番号

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

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

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

2. [IN] char* : filename2
  地面の道の情報の元となる、BMPファイル名

3. [IN] char* : filename3
  地面の川の情報の元となる、BMPファイル名

4. [IN] char* : filename4
  地面、道、川の模様を決める、BMPファイル名

5. [IN] float : maxx
  地面のX座標の最大値

6. [IN] float : maxz
  地面のZ座標の最大値

7. [IN] int : divx
  X方向の分割数

8. [IN] int : divz
  Z方向の分割数

9. [IN] float : maxheight
  地面の高さの最大値

10. [OUT] int* : hsidptr
  作成した地面データを識別するIDが代入されます。
ver5.0.0.1
E3DCameraPosForward カメラ カメラを、向いている方向に、
stepの距離だけ
移動させます。

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

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

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

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

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

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

1. [IN] int : charahsid
  移動する形状データを識別するid

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

3. [IN] int : mode
  0を指定すると、飛ぶモード
  1を指定すると、地面を這うモード

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

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

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

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

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

  となります。

7. [OUT] D3DXVECTOR3* : adjust
  *resultptr != 0 のときに、
    mode == 0のときはぶつかった座標
    mode == 1のときは地面の座標が代入されます。


8. [OUT] D3DXVECTOR3* : nptr
  *resultptr != 0 のときに、
    mode == 0のときはぶつかったポリゴン
    mode == 1のときは地面のポリゴンの
    法線ベクトルが代入されます。
    
    跳ね返る方向を決めるときなどに
    使用できるのではないかと思い、
    加えてみました。
ver5.0.0.1
E3DChkConfGroundVec 当たり判定 befposとnewposを結ぶ線分と、groundhsidで識別される地面との
あたり判定をします。

線分の座標を、ユーザーが指定すること以外は、
E3DChkConfGroundと全く、同じです。
1. [IN] D3DXVECTOR3 : befpos
  線分の始点を(befpos.x, befpos.y, befpos.z)で
  指定します。

2. [IN] D3DXVECTOR3 : newpos
  線分の終点を(newpos.x, newpos.y, newpos.z)で
  指定します。

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

4. [IN] int : mode
  0を指定すると、飛ぶモード
  1を指定すると、地面を這うモード

5. [IN] float : diffmaxy
  一度の移動で登ることが出来る高さの最大値を指定してください。

6. [IN] float : mapminy
  groundhsidで識別されるデータの一番低いY座標の値

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

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

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

8. [OUT] D3DXVECTOR3* : adjustptr
  *resultptr != 0 のときに、
    mode == 0のときはぶつかった座標
    mode == 1のときは地面の座標が代入されます。

9. [OUT] D3DXVECTOR3* : nptr
  *resultptr != 0 のときに、
    mode == 0のときはぶつかったポリゴン
    mode == 1のときは地面のポリゴンの法線ベクトルが代入されます。
    
跳ね返る方向を決めるときなどに使用できるのではないかと思い加えてみました。
ver5.0.0.1
E3DGetPartNoByName モデル情報 モデル内のパーツの名前から、パーツの番号を取得します。

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

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

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


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

1. [IN] int : hsid
  形状データを識別するid

2. [IN] char* : partname
  RokDeBone2で表示される、パーツの名前。

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

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

2. [IN] int : partno
  パーツを識別する番号

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

ローカル座標とグローバル座標のどちらかを
取得できます。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別する番号

3. [IN] int : vertno
  頂点の番号

4. [IN] int : kind
  0を指定するとローカル座標
  1を指定するとグローバル座標が
  取得できます。

5. [OUT] D3DXVECTOR3* : vertptr
  頂点の座標が代入されます。


ver5.0.0.1
E3DSetVertPos モデル情報 partnoで識別されるパーツ内の、頂点番号vertnoの、頂点の座標(ローカル座標)をセットします。


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



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


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

1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別する番号

3. [IN] int : vertno
  頂点の番号

4. [IN] D3DXVECTOR3 : vert
  座標を指定の頂点にセットします。
ver5.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] int : hsid
  配置したい形状データを識別するid

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

3. [IN] float : mapmaxy
  地面データの高さの最大値

4. [IN] float : mapminy
  地面データの高さの最小値

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

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

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

1. [IN] int : hsid
  配置したい形状データを識別するid

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

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

4. [IN] float : mapmaxy
  地面データの高さの最大値

5. [IN] float : mapminy
  地面データの高さの最小値

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

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


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

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

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

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

2. [IN] float : width
  ビルボードの幅。

3. [IN] float : height
  ビルボードの高さ。

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


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

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

6. [IN] int : orgflag
  ビルボードの原点の位置を指定します。

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

  orgflagに1を指定すると、
  原点は、ビルボードの中心になります。
  爆発などの、特殊効果に使う場合に、便利です。


7. [OUT] int* : billboardidptr
  作成したビルボードを識別する番号が、代入されます。


ver5.0.0.1
E3DRenderBillboard ビルボード E3DCreateBillboard
で作成されたビルボード全てを、
描画します。

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

また、
視点から、遠い方から順番に、描画されます。

transskip引数の意味については
E3DTransformBillboardの説明をお読みください。



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

2. [IN] int : transskip
  1を指定すると描画準備の計算をスキップします。
  E3DTransformBillboardを使った場合に使用します。
  通常は0です。
ver5.0.0.1
E3DSetBillboardPos ビルボード billboardidで識別されるビルボードの、位置を指定します。
1. [IN] int : billboardid
  ビルボードを識別する番号

2. [IN] D3DXVECTOR3 : pos
  ビルボードの位置を、(pos.x, pos.y, pos.z)
  にセットします。
ver5.0.0.1
E3DSetBillboardOnGround ビルボード billboardidで識別されるビルボードの、位置を、指定したXZ座標の、地面の高さにセットします。

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

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

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

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

3. [IN] float : mapmaxy
  地面データの一番大きなY座標

4. [IN] float : mapminy
  地面データの一番小さなY座標
  (通常0.0)

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

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

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

3. [IN] int : adjustuvflag
  UV座標を正規化したいときは1を、
  そうでないときは、0を指定してください。
  何も指定しないときは、0として扱われます。
  2を指定すると0.0から1.0の間にクランプします。

4. [IN] int : bonetype
  mqoにボーンが含まれている場合は
  ボーンのタイプを指定します。
  BONETYPE_RDB2を指定するとRokDeBone2形式の
  線分をボーンと認識するタイプになります。
  BONETYPE_MIKOを指定すると
  mikoto形式のタイプになります。
  省略するとBONETYPE_RDB2になります。
  これらの定数はusercoef.hで定義されています。

5. [OUT] int* : hsidptr
  作成した地面を識別するhsidが代入されます。

ver5.0.0.1
ver5.0.2.6で拡張

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

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

2. [IN] char* : filename
  出力するファイル名
ver5.0.0.1
E3DGetBillboardInfo ビルボード 指定した番号の、ビルボード情報を、取得します。

ビルボードの番号には、
E3DCreateBillboardで取得した番号を、
指定してください。
 
1. [IN, OUT] BBINFO* : bbinfoptr
  情報を取得したいビルボードの番号を
  bbinfo->bbidにセットしてから渡してください。
ver5.0.0.1
E3DGetNearBillboard ビルボード 指定した座標に、一番近いビルボードのIDを取得します。

maxdist で指定した、距離より、遠いビルボードしか存在しない場合は、
IDに、-1 が代入されます。
1. [IN] D3DXVECTOR3 : pos
  位置座標を、(pos.x, pos.y, pos.z)で指定します。


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

3. [OUT] int* : nearbbidptr
  (pos.x, pos.y, pos.z) に一番近く、
  maxdistより近いビルボードのIDを代入します。
  存在しない場合は-1を代入します。
ver5.0.0.1
E3DGetInvisibleFlag モデル情報 hsidで識別されるモデルのpartnoのパーツのInvisibleFlag(見えないフラグ)を取得します。

InvisibleFlagが、1になっているパーツは、あたり判定は行われますが表示はされません。
進入禁止区域との境目に置く見えないオブジェクトとして使用することなどが、
考えられます。

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

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

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

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

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

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

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

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

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

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


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

2. [IN] float : maxx
  壁のX座標の最大値

3. [IN] float : maxz
  壁のZ座標の最大値

4. [IN] int : divx
  X方向の分割数

5. [IN] int : divz
  Z方向の分割数

6. [IN] float : wallheight
  作成する壁の高さ

7. [OUT] int* : hsidptr
  作成した壁データを識別するIDが代入されます。
ver5.0.0.1
E3DChkConfWall 当たり判定 E3DSetMovableArea またはE3DLoadMQOFileAsMovableAreaで作成した壁データとキャラクターのあたり判定を行います。

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

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

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

1. [IN] int : charahsid
  移動する形状データを識別するid

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

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

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

5. [OUT] D3DXVECTOR3* : adjustptr
  result != 0 のときに
  修正後の座標が代入されます。

6. [OUT] D3DXVECTOR3* : nptr
  result != 0 のときに、
  ぶつかった面の法線ベクトルの値が
  代入されます。
ver5.0.0.1
E3DChkConfWallVec 当たり判定 E3DSetMovableArea,またはE3DLoadMQOFileAsMovableAreaで作成した壁データとキャラクターのあたり判定を行います。

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

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

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

1. [IN] D3DXVECTOR3 : befpos
  線分の始点を(befpos.x, befpos.y, befpos.z)で
  指定します。

2. [IN] D3DXVECTOR3 : newpos
  線分の終点を(newpos.x, newpos.y, newpos.z)で
  指定します。

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

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

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

6. [OUT] D3DXVECTOR3* : adjustptr
  result != 0 のときに、
  修正後の座標が代入されます。

7. [OUT] D3DXVECTOR3* : nptr
  result != 0 のときに、
  ぶつかった面の法線ベクトルの値が代入されます。
ver5.0.0.1
E3DVec3Normalize 算術 指定したベクトルを、正規化た値を取得します。

つまり、指定したベクトルの向きを持つ、
大きさ1のベクトルが、取得できます。
1. [IN] D3DXVECTOR3 : vec
  ベクトルを、(vec.x, vec.y, vec.z)で指定します。

2. [OUT] D3DXVECTOR3* : newvecptr
  向きが(vec.x, vec.y, vec.z)で
  大きさが1なベクトルを代入します。
 
ver5.0.0.1
E3DVec2CCW 算術 vec2 がvec1 に対して、反時計回りの時、
resultに、1を代入し、
時計回りの時、
resultに、-1を代入する。
1. [IN] D3DXVECTOR2 : vec1
  vec1を指定する。

2. [IN] D3DXVECTOR2 : vec2
  vec2を指定する。

3. [OUT] int* : result
  vec2 がvec1 に対して、反時計回りの時
  resultに、1を代入し、
  時計回りの時resultに-1を代入する。
ver5.0.0.1
E3DVec3RotateY 算術 ベクトルbefvecをY軸に関してdegy 度だけ回転したベクトルnewvec を取得します。
1. [IN] D3DXVECTOR3 : befvec
  回転したいベクトルを、
  (befvec.x, befvec.y, befvec.z)で指定します。

2. [IN] float : degy
  回転角度を指定します。
  degy の角度だけ回転します。

3. [OUT] D3DXVECTOR3* : newvecptr
  回転後のベクトルが代入されます。
ver5.0.0.1
E3DLoadMQOFileAsMovableArea メタセコイアの、MQOファイルで作成した壁のデータを、移動可能領域情報として読み込みます。

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

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

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


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

1. [IN] char* : filename
  読み込む、mqo ファイル名。

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

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

oggとwavを読み込めます。
oggはステレオのみ。

3Dサウンドにも対応しています。
3Dサウンドはモノラルのみです。

MIDIは読み込めません。


ver5.3.0.3でoggdatanum引数追加。

ver5.3.1.6でoggdatanum引数を削除(自動設定に変更)
1. [IN] char* : filename
  読み込む、サウンド ファイル名。

2. [IN] int : use3dflag
  3Dサウンドとして読み込む場合は1を指定してください。
  デフォルト値は0です。

3. [IN] int : reverbflag
  リバーブを有効にしたいときは1を
  したくないときは0を指定します。

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

5. [OUT] int* : soundidptr
  作成した音データを識別する番号が代入されます。

ver5.0.0.1
ver5.3.0.0で仕様変更
ver5.3.0.3で拡張
ver5.3.1.6で修正
E3DPlaySound サウンド E3DLoadSoundで読み込んだ音データを再生します。


1. [IN] int : soundid
  再生したい音を識別する番号を、指定します。

2. [IN] int : startsample
  再生開始位置をサンプル(周波数)単位で指定します。

3. [IN] int : openo
  将来のバッチ処理用の引数です。
  現在は0を指定しておいてください。

4. [IN] int : numloops
  繰り返し回数を指定します。
  無限ループは255を指定します。
  255以下でもあまり大きい値を指定するとハングすることがあります(255はハングしません)。
 
ver5.0.0.1
ver5.3.0.0で仕様変更
E3DStopSound サウンド 音の再生を停止します。
1. [IN] int : soundid
  停止したい音を識別する番号を指定します。

ver5.0.0.1
E3DSetSoundVolume サウンド 音の音量を設定します。

1. [IN] float : volume
  音量を指定します。
ソース音量との比率を指定します。

2. [IN] int : soundid
  設定したい音を識別する番号を指定します。
  -1を指定すると、全ての音の音量を設定できます。
ver5.0.0.1
ver5.3.0.0で仕様変更
E3DDestroySound サウンド 読み込んだ音データを破棄します。
破棄した音はその後操作することは出来ません。
ただ、再生を終了させる場合は
E3DStopSound関数を使用してくださ
1. [IN] int : soundid
  破棄したい音を識別する番号
ver5.0.0.1
E3DGetSoundVolume サウンド 現在の音量を取得します。 1. [IN] int : soundid
  音を識別する番号

2. [OUT] float* : volptr
  音量(ソース音量との比率)が代入されます。
ver5.0.0.1
ver5.3.0.0で仕様変更
E3DSet3DSoundListenerMovement サウンド リスナーの位置と向きを設定します。

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

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

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

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


1. [IN] int : hsid
  モデルデータを識別する番号
  -1のときは視点をリスナーとします。
ver5.0.0.1
E3DSet3DSoundMovement サウンド 3Dサウンドの位置と速度を設定します。

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

1. [IN] int : soundid
  3Dサウンドを識別する番号

2. [IN] D3DXVECTOR3 : pos
  3Dサウンドの位置を指定します。

3. [IN] D3DXVECTOR3 : v
  3Dサウンドの速度を指定します。
ver5.0.0.1
E3DCreateNaviLine ナビライン ナビラインを作成します。

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

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

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

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

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

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


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

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

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

3. [OUT] int* : npidptr
  新しく追加したナビポイントのIDが代入されます。
ver5.0.0.1
E3DRemoveNaviPoint ナビライン ナビラインからナビポイントを削除します。 1. [IN] int : nlid
  ラインを識別するID

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

2. [IN] int : npid
  ナビポイントを識別するID

3. [OUT] D3DXVECTOR3* : posptr
  ナビポイントの座標が代入されます。
 
ver5.0.0.1
E3DSetNaviPointPos ナビライン ナビポイントの座標をセットします。
この座標をもとに、
キャラクターが移動することになります。
1. [IN] int : nlid
  ラインを識別するID

2. [IN] int : npid
  ナビポイントを識別するID

3. [IN] D3DXVECTOR3 : pos
  ナビポイントの座標を
  (pos.x, pos.y, pos.z)に設定します。
ver5.0.0.1
E3DGetNaviPointOwnerID ナビライン ナビポイントのOwnerIDを取得します。 1. [IN] int : nlid
  ラインを識別するID

2. [IN] int : npid
  ナビポイントを識別するID

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

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

2. [IN] int : npid
  ナビポイントを識別するID

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

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


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

2. [IN] int : npid
  ナビポイントを識別するID

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

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


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


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

2. [IN] int : npid
  ナビポイントを識別するID

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

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

2. [IN] D3DXVECTOR3 : pos
  (pos.x, pos.y, pos.z)に一番近いナビポイントを探します。

3. [OUT] int* : nearidptr
  一番近いナビポイントのIDが代入されます。

4. [OUT] int* : previdptr
  一番近いナビポイントの前のポイントのIDが代入されます。

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

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

2. [IN] int : div
  何分割して補間するかを指定します。

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

2. [IN] int : grounhdis
  地面を識別するhsid

3. [IN] float : mapmaxy
  地面データのY座標の最大値を指定します。

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

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



1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : nlid
  ラインを識別するID

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

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

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

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

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

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

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

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

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

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

8. [IN] float : dirstep
  一度の移動で、最大何度まで回転できるかを
  指定します。
  回転角度の値を渡してください。
  
9. [OUT] D3DXVECTOR3* : newposptr
  移動後の座標が代入されます。

10. [OUT] D3DXQUATERNION* : newqptr
  移動後の姿勢を表すクォータニオンが代入されます。

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

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

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

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

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

2. [IN] D3DXQUATERNION : q
  姿勢を表すクォータニオンを
  指定してください。
  
ver5.0.0.1
E3DGetDirQ モデル向き 姿勢をクォータニオンの形式で取得します。 1. [IN] int : hsid
  形状データを識別するID

2. [OUT] D3DXQUATERNION* : qptr
  姿勢を表すクォータニオンが代入されます。
ver5.0.0.1
E3DSetWallOnGround 壁データを地面の高さに配置します。 1. [IN] int : whsid
  壁の形状データを識別するID

2. [IN] int : ghsid
  地面の形状データを識別するID

3. [IN] float : mapmaxy
  地面データの最大の高さ

4. [IN] float : mapminy
  地面データの最低の高さ

5. [IN] float : wheight
  壁の高さ。


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

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


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


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

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

2. [IN] int : nlid
  ナビラインを識別するID

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

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

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

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

2. [IN] D3DXVECTOR3 : pos
  キャラクターの位置を指定します。

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

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

5. [OUT] int* : roundptr
  キャラクターが何週目かが代入されます。

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

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

  例えば、
  hsidptr = (int*)malloc( sizeof(int) * arrayleng );
  という命令で、作成したデータを渡してください。

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

3. [OUT] int* : orderptr
  順位順に、hsidが代入されます。
  *orderptr には、1位のhsidの番号が、
  *(orderptr + 1) には、2位のhsidの番号が代入されます。


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

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

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

2. [IN] int : partno
  設定したいパーツの番号を指定します。

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

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

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

3. [IN] int : flag
  flagに0を指定すると指定パーツが無効になります。
  flagに1を指定すると有効になります。
ver5.0.0.1
E3DSetBillboardDiffuse モデル情報 ビルボードのdiffuse色をセットする関数です。

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

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


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

頂点単位で色の設定が出来ます。
1. [IN] int : bbid
  ビルボードを識別するID。
  -1を指定すると全てのビルボードの色を設定できます。

2. [IN] E3DCOLOR4UC : col
  指定したい色を(col.r, col.g, col.b)で指定します。

  setflagに乗算を指定した場合は、
  各成分に、r/255, g/255, b/255を乗算します。

  col.aは無視されます。

3. [IN] int : setflag
  setflagが0のときは、
  パーツの色をcolにセットします。

  setflagが1のときは、
  パーツの色に(col.r/255, col.g/255, col.b/255)を乗算します。

  setflagが2のときは、
  パーツの色にcolを足し算します。

  setflagが3のときは、
  パーツの色からcolを減算します。


4. [IN] int : vertno
  指定した頂点番号の色をセットします。
  -1をセットした場合には
  bbidで指定したビルボード全体の色の設定をします。
ver5.0.0.1
E3DSetBillboardSpecular モデル情報 ビルボードのspecular色をセットする関数です。

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

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



頂点単位で色の設定が出来ます。
1. [IN] int : bbid
  ビルボードを識別するID
  -1を指定すると全てのビルボードの色を設定できます。

2. [IN] E3DCOLOR4UC : col
  指定したい色を(col.r, col.g, col.b)で指定します。

  setflagに乗算を指定した場合は、
  各成分に、r/255, g/255, b/255を乗算します。

  col.aは無視されます。

3. [IN] int : setflag
  setflagが0のときは、
  パーツの色をcolにセットします。

  setflagが1のときは、
  パーツの色に(col.r/255, col.g/255, col.b/255)を乗算します。

  setflagが2のときは、
  パーツの色にcolを足し算します。

  setflagが3のときは、
  パーツの色からcolを減算します。


4. [IN] int : vertno
  指定した頂点番号の色をセットします。
  -1をセットした場合には
  bbidで指定したビルボード全体の色の設定をします。
ver5.0.0.1
E3DSetBillboardAmbient モデル情報 ビルボードのambient色をセットする関数です。

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

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



頂点単位で色の設定が出来ます。
1. [IN] int : bbid
  ビルボードを識別するID
  -1を指定すると全てのビルボードの色を設定できます。

2. [IN] E3DCOLOR4UC : col
  指定したい色を(col.r, col.g, col.b)で指定します。

  setflagに乗算を指定した場合は、
  各成分に、r/255, g/255, b/255を乗算します。

  col.aは無視されます。

3. [IN] int : setflag
  setflagが0のときは、
  パーツの色をcolにセットします。

  setflagが1のときは、
  パーツの色に(col.r/255, col.g/255, col.b/255)を乗算します。

  setflagが2のときは、
  パーツの色にcolを足し算します。

  setflagが3のときは、
  パーツの色からcolを減算します。


4. [IN] int : vertno
  指定した頂点番号の色をセットします。
  -1をセットした場合には
  bbidで指定したビルボード全体の色の設定をします。

ver5.0.0.1
E3DSetBlendingMode 描画パラメータ ビルボードとスプライトの半透明モードを指定します。

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

ver5.0.2.2でモードが4つ増えました。

ver5.1.0.1でオーバーレイ風、覆い焼き風モードが増えました。

sigモデルデータの半透明モードの設定は
E3DSetMaterialBlendingModeをお使いください。
1. [IN] int : hsid
  形状データを識別するID
  -1を指定するとビルボードのモードを設定できます。

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


2. [IN] int : partno
  設定したいパーツの番号を指定します。

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

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

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

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

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

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

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

  103を指定すると乗算モード。
  104を指定すると減算モード。
  105を指定するとスクリーンモード。
  106を指定するとネガ反転モードになります。

  107を指定するとオーバーレイ風合成モード。
  108を指定すると覆い焼き風モードになります。


ver5.0.0.1
ver5.0.2.2で拡張
ver5.1.0.1で拡張
E3DSetRenderState 描画パラメータ パーツごとにRenderStateを設定できます。

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


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

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

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

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

2. [IN] int : partno
  設定したいパーツの番号を指定します。

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

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

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

3. [IN] int : statetype
  設定するタイプを指定してください。

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

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


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

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

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

2. [IN] int : partno
  設定したいパーツの番号を指定します。

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

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

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


3. [IN] D3DXVECTOR3 : scale
  X,Y,Zのそれぞれの倍率を指定します。
  それぞれ、
  scale.x、
  scale.y、
  scale.z 倍されます。
  等倍は1.0。

4. [IN] int : centerflag
  拡大縮小する際の中心を指定します。

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

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

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

ver5.0.0.1
E3DGetScreenPos3FVec モデル情報 任意の3D座標からスクリーン(2D)座標を取得する関数。

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


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


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

2. [IN] D3DXVECTOR3 : pos3d
  3D座標を指定してください。

3. [OUT] D3DXVECTOR3* : scposptr
  変換後の2D座標が(scposptr->x, scposptr->y)に代入されます。

  奥行き情報Zはscposptr->zに代入されます。

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

  Zの値が0.0から1.0の間にないときは視野外を意味します。
  
ver5.0.0.1
E3DCreateQ 算術 クォータニオンを作成し、操作用のid を取得します。

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

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


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

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

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

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

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

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

2. [IN] D3DXVECTOR3 : axis
  回転の軸のベクトルを、
  (axis.x, axis.y, axis.z)に指定します。 
  軸のベクトルは、内部で正規化されます。
 
3. [IN] float : deg
  指定した軸に関して
  deg度だけ回転した姿勢をセットします。
ver5.0.0.1
E3DGetQAxisAndDeg 算術 クォータニオンにセットされている姿勢情報を解析します。

回転軸と回転角度が得られます。

オイラー角を取得したい場合は
E3DQtoEulerをご使用ください。
1. [IN] int : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。

2. [OUT] D3DXVECTOR3* : axisptr
  回転の軸のベクトルを代入します。 

3. [OUT] float* : degptr
  回転角度を代入します。
ver5.0.0.1
E3DRotateQX 算術 クォータニオンの姿勢情報を、X軸に関して回転します。

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

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

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

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

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

2. [IN] float : deg
  Z軸に関してdeg度だけ回転します。
ver5.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] int : resqid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidのクォータニオンに結果が代入されます。

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

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

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

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

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

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

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

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

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


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

2. [IN] char* : bonename
  ボーンの名前を渡してください。

3. [OUT] int* : bonenoptr
  ボーンを識別するIDが代入されます。
ver5.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] int : hsid
  形状データを識別するID

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

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

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

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

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




ver5.0.0.1
E3DGetMPInfo モーション mpinfoptrで指定した構造体に、
情報が代入されます。

構造体MPINFO2はusercoef.hで定義されています。

mpinfo.mpidはモーションポイントのID
mpinfo.qidはモーションポイントのクォータニオン情報
mpinfo.traはモーションポイントの移動情報
mpinfo.framenoはモーションポイントのフレーム番号
mpfino.interpolationはクォータニオンの補間方法。
mpinfo.scaleはモーションポイントの拡大情報。
mpinfo.userint1はユーザーデータ。

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

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

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

・引数
1. [IN] int : hsid
  形状データを識別するID

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

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

4. [IN, OUT] MPINFO2* : mpinfoptr
  モーションポイントの情報を格納する配列。
  mpinfoptr->qidだけは、呼び出し前に
  あらかじめ設定しておく必要があります。

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

mipptrにはMPINFO2構造体へのポインタを指定してください。
mpinfo.mpidとmpinfo.qidには必ずあらかじめ値をセットしておいてください。


flagptrには
int flag[MPI2_MAX];で宣言した配列のポインタを渡してください。

MPI2_で始まる定数はusercoef.hで定義されています。

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

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

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

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

flag[ MPI2_TRA ]が1の場合は、
mpinfo.traの移動量情報を
モーションポイントにセットします。

以下同様に、
flag[MPI2_QUA] 〜flag[MPI2_USERINT1]
までに、セットしたい項目に1を、
セットしたくない項目に0を指定してください。


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

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

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

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

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

4. [IN] MPINFO2* : mpinfoptr
  モーションポイントの情報を格納する配列。

5. [IN] int* : flagptr
  mpinfoのどの成分を有効にするのかを
  mpinfoflagの各成分で指定します。


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

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


1. [IN] int : hsid
  形状データを識別するID

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

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

4. [IN] int : frameno
  モーションポイントがあるかどうか、
  調べたいフレーム番号を指定します。

5. [OUT] int* : mpid
  モーションポイントを識別するID。
  framenoが示すフレーム番号に
  モーションポイントがあった場合は、
  そのモーションポイントのidが代入されます。
  無かった場合は-1が代入されます。
ver5.0.0.1
E3DGetMotionFrameLength モーション motidで識別されるモーションのフレーム数を取得します。

気を付けて欲しいのは
フレーム番号は0から始まるので、
最大のフレーム番号は
leng - 1
だということです。
1. [IN] int : hsid
  形状データを識別するID

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

3. [OUT] int* : leng
  モーションのフレーム数が代入されます。
ver5.0.0.1
E3DSetMotionFrameLength モーション モーションのフレーム数をframelengに変更します。

framelengが変更前のフレーム数より小さかった場合は、
frameleng - 1より大きなフレーム番号を持つ
モーションポイントは削除されます。

ポーズの情報も削除されます。
再構築する場合には
E3DFillUpMotionを呼んでください。
1. [IN] int : hsid
  形状データを識別するID

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

3. [IN] int : frameleng
  モーションのフレーム数を指定します。
ver5.0.0.1
E3DAddMP モーション mpinfoで指定した情報を持つモーションポイントを新たに作成し、作成したモーションポイントを識別するidを取得します。

mpinfoptrにはMPINFO2構造体へのポインタを渡してください。

mpinfoのmpid以外の成分にあらかじめ値をセットして呼び出してください。
mpinfoの、どの成分に、
何の情報をセットすれば良いかは
E3DGetMPInfoをご覧ください。

mpinfo[MPI2_FRAMENO]で指定したフレーム番号に、
既に、モーションポイントが存在する場合は、エラーになりますので、
注意してください。

(呼び出し前にE3DExistMPで、
チェックすると確実です。)


新しいモーションポイントを識別するIDは
mpinfoptr->mpidに代入されます。


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

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

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

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

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

4. [IN, OUT] MPINFO2* : mpinfoptr
  モーションポイントの情報を格納する配列。

ver5.0.0.1
E3DDeleteMP モーション mpidで識別されるモーションポイントを削除します。

この関数に渡したmpidは
以後、使えなくなります。


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

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

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

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

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

4. [IN] int : mpid
  モーションポイントを識別するID
  E3DGetNextMPで取得したidを渡してください。
ver5.0.0.1
E3DFillUpMotion モーション モーションを指定したフレーム番号分だけ補間計算します。

この計算の結果、
モデルのポーズにモーションポイントの情報が反映されるようになります。

bonenoで指定したボーンと
その全ての子供ボーンの計算が行われます。

そのため、
変更したボーンの内で
一番親のボーンの番号で
1回だけこの関数を呼び出せば
良いことになります。


1. [IN] int : hsid
  形状データを識別するID

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

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

  bonenoで指定したボーンと
  その子供ボーン全てのポーズを計算します。

  boneno に -1を指定した場合は、
  全てのボーンの計算が行われます。

  ですが、
  bonenoを指定した方が
  計算量が少なくなります。


4. [IN] int : startframe
5. [IN] int : endframe
  フレーム番号が、
  startframeから、endframeまでの間の
  モデルのポーズを計算します。
  startframeとendframeには、
  モーションポイントが存在しなくても、
  計算可能です。

  endframeに-1を指定した場合は、
  startrframeから、最後のフレームまで
  計算されます。
ver5.0.0.1
E3DCopyMotionFrame モーション srcmotidで識別されるモーションのフレーム番号srcframenoの全てのモーションポイントの情報を、dstmotidで識別されるモーションのフレーム番号dstframenoのモーションポイントへコピーします。

dstframenoにモーションポイントが無い場合は作成されます。

srcframenoにモーションポイントが無い場合は、
計算で求めてdstframenoにコピーします。
この場合、計算時間が余分にかかります。



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

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

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

2. [IN] int : srcmotid
  コピー元のモーションを識別するID
  E3DAddMotionで取得したmotidを指定してください。

3. [IN] int : srcframeno
  コピー元のフレーム番号

4. [IN] int : dstmotid
  コピー先のモーションを識別するID
  E3DAddMotionで取得したmotidを指定してください。

5. [IN] int : dstframeno
  コピー先のフレーム番号

ver5.0.0.1
E3DGetDirQ2 モデル向き E3DGetDirQをqidで操作できるようにしたものです。

qidで指定したクォータニオンに
モデルデータの姿勢情報が
格納されます。
1. [IN] int : hsid
  形状データを識別するID

2. [IN, OUT] int : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
ver5.0.0.1
E3DSetDirQ2 モデル向き E3DSetDirQをqidで操作できるようにしたものです。

qidで識別されるクォータニオンの
姿勢情報を
モデルデータにセットします。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
ver5.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 ずつ、内分して、近づきます。

既知のバグとして分割数が小さいと(1のとき)向きが動かなくなるという不具合があります。
そのうち作り直す予定です。

1. [IN] int : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンに
  指定した方向を向くための情報が
  格納されます。

2. [IN] D3DXVECTOR3 : vec
  向きたい向きのベクトルを指定してください。
  位置ではなくて向きを指定してください。

3. [IN] D3DXVECTOR3 : basevec
  初期状態の向きを指定してください。

4. [IN] int : upflag
  上方向の制御モードを指定してください。
  

5. [IN] int : divnum
  内分する割合を指定してください。
  大きな値をいれるほど、
  細かく動きます。

ver5.0.0.1
E3DMultQVec 算術 (befvecx, befvecy, befvecz)というベクトルに対して、qidで識別されるクォータニオンによる回転をした後のベクトルを、(aftvecx, aftvecy, aftvecz)に代入します。


例えば、初期状態で-Z方向を向いている
モデルの場合、

qidにE3DGetDirQ2呼び出しに使用した
qidを渡し
basevecに(0, 0, -1)を渡せば、
aftvecに現在キャラクターが向いている向きが代入されます。
1. [IN] int : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンの
  回転変換をします。
  
2. [IN] D3DXVECTOR3 : befvec
  回転前のベクトルを指定してください。

3. [OUT] D3DXVECTOR3* : aftvecptr
  クォータニオンでの回転後のベクトが代入されます。
ver5.0.0.1
E3DTwistQ 算術 クォータニオンにねじりを加えます。

basevecにはE3DLookAtQで説明したのと
同じ、初期状態の向きを指定してください。


ねじりの角度は、初期状態からの角度ではなく現在の姿勢に追加したい分だけの
ねじりの角度を指定してください。
1. [IN] int : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンに、
  指定した方向を向くための情報が、
  格納されます。

2. [IN] float : twistdeg
  twistdeg 度だけ、ねじりを加えます。

3. [IN] D3DXVECTOR3 : basevec
  初期状態の向きを指定してください。
  E3DLookAtQで指定したのと同じbasevecを指定してください。
ver5.0.0.1
E3DInitTwistQ 算術 E3DTwistQで与えたねじれを初期化します。

basevecにはE3DLookAtQで説明したのと
同じ、初期状態の向きを指定してください。
1. [IN] int : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンの
  ねじれを初期化します。
  
2. [IN] D3DXVECTOR3 : basevec
  初期状態の向きを指定してください。
  E3DLookAtQで指定したのと同じbasevecを指定してください。
ver5.0.0.1
E3DGetTwistQ 算術 E3DTwistQで与えたねじれの角度の合計を取得します。
1. [IN] int : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンの
  ねじれを取得します。

2. [OUT] float* : twistptr
  ねじれ角度の合計の値を
  代入します。
ver5.0.0.1
E3DRotateQLocalX 算術 クォータニオンをローカルなX軸に関して回転します。

現在の姿勢に対して更に回転します。

E3DRotateQXと違うのは、
姿勢変換を行う前のX軸に関して
回転できる点です。

1. [IN] int : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンに、
  回転を加えます。

2. [IN] float : deg
  deg 度だけ、回転を加えます。
ver5.0.0.1
E3DRotateQLocalY 算術 クォータニオンをローカルなY軸に関して回転します。

現在の姿勢に対して更に回転します。

E3DRotateQYと違うのは、
姿勢変換を行う前のY軸に関して
回転できる点です。

1. [IN] int : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンに、
  回転を加えます。

2. [IN] float : deg
  deg 度だけ、回転を加えます。
ver5.0.0.1
E3DRotateQLocalZ 算術 クォータニオンをローカルなZ軸に関して回転します。

現在の姿勢に対して更に回転します。

E3DRotateQZと違うのは、
姿勢変換を行う前のZ軸に関して
回転できる点です。


1. [IN] int : qid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  このidで識別されるクォータニオンに、
  回転を加えます。

2. [IN] float : deg
  deg 度だけ、回転を加えます。
ver5.0.0.1
E3DGetBonePos モデル情報 ボーンの位置情報を取得します。

poskind == 0のときはローカル座標(ボーン変形なし)
poskind == 1のときはグローバル座標
poskind == 2のときはローカル座標(ボーン変形あり)
が取得できます。

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


マルチレイヤーモーションを使用する場合は、
この命令は使えません。
E3DGetCurrentBonePosをお使いください。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : boneno
  ボーンを識別するID
  E3DGetBoneNoByNameで取得した
  ボーンの番号を渡してください。
  
3. [IN] int : poskind
  ローカル座標と、グローバル座標の
  どちらを取得するかを指定します。

4. [IN] int : motid
  モーションを識別するID
  E3DAddMotionで取得したmotidを指定してください。

5. [IN] int : frameno
  モーションのフレーム番号を指定してください。
  E3DSetNewPose呼び出し時に現在のフレーム番号が取得できるので
  参考にしてください。


6. [OUT] D3DXVECTOR3* : pos
  ボーンの座標が代入されます。
ver5.0.0.1
E3DCreateLine ライン 線を作成してlineidを取得します。
lineidは線オブジェクトを一意に識別するための番号です。

E3DCreateLine、E3DDestroyLine
E3DSetLineColor、E3DAddPoint2Line
E3DDeletePointOfLine、E3DSetPointPosOfLine
E3DGetPointPosOfLine
E3DGetNextPointOfLine
E3DGetPrevPointOfLine
に渡すlineidは、この関数で取得したlineidを
使用してください。

pointposには、
D3DXVECTOR3 pointpos[ pointnum ];
で確保したデータを渡してください。

pointnumには、点の数を入れてください。
点の数の最大値は65535です。
pointnumが2より小さい場合は、エラーになります。
pointpos[点の番号].xにX座標、
pointpos[点の番号].yにY座標、
pointpos[点の番号].z にZ座標
を入れて、初期化しておいてください。


作成した線は、
E3DRenderで描画できます。
hsidの代わりにlineidを指定してください。
1. [IN] D3DXVECTOR3* : pointpos
  線を構成する点の座標を指定してください。
  メモリの確保の仕方、値のセットの仕方は、
  左の記述をご覧ください。

2. [IN] int : pointnum
  初期化する点の数を指定してください。
  pointposのデータを確保する際に使った点の数を渡してください。

3. [IN] int : maxpointnum
  Lineは、E3DAddPoint2Line命令で、
  点の数を増やすことが可能です。
  最大何個まで、点の数を増やせるかを指定してください。
  (点の数の合計です。)
  
  ビデオメモリは、pointnumではなくて、
  maxpointnumでアロケートされます。

4. [IN] int : linekind
  線の種類を指定します。
  LINELISTの場合は2を、
  LINESTRIPの場合は3を指定してください。
  LINELIST, LISTSTRIPについての説明は、
  線の種類の説明をご覧ください。

5. [OUT] int* : lineid
  作成した線を識別する番号が代入されます。

ver5.0.0.1
E3DDestroyLine ライン E3DCreateLine で作成した線を削除します。
削除したlineidは
以降、どの命令にも使わないでください。
1. [IN] int : lineid
  削除する線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。
ver5.0.0.1
E3DSetLineColor ライン 線の色を設定します。 1. [IN] int : lineid
  線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。

2. [IN] E3DCOLOR4UC : col
  色を指定してください。
ver5.0.0.1
E3DAddPoint2Line ライン 線に点を追加し、追加した点を識別するpidを取得します。

点の数の合計が
E3DCreateLineに渡したmaxpointnum
より大きくなるとエラーになります。

取得したpidをE3DSetPointPosOfLine関数に
渡して
付け足した点の座標をセットしてください。

1. [IN] int : lineid
  線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。

2. [IN] int : prevpid
  線の中のどこに、新しい点を追加するかを指定します。
  prevpidで指定した点の次の点として、
  新しい点を追加します。
  prevpidに-2を指定した場合には線の先頭に、
  prevpidに-1を指定した場合には線の最後に
  新しい点を追加します。

3. [OUT] int* : pidptr
  新しく追加した点を識別する番号が代入されます。
  pidは線ごとに固有な値です。
ver5.0.0.1
E3DDeletePointOfLine ライン 線の中の点を削除します。 1. [IN] int : lineid
  線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。

2. [IN] int : pid
  削除する点を識別する番号を指定してください。
ver5.0.0.1
E3DSetPointPosOfLine ライン 線の中の点の座標をセットします。
1. [IN] int : lineid
  線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。

2. [IN] int : pid
  点を識別する番号を渡します。

3. [IN] D3DXVECTOR3 : pos
  点の座標を渡してください。
ver5.0.0.1
E3DGetPointPosOfLine ライン 線の中の点の座標を取得します。
1. [IN] int : lineid
  線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。

2. [IN] int : pid
  点を識別する番号を渡します。

3. [OUT] D3DXVECTOR3* : posptr
  点の座標が代入されます。
ver5.0.0.1
E3DGetNextPointOfLine ライン previdで指定した点の一つ後の点のIDを取得します。

線は、点を双方向リストで格納しています。


一つ後の点が存在しない場合は
nextid には、負の値が代入されます。
1. [IN] int : lineid
  線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。

2. [IN] int : previd
  点を識別する番号

3. [OUT] int* : nextidptr
  previdの点の一つ後の点のIDが代入されます。

  previd に-1が指定されている場合は、
  nextidには、先頭の点のIDが代入されます
ver5.0.0.1
E3DGetPrevPointOfLine ライン pidで指定した点の一つ前の点のIDを取得します。


線は、点を双方向リストで格納しています。

一つ前の点が存在しない場合は、
previd には、負の値が代入されます。
1. [IN] int : lineid
  線を識別する番号を渡します。
  E3DCreateLineで取得した番号を使ってください。

2. [IN] int : pid
  点を識別するID

3. [OUT] int* : previdptr
  pidの点の一つ後の点のIDが代入されます。
ver5.0.0.1
E3DWriteDisplay2BMP 出力 バックバッファの内容をBMPファイルに保存します。

filenameには拡張子を除いた名前を
指定してください。


E3DInitのmultisamplenumに0以外を指定した場合は、この命令は使えません。
(エラーになります。)
1. [IN] char* : filename
  出力するBMP のパス文字列。
  拡張子を除いたパスを指定してください。
  この関数で自動的に”.bmp”が付加されます。

  既に同じファイル名が存在している場合は
  そのファイルは上書きされるので注意してください。

2. [IN] int : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

ver5.0.0.1
E3DCreateAVIFile 出力 AVIファイルを初期化してaviidを取得します。

aviidはAVIファイルを識別するための番号です。

この命令で作成したAVIファイルに対して
E3DWriteData2AVIFile命令で
バックバッファの内容を書き込み、
E3DCompleteAVIFile命令で
終了処理をします。

E3DWriteData2AVIFile命令、
E3DCompleteAVIFile命令には、
E3DCreateAVIFile命令で取得したaviidを
渡してください。


E3DInitのmultisamplenumに0以外を指定した場合は、この命令は使えません。
(エラーになります。)

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

2. [IN] char* : filename
  出力するBMP のパス文字列。

  拡張子を除いたパスを指定してください。
  この関数で自動的に”.avi”が付加されます。

  既に同じファイル名が存在している場合は、
  そのファイルは上書きされるので注意してください。

3. [IN] int : datatype
  作成するデータの種類を指定します。
  現バージョンでは映像のみしか扱わないため、
  常に1を指定してください。

4. [IN] int : compkind
  圧縮の種類を指定します。
  0を指定した場合は
    圧縮なし、
  1を指定した場合は
    cinepak Codec by Radiusによる圧縮、
  2を指定した場合には
    Microsoft Video 1による圧縮
  をします。

5. [IN] int : framerate
  AVIファイルのフレームレートを指定してください。
  通常は、スクリプトプログラムのFPSを指定します。
  60FPSで表示している場合は、60と指定します。


6. [IN] int : frameleng
  AVIファイルのフレーム数の合計数。
  frameleng回だけ、E3DWriteData2AVIFileで
  データをファイルに書き込むことが出来ます。

7. [OUT] int* : aviidptr
  作成したAVIファイルを識別するための番号が代入されます。

ver5.0.0.1
E3DWriteData2AVIFile 出力 バックバッファの内容をAVIファイルに書き込みます。

E3DCreateAVIFileで指定したframeleng回だけ
この命令を呼ぶことが出来ます。

frameleng回を超えた呼び出しは、
エラーとなり無視されます。
1. [IN] int : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] int : aviid
  AVIファイルを識別するための番号を指定してください。
  E3DCreateAVIFileで取得した番号を使用してください。

3. [IN] int : datatype
  作成するデータの種類を指定します。
  現バージョンでは映像のみしか扱わないため、
  常に1を指定してください。


ver5.0.0.1
E3DCompleteAVIFile 出力 AVIファイルの終了処理をします。

必要な回数E3DWriteData2AVIFile命令を
呼び出した後に、この命令を呼び出してください。
1. [IN] int : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] int : aviid
  AVIファイルを識別するための番号を指定してください。
  E3DCreateAVIFileで取得した番号を使用してください。

3. [IN] int : datatype
  作成するデータの種類を指定します。
  現バージョンでは映像のみしか扱わないため、
  常に1を指定してください。

ver5.0.0.1
E3DCameraLookAt カメラ カメラを向きたい方向に徐々に向けます。

vecには注視点ではなくて、
向きたい向きのベクトルを指定してください。

例えば、注視点tを向きたい場合は、
E3DGetCameraPosでカメラの位置を求め、
引き算するだけでOKです。
vec = t - campos
のようにして計算し指定してください。


upflagはE3DLookAtQでの用法と同じです。
upflag == 0 のときは、
上向き方向が常にY軸上方を向くように
制御されます。

upflag == 1 のときは、
上向き方向が常にY軸下方を向くように
制御されます。

upflag == 2 のときは、
上向き方向が連続した向きをとるように
制御されます。
その結果、宙返りが可能となります。

upflag == 3 のときは、
上向き方向を特に制御しません。
上向き方向は連続した向きをとりますが
その方向は拘束されません。


divnum引数に分割数を指定します。
現在の位置と目標地点との間の間隔を
1 / divnum ずつ内分して近づきます。

また、このページの最初に書いてある、
カメラの使い方の所も、お読みください。
1. [IN] D3DXVECTOR3 : vec
  向きたいベクトルを指定してください。
  ベクトルの計算方法は前記をご覧ください。

2. [IN] int : upflag
  上向き制御方法のモードを指定してください。
  詳しくは前記をご覧ください。

3. [IN] int : divnum
  分割数を指定してください。
ver5.0.0.1
E3DCameraOnNaviLine カメラ カメラをナビラインに沿って動かします。

mode引数に0を指定すると
カメラの位置だけを制御します。

mode引数に1を指定すると
位置に加え向きも制御します。

ループ移動や反対方向への移動も
サポートしています。


ナビラインの作成には
GViewer.exeを使うと便利です。
(おちゃっこLABでダウンロード可能です。)

ナビラインは地面の高さに作成することが
普通なのでナビラインからカメラまでの
オフセット値を指定できるようにしました。

例えば、地面から1000だけ上方を
カメラを動かしたいときは、
地面の高さにナビラインを作成し
この関数のオフセット引数に
offsetx = 0 : offsety = 1000 : offsetz = 0
の値を指定すればOKです。

また、このページの最初に書いてある、
カメラの使い方の所も、お読みください。
1. [IN] int : nlid
  ナビラインを識別するID

2. [IN] int : mode
  位置だけを制御する場合は0を、
  位置と向きを制御する場合は1を指定してください。

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

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

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


5. [IN] D3DXVECTOR3 : offset
  ナビラインからカメラ位置までのオフセット値を指定します。

6. [IN] float : posstep
  カメラを一度にどれくらいの距離を移動させるかを指定します。
  ただし、ナビポイント付近では
  posstepより小さな距離しか移動させないことがあります。

7. [IN] int : dirdivnum
  向きたい向きまで徐々にカメラを向けるための
  引数です。
  目標までの角度を1/dirdivnumずつ内分して、
  徐々に向きを制御します。

8. [IN] int : upflag
  E3DCameraLookAt関数のupflag引数と同じ意味です。
  詳しくは、E3DCameraLookAtの説明部分を
  お読みください。


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

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

  targetpointidに
  存在しないナビポイントのIDを入れた場合は、
  (例えば-1など)
  自動的に目指すべきナビポイントを決定します。
  
ver5.0.0.1
E3DCameraDirUp カメラ カメラの現在向いている方向を、徐々に上の方向に向けます。

現バージョンでは
宙返りはサポートしていません。


また、このページの最初に書いてある
カメラの使い方の所もお読みください。
1. [IN] float : deg
  角度。

2. [IN] int : divnum
  deg度の角度を1/divnumずつ内分して
  カメラを上方向に向けます。
ver5.0.0.1
E3DCameraDirDown カメラ カメラの現在向いている方向を、徐々に下の方向に向けます。

現バージョンでは
宙返りはサポートしていません。



また、このページの最初に書いてある
カメラの使い方の所もお読みください。
1. [IN] float : deg
  角度。

2. [IN] int : divnum
  deg度の角度を1/divnumずつ内分して
  カメラを下方向に向けます。
ver5.0.0.1
E3DCameraDirRight カメラ カメラの現在向いている方向を、徐々に右の方向に向けます。


また、このページの最初に書いてある
カメラの使い方の所もお読みください。
1. [IN] float : deg
  角度。

2. [IN] int : divnum
  deg度の角度を1/divnumずつ内分して
  カメラを、右方向に向けます。
ver5.0.0.1
E3DCameraDirLeft カメラ カメラの現在向いている方向を、徐々に左の方向に向けます。


また、このページの最初に書いてある
カメラの使い方の所もお読みください。
1. [IN] float : deg
  角度。

2. [IN] int : divnum
  deg度の角度を1/divnumずつ内分して
  カメラを左方向に向けます。
ver5.0.0.1
E3DCreateFont テキスト フォントを作成し、フォントを識別するIDを取得します。
1. [IN] int : height
  フォントの文字セルまたは文字の高さを論理単位で指定します。
  文字の高さとは、
  文字セルの高さから内部レディング(アクセント記号などのためのスペース)の
  高さを引いたものです。
  要求されたサイズを超えない最大のフォントを探して処理されます。

2. [IN] int : width
  フォントの平均文字幅を論理単位で指定します。
  0 を指定すると、条件に最も近い値が選択されます。
  条件に最も近い値は、利用可能な各フォントの現在のデバイスでの
  縦横比とデジタル化された縦横比の差の絶対値を比較することにより
  決定されます。

3. [IN] int : weight
  フォントの太さを表す 0 から 1000 までの範囲内の値を指定します。
  たとえば、400 を指定すると標準の太さになり、
  700 を指定すると太字になります。
  0 を指定すると、既定の太さが選択されます。

4. [IN] int : bItalic
  斜体にするかどうかを指定します。
  1 を指定すると、斜体になります。

5. [IN] int : bUnderline
  下線を付けるかどうかを指定します。
  1 を指定すると、下線付きになります。

6. [IN] int : bStrikeout
  取り消し線を付けるかどうかを指定します。
  1 を指定すると、取り消し線が付きます。

7. [IN] char* : fontname
  フォントの名前が入った 文字列を指定します。
  文字列の長さは、 31 文字以下にしなければなりません。

8. [OUT] int* : fontidptr
  作成したフォントを識別するための
  番号が代入されます。
ver5.0.0.1
E3DDrawTextByFontID テキスト E3DCreateFontで作成したフォントにより、指定した位置、色で、テキストを表示します。

\nで改行できます。
1. [IN] int : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] int : fontid
  E3DCreateFontで作成した、フォントの番号を指定します。

3. [IN] POINT : pos
  テキストをする位置を指定します。

4. [IN] char* : textstr
  表示したい文字列を指定します。

5. [IN] E3DCOLOR4UC : col
  文字の透明度と色を指定します。

6. [IN] int : bmode
  ブレンドモードを指定。
  ブレンドモードの数値は
  E3DSetBlendingModeのblendmode引数の説明をお読みください。
  この引数は省略可能。
ver5.0.0.1
ver5.5.0.5で拡張
E3DDrawTextByFontIDWithCnt テキスト カウンター制御で一定間隔で徐々に文字列を表示します。

eachcnt引数に一文字当たりの待機期間を
指定します。
この値とcurcntに指定したカウンターの値を
比較して文字を表示します。

curcntには、通常、この命令を呼び出すたびに
1ずつ増えるカウンターの値を指定します。


例えば、eachcntに10を指定した場合には
一文字当たり10カウントだけ待機するので、
1文字目はcurcntが10になるまで表示されません。
2文字目はcurcntが20になるまで表示されません。

と、このように、curcntの値が増えるに従って
徐々に表示文字長が増えていきます。


現バージョンでは半角カタカナには、
対応していません。

\nで改行できます。
1. [IN] int : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] int : fontid
  E3DCreateFontで作成したフォントの番号を指定します。

3. [IN] POINT : pos
  テキストをする位置を指定します。

4. [IN] char* : textstr
  表示したい文字列を指定します。

5. [IN] E3DCOLOR4UC : col
  文字の透明度と色を指定します。

6. [IN] int : eachcnt
  一文字当たりどれくらい待ってから表示するかを指定します。

7. [IN] int : curcnt
  現在のカウンターを指定します。

ver5.0.0.1
E3DDrawTextByFontIDWithCntEach テキスト カウンター制御で文字ごとに表示タイミングを指定して文字列を表示します。


cntarray引数に
文字ごとの表示タイミングを指定した配列を
指定してください。

cntarrayの長さは
E3DGetCharacterNum関数で
textstrの文字数を取得して決定してください。

cntarray中の表示タイミングと
curcntに指定したカウンターの値を比べて、
文字を表示するかどうかを決定します。


cntarray[0]に10を、
cntarray[1]に20を指定した場合には、
curcntが10になったときに1文字目が表示され、
curcntが20になったときに2文字目が表示されます。

cntarray[1]にcntarray[0]より小さな値を入れることも可能です。
その場合は、2文字目は1文字目よりも後で
表示されることになります。


現バージョンでは半角カタカナには
対応していません。

\nで改行できます。
1. [IN] int : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] int : fontid
  E3DCreateFontで作成した、フォントの番号を指定します。

3. [IN] POINT : pos
  テキストをする位置を指定します。

4. [IN] char* : textstr
  表示したい文字列を指定します。

5. [IN] E3DCOLOR4UC : col
  文字の透明度と色を指定します。

6. [IN] int* : cntarray
  文字数分の要素数を持つ配列変数を指定します。
  それぞれの要素には、文字の表示タイミングを指定します。

7. [IN] int : arrayleng
  cntarray中の要素数を指定します。

8. [IN] int : curcnt
  現在のカウンターを指定します。

ver5.0.0.1
E3DGetCharacterNum テキスト 1バイト文字、2バイト文字を判別してtextstr中の文字数を取得します。

現バージョンでは半角カタカナには
対応していません。
1. [IN] char* : textstr
  調べたい文字列を指定します。

2. [OUT] int* : charanumptr
  文字の数が代入されます。
ver5.0.0.1
E3DDestroyFont テキスト E3DCreateFontで作成したフォントを
削除します。
1. [IN] int : fontid
  E3DCreateFontで作成したフォントの番号を指定します。
ver5.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と同じ姿勢がセットされます。
1. [IN] int : startqid
2. [IN] int : endqid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  startqidとendqidのクォータニオンの間の姿勢を
  補間計算してresqidのクォータニオンにセットします。


3. [IN] float : t
  補間計算するクォータニオンのstartqidからの比率を指定してください。
  t の値は0.0から1.0の間の値を指定してください。

4. [IN] int : resqid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  計算結果がresqidのクォータニオンに代入されます。
ver5.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と同じ姿勢がセットされます。
1. [IN] int : befqid
2. [IN] int : startqid
3. [IN] int : endqid
4. [IN] int : aftqid

  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  startqidとendqidのクォータニオンの間の姿勢を
  補間計算してresqidのクォータニオンにセットします。

  befqidにはstartqidの一つ前の姿勢を、
  aftqidにはendqidの一つ後の姿勢を
  セットしておいてください。

5. [IN] float : t
  補間計算するクォータニオンのstartqidからの比率を指定してください。
  t の値は0.0から1.0の間の値を指定してください。


6. [IN] int : resqid
  クォータニオンを識別するID
  E3DCreateQで取得したidを渡してください。
  計算結果がresqidのクォータニオンに代入されます。


ver5.0.0.1
E3DSplineVec 算術 位置座標を、スプライン補間計算します。


startposとendposの間の座標を
tvの比率に基づいて
スプライン補間計算して
resposに代入します。

befposにはstartposの一つ前の座標を、
aftposにはendposの一つ後の座標を
セットしておいてください。


t の値が0.0 から1.0の間になるように指定してください。

t が0.0のときは、
startposと同じ位置がセットされます。

t が1.0のときは、
endposと同じ位置がセットされます。

1. [IN] D3DXVECTOR3 : befpos
2. [IN] D3DXVECTOR3 : startpos
3. [IN] D3DXVECTOR3 : endpos
4. [IN] D3DXVECTOR3 : aftpos
  計算の元となる位置座標の配列を指定してください。
  詳しくは、前記をご覧ください。

5. [IN] float : t
  補間計算する位置座標のstartposからの比率を指定してください。
  t の値は0.0から1.0の間の値を指定してください。

6. [OUT] D3DXVECTOR3* : resposptr
  計算結果が代入される配列を指定してください。
ver5.0.0.1
E3DDbgOut デバッグ dbg.txtに、指定した文字列を出力します。

この命令を呼ぶ前に、
一回だけE3DEnableDbgFileを
呼ぶ必要があります。
1. [IN] char* : dbgstr
  出力文字列を指定してください。

2. [IN] ...
  printf形式と同様に指定してください。
ver5.0.0.1
E3DGetBillboardDiffuse モデル情報 任意のビルボードの任意の頂点のdiffuse色を取得します。


1. [IN] int : bbid
  ビルボードを識別するID

2. [IN] int : vertno
  色を取得したい頂点の番号を指定します。

3. [OUT] E3DCOLOR4UC* : colptr
   指定した頂点のdiffuse色が代入されます。
   colptr->aは無視されます。
ver5.0.0.1
E3DGetBillboardAmbient モデル情報 任意のビルボードの任意の頂点の、ambient色を取得します。
1. [IN] int : bbid
  ビルボードを識別するID

2. [IN] int : vertno
  色を取得したい頂点の番号を指定します。

3. [OUT] E3DCOLOR4UC* : colptr
   指定した頂点のambient色が代入されます。
   colptr->aは無視されます。
ver5.0.0.1
E3DGetBillboardSpecular モデル情報 任意のビルボードの任意の頂点の、specular色を取得します。
1. [IN] int : bbid
  ビルボードを識別するID

2. [IN] int : vertno
  色を取得したい頂点の番号を指定します。

3. [OUT] E3DCOLOR4UC* : colptr
   指定した頂点のspecular色が代入されます。
   colptr->aは無視されます。
ver5.0.0.1
E3DGetBillboardAlpha モデル情報 任意のビルボードの透明度を取得します。 1. [IN] int : bbid
  ビルボードを識別するID
  -1を指定すると、ビルボードの色を取得できます。

2. [IN] int : vertno
  この引数は、現在使用されていません。
  適当な数字を入れてください。

3. [OUT] float* : alphaptr
  指定したパーツの透明度が代入されます。
ver5.0.0.1
E3DSaveQuaFile 出力 読み込み済みのモーションをファイルに保存します。

quatype引数でファイルのタイプを指定します。
usercoef.hで定義されているQUATYPE_ で始まる定数を使います。
QUATYPE_NUMはボーンの階層構造から計算した番号を基準にファイルを作ります。
QUATYPE_NAMEはボーンの名前を基準にファイルを作ります。

ver5.0.1.0より前のバージョンのquaファイルはQUATYPE_NUMです。
1. [IN] 数値または、変数 : quatype
  QUATYPE_ で始まる定数を指定。

2. [IN] int : hsid
  モデルを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] char* : filename
  保存ファイル名(パス)を指定してください。
ver5.0.0.1
ver5.0.1.0で引数追加。
E3DSaveSigFile 出力 形状データをsigファイルに保存します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] char* : filename
  保存ファイル名(パス)を指定してください。

ver5.0.0.1
E3DPickVert モデル情報 画面上の2D座標を指定して、その座標に一番近い頂点を検出する関数です。

全く同じ座標の頂点が見つかった場合には、
複数のパーツ、複数の頂点の番号を
取得するするようになっています。
同じ座標でもUVだけが違う頂点などが
存在するので複数取得できるようになっています。

取得した情報の数がgetnumに代入されます。
該当するデータが無い場合はgetnumに0が
代入されます。

getnumが0出ない場合には、
maxindex = getnum - 1とすると
pickpartarray[0] から、pickpartarray[maxindex]
までに、パーツの番号が代入されます。
pickvertarray[0]から、pickvertarray[maxindex]
までに、頂点の番号が代入されます。


pickarrayleng変数に、
一度に取得できる情報の数をセットした後、
pickpartarray
pickvertarray
のメモリを確保してください。

rangex, rangey引数を調整することで、
検出の感度を調整できます。
1. [IN] int : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] int : hsid
  形状データを識別するID

3. [IN] POINT : pos
  画面上の2D座標を指定します。

4. [IN] POINT : range
  検出距離を指定します。
  range.xには、X座標がどれだけ離れた点まで検索するかを指定します。
  range.yには、Y座標がどれだけ離れた点まで検索するかを指定します。
  大きい値を指定すると
  指定した座標より遠い頂点まで検索します。

  感度の調整に使用してください。

5. [OUT] int* : pickpartarray
6. [OUT] int* : pickvertarray
  指定した座標に一番近いパーツ番号、
  頂点の番号がgetnum個だけ代入されます。

7. [IN] int : pickarrayleng
  pickpartarray, pickvertarrayの配列の大きさを指定してください。

8. [OUT] int* : getnumptr
  pickpartarray, pickvertarrayに、何個の値を代入したかを
  取得できます。

  例えば、*getnumptr が3だった場合には、
  pickpartarray[0], pickpartarray[1], pickpartarray[2]に値が代入されています。
  
ver5.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ファイルを新しい形式にコンバートする必要があります。

orgarraylengに取得できる情報の数をセットして、
orgnoarray = (int*)malloc( sizeof( int ) * orgarrayleng );
で、メモリを確保してください。

1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : partno
  取得したいパーツの番号を指定します。

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


3. [IN] int : vertno
  調べたい頂点の番号を指定してください。


4. [OUT] int* : orgnoarray
  この配列に元データの頂点の番号が代入されます。
  maxindex = getnum - 1とすると
  *orgnoarray から、*(orgnoarray + maxindex)までに
  頂点の番号が代入されます。

5. [IN] int : arrayleng
  orgnoarrayをmallocしたときの、配列の要素数を指定してください。


6. [OUT] int* : getnumptr
  orgnoarrayに代入した情報の数を取得できます。
ver5.0.0.1
E3DChkIM2Status ボーン影響 影響マップ情報(im2)が、利用可能かどうかを調べます。

status引数に1が返された場合は
利用可能。
0が返された場合は
利用不可能です。

0が返された場合はsigファイルを新しい形式にコンバートする必要があります。


E3DGetOrgVertNo, E3DLoadIM2File,
E3DSaveIM2File関数などを使用する前に、
このE3DChkIM2Status関数で、
影響マップファイルの機能が使えるかどうかを
調べてください。
1. [IN] int : hsid
  形状データを識別するID


2. [OUT] int* : statusptr
  影響マップ情報が利用可能かどうかが代入されます。
ver5.0.0.1
E3DLoadIM2File ボーン影響 hsidで識別されるモデルデータにim2ファイルのボーン影響情報をセットします。

この関数を使う前に、
E3DChkIM2Status関数で引数に
1が返されることを確認してください。

0が返された場合はsigファイルを新しい形式にコンバートする必要があります。

1. [IN] int : hsid
  hsidで識別されるモデルデータに、
  im2ファイルのボーン影響情報をセットします。

2. [IN] char* : fname
  *.im2 のパス文字列。
ver5.0.0.1
E3DSaveIM2File ボーン影響出力 hsidで識別されるモデルデータの影響マップ情報をim2ファイルに書き出します。


この関数を使う前に
E3DChkIM2Status関数で引数に
1が返されることを確認してください。

0が返された場合はsigファイルを新しい形式にコンバートする必要があります。

1. [IN] int : hsid
  hsidで識別されるモデルデータの影響マップ情報を、
  im2ファイルに書き出します。

2. [IN] char* : fname
  *.im2 のパス文字列。
ver5.0.0.1
E3DGetJointNum モデル情報 ジョイントの総数を取得します。

E3DGetJointInfoで詳細情報を取得する際の
配列データの大きさの決定などに
使用してください。
1. [IN] int : hsid
  形状データを識別するID

2. [OUT] int* : jointnumptr
  ジョイントの総数が、代入されます。
ver5.0.0.1
E3DGetJointInfo モデル情報 ジョイントの詳細情報を一括取得します。

jointinfo引数は、
jointinfo = (JOINTINFO*)malloc( sizeof( JOINTINFO * jointmaxnum );
で作成してください。

JOINTINFO構造体はusercoef.hで定義されています。

serialnoは、
ジョイントのシリアル番号にアクセスするときに、
使用します。
ジョイントのシリアル番号とは、
E3DGetPartNoByName あるいは、
E3DGetBoneNoByName 
で取得できる番号と同じものです。

notuseは、
ジョイントが無効になっているかどうかの
フラグにアクセスするときに使用します。
無効なときに1が有効なときに0が代入されています。

parent, child, brother, sisterは、
ジョイントの階層構造にアクセスするときに
使用します。
詳しくは、
ジョイントの階層構造のページ
をご覧ください。

1. [IN] int : hsid
  形状データを識別するID

2. [OUT] JOINTINFO* : jointinfo
  シリアル番号や、階層構造などを取得するための構造体へのポインタを渡してください。

3. [IN] int : jointmaxnum
  jointinfo構造体の要素数を渡してください。

4. [OUT] int* : jointgetnum
  何個のジョイントの情報を出力したかが代入されます。

ver5.0.0.1
E3DGetFirstJointNo モデル情報 相対値0のジョイントの、シリアル番号を取得します。

ジョイント番号の相対値とは
ボーンファイルやim2ファイルなどで
使用します。
各ファイルの説明をご覧ください。
ボーンファイルのページ
im2ファイルのページ

1. [IN] int : hsid
  形状データを識別するID

2. [OUT] int* : firstnoptr
  相対値0のシリアル番号が代入されます。
  
ver5.0.0.1
E3DGetDispObjNum モデル情報 表示用オブジェクトの総数を取得します。
E3DGetDispObjInfoで詳細情報を取得する際の
配列データの大きさの決定などに
使用してください。
1. [IN] int : hsid
  形状データを識別するID

2. [OUT] int* : dispobjnumptr
  表示オブジェクトの総数が代入されます。
ver5.0.0.1
E3DGetDispObjInfo モデル情報 表示オブジェクトの詳細情報を一括取得します。

まず、dispobjmaxnum変数に、
E3DGetDispObjInfo関数で、
表示オブジェクトの総数を取得してください。

dispobjinfo引数は、
dispobjinfo = (DISPOBJINFO*)malloc( sizeof( DISPOBJINFO ) * dispobjmaxnum );
で作成してください。

DISPOBJINFO構造体はusercoef.hで定義されています。

serialnoは、
表示オブジェクトのシリアル番号にアクセスするときに使用します。
表示オブジェクトのシリアル番号とは、
E3DGetPartNoByName 
で取得できる番号と同じものです。

notuseは、
表示オブジェクトが無効になっているかどうかの
フラグにアクセスするときに使用します。
無効なときに1が有効なときに0が代入されています。

dispswitchは、
表示オブジェクトのディスプレイスイッチの番号
にアクセスするときに使用します。
ディスプレイスイッチは、
RokDeBone2で、パーツごとに設定可能です。
ディスプレイスイッチのページ


invisibleは、
表示オブジェクトが表示されているかどうかのフラグにアクセスするときに使用します。
詳しくは、
E3DSetInvisibleFlag
の説明をお読みください。


1. [IN] int : hsid
  形状データを識別するID

2. [OUT] DISPOBJINFO* : dispobjinfo
  シリアル番号などを取得するための配列変数を渡してください。


3. [IN] int : dispobjmaxnum
  データ取得用配列の大きさ(表示オブジェクトの数)を指定します。

4. [OUT] int* : dispobjgetnumptr
  何個の表示オブジェクトの情報を出力したかが代入されます。

ver5.0.0.1
E3DEnableTexture 描画パラメータ 一時的にテクスチャー表示をオンオフする関数です。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別する番号(シリアル番号)

3. [IN] int : enableflag
  テクスチャーをオフにするときには0を、
  オンにするときには1を指定してください。
ver5.0.0.1
E3DJointAddToTree モデル情報 パーツに親子関係を設定します。
childjointをparentjointの子供として、
設定します。

lastflagが0のときは長男として追加され、
1のときは末っ子として追加されます。

ジョイント以外に親子関係を設定しても
現バージョンでは意味がありません。

childjoint, parentjointは、
E3DGetPratNoByNameまたは
E3DGetJointInfoで取得した番号を
使用してください。

E3DJointRemake命令もお読みください。
1. [IN] int : hsid
  形状データを識別する番号

2. [IN] int : parentjoint
3. [IN] int : childjoint
  parentjointの子供としてchildjointを設定します。

4. [IN] int : lastflag
  0を指定するとparentjointの長男として、
  1を指定するとparentjointの末っ子として設定されます。
ver5.0.0.1
E3DJointRemoveFromParent モデル情報 パーツの親子関係を取り除きます。

rmjointで指定したパーツと
その親のパーツとの関係を切り離します。

rmjointの子供の情報はそのまま残ります。

ジョイント以外に親子関係を設定しても
現バージョンでは意味がありません。


この命令で親が存在しないまま
E3DSaveSigFileでファイルに保存すると、
そのファイルは読み込みできなくなります。

最終的にはE3DJointAddToTreeで、
必ず親を設定するようにしてください。

一番親のジョイントにしたい場合には、
ジョイントではないフォルダ的な役割をしているパーツの番号を取得して
それを親に設定してください。


rmjointは、
E3DGetPratNoByNameまたは、
E3DGetJointInfoで取得した番号を
使用してください。

E3DJointRemake命令もお読みください。

1. [IN] int : hsid
  形状データを識別する番号

2. [IN] int : rmjoint
  rmjointとその親の関係を切り離します。
ver5.0.0.1
E3DJointRemake モデル情報 親子関係や有効無効の変更をEasy3D内部の関連データに反映させます。

一連のE3DJointAddToTreeや
E3DJointRemoveFromParent命令や
E3DSetValidFlagを
呼び出した後に一回呼び出してください。


1. [IN] int : hsid
  形状データを識別する番号
ver5.0.0.1
E3DSigImport 形状データ hsidに読み込み済の形状データに
filenameで指定した形状データを
インポートします。

この命令を呼ぶと
読み込み済のモーションデータが破棄されます。

1. [IN] int : hsid
  形状データを識別する番号

2. [IN] char* : filename
  インポートする*.sig のパス文字列。

3. [IN] int : adjustuvflag
  UV値を正規化するかどうかのフラグ。
  正規化する場合は1を指定。
  しない場合は0を指定。
  2を指定すると0.0から1.0の間にクランプします。


4. [IN] float : mult
  倍率の値を指定してください。
  等倍は、1.0。

5. [IN] D3DXVECTOR3 : offset
  読み込み位置のオフセット座標を指定します。
  ローカル座標で指定します。

6. [IN] D3DXVECTOR3 : rot
  追加形状を、X,Y,Zそれぞれの軸に対して、
  rot.x, rot.y, rot.z度だけ、回転してから
  インポートを行います。
  回転順序はZ,Y,Xの順番です。

パラメータの適用順序は、
まず倍率を掛けて
次に回転をして
最後に移動します。

ver5.0.0.1
ver5.0.2.6で拡張
E3DSigLoadFromBuf 形状データ メモリから形状データのロードを行います。
メモリ内にはsigファイルと同じフォーマットが
入っているとみなして処理します。

テクスチャファイルは通常読込と同様に
ファイルから行います。

resdirにはテクスチャの存在するフォルダのパスを指定してください。
最後に"\\"を付けるのを忘れないでください。

例えば、
"C:\\hsp\\Meida\\"

などのように指定してください。
1. [IN] char* : resdir
  テクスチャーのあるフォルダ のパス文字列。
  最後に、"\\"が必要。

2. [IN] char* : buf
  バッファのポインタ。

3. [IN] int : bufleng
  バッファの中のデータの長さ

4. [IN] int : adjustuvflag
  UV値を正規化するかどうかのフラグ。
  正規化する場合は1を指定。
  しない場合は0を指定。
  2を指定すると0.0から1.0の間にクランプします。

5. [IN] float : mult
  倍率の値を指定してください。
  等倍は1.0。

6. [OUT] int : hsidptr
  読み込んだ形状データを識別するhsidが代入されます。


ver5.0.0.1
ver5.0.2.6で拡張
E3DSigImportFromBuf 形状データ メモリから形状データのインポートを行います。
メモリ内にはsigファイルと同じフォーマットが
入っているとみなして処理します。

テクスチャファイルは通常読込と同様に
ファイルから行います。

resdirにはテクスチャの存在するフォルダのパスを指定してください。
最後に"\\"を付けるのを忘れないでください。

1. [IN] int : hsid
  形状データを識別するhsid

2. [IN] char* : resdir
  テクスチャーのあるフォルダ のパス文字列。
  最後に"\\"が必要。

3. [IN] char* : buf
  バッファのポインタ

4. [IN] int : bufleng
  バッファの中のデータの長さ


5. [IN] int : adjustuvflag
  UV値を正規化するかどうかのフラグ。
  正規化する場合は1を指定。
  しない場合は0を指定。
  2を指定すると0.0から1.0の間にクランプします。



6. [IN] float : mult
  倍率の値を指定してください。
  等倍は1.0。

7. [IN] D3DXVECTOR3 : offset
  読み込み位置のオフセット座標を指定します。
  ローカル座標で指定します。

8. [IN] 変数または、数値 : rot
  追加形状を、X,Y,Zそれぞれの軸に対して、
  rotx, roty, rotz度だけ回転してから、
  インポートを行います。
  回転順序は、Z,Y,Xの順番です。
 
パラメータの適用順序は、
まず倍率を掛けて、
次に回転をして、
最後に移動します。

ver5.0.0.1
ver5.0.2.6で拡張
E3DAddMotionFromBuf モーション メモリからモーションデータのロードを行います。
メモリ内にはquaファイルと
同じフォーマットが入っているとみなして
処理します。

1. [IN] int : hsid
  形状データを識別するhsid

2. [IN] char* : buf
  バッファのポインタ

3. [IN] int : bufleng
  バッファの中のデータの長さ

4. [IN] float : mvmult
  モーションの移動成分に掛ける倍率

5. [OUT] int* : motidptr
  読み込んだモーションを識別する番号

6. [OUT] int* : maxframeptr
  読み込んだモーションの最大フレーム番号
  (総フレーム数 - 1 と同じ)


ver5.0.0.1
E3DCheckFullScreenParams 描画パラメータ フルスクリーンのパラメータをチェックし、与えた条件に近いパラメータを取得します。

validflagに1が返された場合のみ、
bits, scsizeの値は有効です。

validflagに0が返された場合には、
ウインドウの大きさなどの条件を変えて、
有効なパラメータが取得できるまで
繰り返しこの命令を呼び出してください。

この命令はE3DInitよりも前に呼ぶことを前提にしています。

この命令で取得したscsize.cxとscsize.cyでウインドウを作成した後、
E3DInitのbits引数にvalidbitsを指定してフルスクリーン初期化してください。

FULLSCPARAMS構造体はusercoef.hで定義されています。

ver5.3.1.3でflag引数を追加。
1. [IN] FULLSCPARAMS : srcparams
  使用したいフルスクリーンのパラメータを指定します。
  screenwにスクリーンの幅
  screenhにスクリーンの高さ
  bitsに色数を示すビット数を指定します。

2. [OUT] FULLSCPARAMS* : validparamsptr
  scparamsで指定したパラメータに近い
  フルスクリーンが作れることが分かった場合にvalidparamsptr->validflagに
  1がセットされます。

  与えられたパラメータではフルスクリーンが作れないことが分かった場合にはvalidparamsptr->validflagに0がセットされます。

validparamsのbits, scsize.cx, scsize.cyにはフルスクリーンの作成に有効なパラメータが返されます。
  srcparamsで指定したものとは
  多少異なる場合があります。

  これらの値は、validparamsptr->validflagに1が代入されているときのみ有効です。

3. [IN] int : flag
  横:縦が4:3のウインドウサイズに自動的に調整したい場合は1を指定します。
  調整機能をオフにしてscreenw, screenh引数そのままの値で判定するには2を指定します。
  デフォルト値は1です。
  flagに2を指定した場合はE3DInitのfullscreenflagにも2を指定してください。


ver5.0.0.1
ver5.3.1.3で拡張
E3DGetMaxMultiSampleNum 描画パラメータ アンチエイリアスに必要なマルチサンプルの数の最大値を取得します。

この関数はE3DInitよりも前に呼び出すことを
想定しています。

E3DInitに渡すmultisamplenumの値の決定に
使用してください。
1. [IN] int : bits
  色数を決めるビット数を指定してください。

2. [IN] int : iswindowmode
  ウインドウモードの時は1を
  フルスクリーンの時は0を指定してください。

3. [OUT] int* : maxmultisamplenumptr
  マルチサンプルの数の指定に有効な最大の値を代入します。
  0または、2から16の値が代入されます。
  ハードウェアによって異なる値が代入されます。
ver5.0.0.1
E3DChkConfLineAndFace 当たり判定 任意の線分とsigの面との当たり判定をします。

この当たり判定は
hsidで指定したデータのボーン変形が
必要になります。

ですが、同じポーズで何回も当たり判定を行う場合などには、いちいちボーン変形を計算し直さない方が高速です。
needtransに0を指定すると
ボーン変形計算を省略することが出来ます。
(ポーズが変わった場合や
カメラ位置を変えた場合には
needtransを1にしてください。)


線分と面との当たりE3DChkConfLineAndFaceは、結構重い処理です。
ですので、出来るだけ呼び出し回数を
少なくするように心がけてください。
呼び出し回数を少なくするための工夫として、
まず、E3DChkConflictで
おおざっぱな当たり判定を行い
E3DChkConflictで当たっていると判定されたときのみ
E3DChkConfLineAndFaceを呼び出す
などの方法が有効です。

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

1. [IN] D3DXVECTOR3 : pos1
2. [IN] D3DXVECTOR3 : pos2

線分をpos1とpos2で指定してください。

3. [IN] int : hsid
  モデルデータを識別するID

4. [IN] int : needtrans
  ボーン変形計算をするかどうかのフラグ
  詳しくは、前記をご覧ください。

5. [OUT] int* : partnoptr
6. [OUT] int* : facenoptr
  線分とhsidのモデルが衝突していた場合に、
  衝突したパーツの番号と面の番号が代入されます。
  衝突していなかった場合は-1が代入されます。

7. [OUT] D3DXVECTOR3* : confpos
  衝突していた場合に、衝突した座標が代入されます。

8. [OUT] D3DXVECTOR3* : nptr
  衝突していた場合に、衝突したhsidの面の法線ベクトルが代入されます。

9. [OUT] int* : revfaceflagptr
  衝突していた面が裏面だった場合1が代入されます。
  表面だった場合は0が代入されます。
ver5.0.0.1
E3DPickFace 当たり判定 2Dの画面の座標に対応する3Dモデルの座標を取得できます。

マウスでクリックした場所に
3Dオブジェクトを移動させることなどに使用してください。

E3DPickVertが3Dモデルの頂点を抽出するのに対し、
E3DPickFaceは3Dモデルの面を抽出し
2D座標に対応する面上の3D座標を取得します。

maxdist によってどのくらい遠くまで
検索するかを指定できます。
maxdistの値を小さくするほど
処理は高速になります。



計算には、E3DChkInViewの結果を
使用しています。

!!!注意!!!
projectionのnearからの距離が10万を超えるデータにはこの命令は使えません。

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

2. [IN] int : hsid
  モデルを識別する番号を指定してください。


3. [IN] POINT : scpos
  画面上の2D座標を指定してください。

4. [IN] float : maxdist
  どのくらいの距離まで3Dモデルの検索をするかを指定します。
  この値を小さくするほど処理は高速になります。

5. [OUT] int* : partnoptr
6. [OUT] int* : facenoptr
  2D座標に対応する3D座標が見つかった場合に、
  その3Dモデルのパーツの番号と面の番号が
  代入されます。

  見つからなかった場合は-1が代入されます。

7. [OUT] D3DXVECTOR3* : pos3dptr
  2D座標に対応する3D座標が代入されます。
  partnoに-1以外の値が代入されているときのみこの値は意味を持ちます。

8. [OUT] D3DXVECTOR3* : nptr
  2D座標に対応する3D座標を含む面の法線ベクトルが代入されます。

  ベクトルの大きさは1のものを代入します。

  partnoに-1以外の値が代入されているときのみ、
  この値は意味を持ちます。


9. [OUT] float* : distptr
  視点と*pos3dptrとの距離が代入されます。
  partnoに-1以外の値が代入されているときのみ、
  この値は意味を持ちます。

ver5.0.0.1
E3DGetBBox モデル情報 読み込んだモデルデータのバウンダリーボックスの取得が出来ます。

カメラの設定やプロジェクションの設定をモデルの大きさに応じて変更する場合などに使ってください。

mode引数で
ローカル座標かグローバル座標かを
指定できるようにする予定です。
現在は、グローバル座標しか取得できません。

この命令で使用する情報はE3DChkInViewで更新されます。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。
  ビルボードの情報を得たい場合は-1を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  -1を指定した場合は、モデル全体のバウンダリーボックスを取得します。

  hsidに-1を指定した場合は
  ビルボードのIDを指定してください。


3. [IN] int : mode
  現在はサポートされていません。
  0を指定してください。

4. [OUT] D3DXVECTOR3* : minptr
5. [OUT] D3DXVECTOR3* : maxptr
  各座標の最小値の点を*minptrに
  最大値の点を*maxptrに代入します。
ver5.0.0.1
E3DGetVertNoOfFace モデル情報 facenoで指定した面に含まれる頂点の番号を3つ取得します。(3角形の頂点です)

facenoにはE3DPickFaceなどで取得した
面の番号を指定してください。

E3DGetSamePosVertの説明も
お読みください。

TRIVNO構造体はusercoef.hで定義されています。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [IN] int : faceno
  面を識別する番号を指定してください。

4. [OUT] TRIVNO* : vertnoptr
  3角形の面を構成する3つの頂点の番号が代入されます。
ver5.0.0.1
E3DGetSamePosVert モデル情報 同じ位置の頂点番号を取得する。

モデルデータ中には同じ頂点座標で、
UV座標だけ違う頂点が存在します。

同じ位置の頂点の番号を取得する関数です。
E3DGetVertNoOfFaceと組み合わせて
使うことを想定しています。

samevertno には見つかった頂点数分の
頂点番号が代入されます。

arraylengに5くらいの値を入れて、
int samevertno[ arrayleng ];
で配列を作成してください。


1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [IN] int : vertno
  頂点を識別する番号を指定してください。

4. [OUT] int* : samevertno
  配列を指定してください。
  見つかった頂点の番号が代入されます。

5. [IN] int : arrayleng
  samevertno配列を作成したときの要素数を指定してください。

6. [OUT] int* : samenumptr
  見つかった頂点の数が代入されます。
  つまり、maxindex = samenum - 1とすると
  samevertno[0] から samevertno[maxindex]
  まで見つかった頂点の番号が代入されていることになります。

ver5.0.0.1
E3DRtscStart 同期 時間の計測。

E3DRtscStartとE3DRtscStopはセットで使用します。

E3DRtscStartを呼び出してから
E3DRtscStopを呼び出すまでに
プロセッサのタイムスタンプカウンタが
どれくらい増えたかを取得できます。
なし ver5.0.0.1
E3DRtscStop 同期 時間の計測。

E3DRtscStartとE3DRtscStopはセットで使用します。

E3DRtscStartを呼び出してから
E3DRtscStopを呼び出すまでに
プロセッサのタイムスタンプカウンタが
どれくらい増えたかを取得できます。



1. [OUT] DWORD* : timeptr
  E3DRtscStartを呼んでからの
  タイムスタンプカウンタの増分が代入されます。
ver5.0.0.1
E3DSaveSig2Buf モデル出力 読み込み済の形状データをメモリ上に保存します。

保存するためのバッファは
ユーザーさん側が用意します。

バッファの長さが分からないと
保存操作が行えないため、
バッファ長の取得と実際の保存とで、
合計2回、この関数を呼び出してください。


bufsize引数に0を指定すると、
保存を行わずに
保存に必要なバッファの長さを取得します。

バッファの長さを取得した後に、
その長さをbufsize引数に指定して
実際の保存を行ってください。


実際のコードは、以下のようになります。

E3DSaveSig2Buf( hsid, 0, 0, sigwritesize );

sigbuf = (char*)malloc( sizeof( char ) * sigwritesize );

E3DSaveSig2Buf( hsid2, sigbuf, sigwritesize, &writesize1 );

1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] char* : buf
  バッファのポインタを指定してください。

3. [IN] int : bufsize
  0を指定すると、
  保存に必要なバッファの長さが、writesizeに代入されます。
  0以外を指定すると、
  バッファbufに形状データを保存します。

4. [OUT] int* : writesizeptr
  bufsizeに0が指定されている場合には
  必要なバッファのサイズが代入されます。

  bufsizeに0以外が指定されている場合には、
  実際に保存したデータのバイト数を代入します。
ver5.0.0.1
E3DSaveQua2Buf モーション出力 読み込み済のモーションデータをメモリ上に保存します。

保存するためのバッファは
ユーザーさん側が用意します。

バッファの長さが分からないと
保存操作が行えないため、
バッファ長の取得と実際の保存とで
合計2回、この関数を呼び出してください。


bufsize引数に0を指定すると、
保存を行わずに
保存に必要なバッファの長さを取得します。

バッファの長さを取得した後に
その長さをbufsize引数に指定して
実際の保存を行ってください。


実際のコードは以下のようになります。


E3DSaveQua2Buf( quatype, hsid, mkid, 0, 0, &quawritesize, quatype );

quabuf = (char*)malloc( sizeof( char ) * quawritesize );

E3DSaveQua2Buf( quatype, hsid, mkid, quabuf, quawritesize, &writesize2 );

quatype引数でファイルのタイプを指定します。
usercoef.hで定義されているQUATYPE_ で始まる定数を使います。
QUATYPE_NUMはボーンの階層構造から計算した番号を基準にファイルを作ります。
QUATYPE_NAMEはボーンの名前を基準にファイルを作ります。

ver5.0.1.0より前のバージョンのquaファイルはQUATYPE_NUMです。
1. [IN] 数値または、変数 : quatype
  QUATYPE_ で始まる定数を指定。

2. [IN] int : hsid
  モデルを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] char* : buf
  バッファの変数を指定してください。

5. [IN] int : bufsize
  0を指定すると
  保存に必要なバッファの長さがwritesizeに代入されます。
  0以外を指定すると、
  バッファbufに、モーションデータを保存します。

6. [OUT] int* : writesize
  bufsizeに0が指定されている場合には
  必要なバッファのサイズが代入されます。

  bufsizeに0以外が指定されている場合には、
  実際に保存したデータのバイト数を代入します。
ver5.0.0.1
ver5.0.1.0で引数追加。
E3DCameraShiftLeft カメラ カメラを左に平行移動します。 1. [IN] float : shift
  移動量。
ver5.0.0.1
E3DCameraShiftRight カメラ カメラを右に平行移動します。 1. [IN] float : shift
  移動量。
ver5.0.0.1
E3DCameraShiftUp カメラ カメラを上に平行移動します。 1. [IN] float : shift
  移動量。
ver5.0.0.1
E3DCameraShiftDown カメラ カメラを下に平行移動します。 1. [IN] float : shift
  移動量。
ver5.0.0.1
E3DGetCameraQ カメラ カメラの回転変換を表すクォータニオンを
取得します。


1. [IN] int : qid
  クォータニオンのIDを渡してください。
  qidで識別されるクォータニオンに、
  カメラの回転情報を代入します。

  qidにはE3DCreateQで取得したIDを使用してください。
ver5.0.0.1
E3DInvQ 算術 逆クォータニオンを取得します。
1. [IN] int : srcqid
2. [IN] int : dstqid
  クォータニオンのIDを渡してください。
  dstqidで識別されるクォータニオンに、
  srcqidで識別されるクォータニオンの逆クォータニオンを代入します。

  srcqid, dstqidには、
  E3DCreateQで取得したIDを使用してください。
ver5.0.0.1
E3DSetCameraTwist カメラ カメラをツイスト(ロール)させます。

カメラの使い方は、この表の前に書いてある部分をお読みください。

E3DSetCameraTwistはどのタイプのカメラ関数を使用している場合でも有効です。

E3DSetCameraTargetを使用している場合には、
E3DSetCameraTargetで指定した上方向のベクトルをさらにtwistdeg分ねじります。

1. [IN] float : twistdeg
  カメラをtwistdeg度だけ、ツイストします。
 
ver5.0.0.1
E3DIKRotateBeta モーション IKによるジョイントの回転を行います。
目標の座標などを指定すると、
そこに近づくように回転します。

この関数はベータ版です。
今後のバージョンアップで
互換性のとれない変更をする場合がありますのでご注意ください。


この関数では指定したモーションの1フレーム分の姿勢情報しか変更しません。
モーション全体にIK結果を反映させたい場合は、
IK計算した前後のキーフレーム間で
E3DFillUpMotionを呼び出す必要があります。

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

2. [IN] int : hsid
  モデルを識別する番号を指定してください。

3. [IN] int : jointno
  ジョイントパーツを識別する番号を指定してください。
  E3DGetPartNoByNameなどで取得した値や、
  E3DGetJointInfoで取得したシリアル番号を指定してください。
  ジョイント以外のパーツの番号を指定するとエラーになります。
  
4. [IN] int : motionid
  モーションを識別する番号を指定してください。

5. [IN] int : frameno
  モーションのフレーム番号を指定してください。

6. [IN] int : iklevel
  IK計算時の階層数を指定します。
  何階層、親をさかのぼってIK計算するかを指定します。

7. [IN] int : axiskind
  IKの回転の際の軸をどのように決定するかを指定します。
  0の時は視線に平行なベクトルを使います。
  1の時はaxis.x, axis.y, axis.zに指定した軸を使います。
  2の時は自動的に軸を設定します。
  
8. [IN] D3DXVECTOR3 : axis
  IKの回転軸を指定します。
  axiskindに1を指定したときのみ有効です。

9. [IN] int : calclevel
  計算の細かさを指定します。
  正の整数を指定してください。
  値が大きいほど細かく動きますが、
  現バージョンでは、大きすぎても、うまくいきません。

10. [IN] D3DXVECTOR3 : target
  jointnoで指定したジョイントが、
  座標(targetx, targety, targetz)に近づくように回転します。 

11. [OUT] D3DXVECTOR3* : resptr
  jointnoで指定したジョイントの計算後の座標が代入されます。

12. [OUT] int* : lastparentptr
  姿勢の変更のあったボーンのうち、
  一番親の番号が代入されます。
  この値をE3DRenderに渡すと処理の高速化が出来ます。
  詳しくはE3DRenderのところの注意事項をお読みください。

ver5.0.0.1
E3DIKRotateBeta2D モーション E3DIKRotateBetaの2D座標指定バージョンです。

目標座標が2Dになった以外は
E3DIKRotateBetaと同じです。
詳しくは、E3DIKRotateBetaの説明を
お読みください。

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

2. [IN] int : hsid
  モデルを識別する番号を指定してください。

3. [IN] int : jointno
  ジョイントパーツを識別する番号を指定してください。
  E3DGetPartNoByNameなどで取得した値や、
  E3DGetJointInfoで取得したシリアル番号を指定してください。
  ジョイント以外のパーツの番号を指定するとエラーになります。
  
4. [IN] int : motionid
  モーションを識別する番号を指定してください。

5. [IN] int : frameno
  モーションのフレーム番号を指定してください。

6. [IN] int : iklevel
  IK計算時の階層数を指定します。
  何階層親をさかのぼってIK計算するかを指定します。

7. [IN] int : axiskind
  IKの回転の際の軸をどのように決定するかを指定します。
  0の時は、視線に平行なベクトルを使います。
  1の時は、axis.x, axis.y, axis.zに指定した軸を使います。
  2の時は、自動的に軸を設定します。
  
8. [IN] D3DXVECTOR3 : axis
  IKの回転軸を指定します。
  axiskindに1を指定したときのみ有効です。

9. [IN] int : calclevel
  計算の細かさを指定します。
  正の整数を指定してください。
  値が大きいほど細かく動きますが、
  現バージョンでは、大きすぎても、うまくいきません。

10. [IN] D3DXVECTOR2 : target2d
  jointnoで指定したジョイントが、
  指定した2D座標に近づくように回転します。

11. [OUT] D3DXVECTOR3* : resptr
  jointnoで指定したジョイントの計算後の座標が代入されます。

12. [OUT] int* : lastparentptr
  姿勢の変更のあったボーンのうち、
  一番親の番号が代入されます。
  この値をE3DRenderに渡すと処理の高速化が出来ます。
  詳しくは、E3DRenderのところの注意事項をお読みください。
ver5.0.0.1
E3DGetMotionType モーション モーションのタイプを取得します。

得られるタイプの意味は以下のようになります。
1がフレーム番号固定(Stop)
2が最終フレーム番号まで進んだら固定(Clamp)
3が最終フレーム番号まで進んだら先頭フレームに戻る(Round)
4が最終フレーム番号まで進んだら先頭フレームの方向に逆進する(PingPong)
5が最終フレームまで進んだら指定フレームにジャンプする(Jump)
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [OUT] int* : typeptr
  前記で説明したモーションの種類が代入されます。
ver5.0.0.1
E3DSetMotionType モーション モーションのタイプをセットします。

typeに指定する値の意味は、以下のようになります。
1がフレーム番号固定(Stop)
2が最終フレーム番号まで進んだら固定(Clamp)
3が最終フレーム番号まで進んだら先頭フレームに戻る(Round)
4が最終フレーム番号まで進んだら先頭フレームの方向に逆進する(PingPong)
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : type
  前記で説明したモーションの種類を指定してください。
ver5.0.0.1
E3DGetIKTransFlag モデル情報 IK伝達禁止情報をジョイントから取得します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : jointid
  ジョイントを識別する番号を指定してください。

3. [OUT] int* : flagptr
  通常の場合は0が、
  IK伝達禁止の時は1が代入されます。
ver5.0.0.1
E3DSetIKTransFlag モデル情報 IK伝達禁止情報をジョイントにセットします。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : jointid
  ジョイントを識別する番号を指定してください。

3. [IN] int : flag
  通常の場合は0を、
  IK伝達禁止の時は1を指定してください。
ver5.0.0.1
E3DDestroyAllMotion モーション E3DAddMotionで読み込んだモーションデータを、全て破棄します。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。
ver5.0.0.1
E3DGetUserInt1OfPart モデル情報 パーツに設定されているユーザーデータを取得します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [OUT] int* : dataptr
  ユーザーデータが代入されます。
ver5.0.0.1
E3DSetUserInt1OfPart モデル情報 パーツにユーザーデータをセットします。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [IN] int : data
  ユーザーデータを指定してください。
ver5.0.0.1
E3DGetBSphere モデル情報 パーツ毎の境界球情報を取得します。
ボーン変形を考慮したグローバル座標系の
値が取得できます。

E3DChkInViewの計算結果をもとにしています。

表示用オブジェクトのみに対して有効です。
(ボーンに対して呼んでも、無意味です。)

BSPHERE構造体はusercoef.hで定義されています。

partnoに-1を指定するとモデル全体の境界球を取得できます。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [OUT] BSPHERE* : bsptr
  centerに境界球の中心座標が代入されます。
  rに境界球の半径が代入されます。
ver5.0.0.1
ver5.4.1.4で拡張
E3DGetChildJoint モデル情報 指定したジョイントの子供ジョイントの数と子供のシリアル番号を取得します。


childarray配列に
子供の数分のシリアル番号が
代入されます。

子供の数より配列の長さが大きいように
してください。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : parentno
  親のジョイントの番号を指定してください。

3. [OUT] int* : childarray
  子供ジョイントのシリアル番号が代入されます。
  arraylengがchildnumより小さい場合は、
  arrayleng個のシリアル番号しか代入されません。


4. [IN] int : arrayleng
  childarray引数に格納できる要素数を指定してください。
  int childarray[100];とした場合は、
  100を指定してください。

  childnum引数に代入される数が、arraylengより大きい場合は、
  配列の長さが足りないことになります。


5. [OUT] int* : childnum
  子供ジョイントの数が代入されます。
ver5.0.0.1
E3DDestroyMotionFrame モーション 指定したキーフレームを削除します。

モーションの変更を反映させるには、
E3DFillUpMotionを呼ぶ必要があります。

1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : frameno
  削除するフレームの番号を指定してください。
  -1を指定すると全てのキーフレームを削除します。
ver5.0.0.1
E3DGetKeyFrameNo モーション 指定したボーンのキーフレームのフレーム番号を全て取得します。


framearrayには、
int framearray[50];
などで作成した大きめの配列を使用してください。

配列の長さよりframenumが大きい場合にはエラーになりますので
注意してください。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : boneno
  ボーンパーツを識別する番号を指定してください。


4. [OUT] int* : framearray
  この配列にフレーム番号が代入されます。

5. [IN] int : arrayleng
  framearrayをアロケートしたときの要素数を指定してください。

6. [OUT] int* : framenum
  framearrayに格納した要素の数が代入されます。
  キーフレームの数です。
ver5.0.0.1
E3DConvScreenTo3D 算術 任意の2D座標を3D座標に変換します。

マウスの位置に対応する3D座標を
求める場合などに便利です。


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

2. [IN] D3DXVECTOR3 : pos2d
  変換したいマウスの位置などを、
  (pos2d.x, pos2d.y)で指定します。

  pos2d.zは、
  カメラからどのくらいの距離の平面上の点を取得するかを指定します。

  3D座標のZの値ではありません。
  カメラからの距離を制御出来るものと考えてください。
  (距離の値とは違います。)

  0.0のときカメラに一番近い座標がえられます。
  1.0のときカメラから一番遠い(見える範囲での)
  座標がえられます。
  見える範囲とは
  E3DSetProjectionで指定した範囲のことです。

  実際のカメラの距離とこのzの値は
  比例関係にありません。

  zの値をちょっと大きくしただけで
  カメラからの距離が大きく変わったり、
  反対にzを大きく変えても
  カメラからの距離が少ししか変わらない領域もあります。

  0に近すぎる値では、
  見えないことがあるので注意してください。


3. [OUT] D3DXVECTOR3* : pos3dptr
  上で指定した2D座標に対応する3D座標が代入されます。
ver5.0.0.1
E3DSetUV モデル情報 テクスチャーのUV座標をセットします。

partnoには
E3DGetPartNoByNameで取得した番号を、
vertnoには
E3DGetVertNumOfPartで取得した頂点数を
vertnumとしたとき、
0から(vertnum - 1)までの値を渡してください。

vertnoに-1を指定すると
指定パーツの全ての頂点に対して
処理を行うようにしました。

UV構造体はusercoef.hで定義されています。

ver5.0.1.6でビルボードに対応しました。

ver5.0.2.7でclampflagを追加しました。
1. [IN] int : hsid
  形状データを識別するid。
  -1を渡すとビルボードの処理をします。

2. [IN] int : partno
  パーツを識別する番号。
  hsidに-1を渡した場合はビルボードIDを指定します。

3. [IN] int : vertno
  頂点の番号。

  -1を指定すると、全ての頂点に対して処理します。


4. [IN] UV : uv
  設定したいUV値の値を指定してください。
  通常は0.0から1.0の値。

5. [IN] int : setflag
  setflag に0を指定すると、
  指定UV値をそのままセットします。

  setflagに1を指定すると、
  指定UV値を既存のUV値に足し算します。

6. [IN] 変数または、数値 : clampflag
  1をセットするとUVの値を0.0から1.0の間にクランプします。
  0を指定するとクランプは行いません。
ver5.0.0.1
ver5.0.1.6で拡張
ver5.0.2.7で拡張
E3DGetUV モデル情報 テクスチャーのUV座標を取得します。

partnoには
E3DGetPartNoByNameで取得した番号を、
vertnoには
E3DGetVertNumOfPartで取得した頂点数を
vertnumとしたとき、
0から(vertnum - 1)までの値を渡してください。

1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別する番号

3. [IN] int : vertno
  頂点の番号

4. [OUT] UV* : uvptr
  UV座標の値が代入されます。
ver5.0.0.1
E3DPickBone モデル情報 指定した2D座標に近いジョイントの番号を取得します。

2D座標にはマウスの座標などを指定してください。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] POINT : scpos
  2D座標を指定します。

3. [OUT] int : jointnoptr
  指定した2D座標に近いジョイントがある場合には、
  そのジョイントのIDが代入されます。
  
  近くにジョイントがない場合には、0以下が代入されます。
ver5.0.0.1
E3DShiftBoneTree2D モーション 指定した2D座標に近づくようにボーンツリー全体を移動します。
1. [IN] int : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] int : hsid
  形状データを識別するID

3. [IN] int : jointno
  ジョイントを識別するID
  E3DPickBoneなどで取得した、
  ジョイントの番号を渡してください。

4. [IN] int : motid
  モーションを識別するID
  E3DAddMotionで取得したmotidを指定してください。

5. [IN] int : frameno
  ポーズを設定したいフレーム番号を指定してください。

6. [IN] D3DXVECTOR2 : target2d
  jointnoで指定したジョイントが
  指定した2D座標に近づくように
  ボーンツリー全体が移動します。
ver5.0.0.1
E3DRotateBillboard ビルボード ビルボードをカメラの方向を向けたまま回転します。
1. [IN] int : billboardid
  ビルボードを識別する番号

2. [IN] float : rotdeg
  ビルボードをrotdeg度だけ
  回転します。

3. [IN] int : rotkind

  rotkindに0を指定すると相対値モードになります
  現在のビルボードの向きに
  更に指定角度だけ回転を加えます。

  rotkindに1を指定すると絶対値モードになります。
  初期状態に対して指定角度だけ回転を加えます。
ver5.0.0.1
E3DSetBillboardUV ビルボード ビルボードのUVを設定します。

横方向にunum個、縦方向にvnum個のタイル状に作ったテクスチャーの、タイルの番号を指定することで指定した画像のUVを設定します。

タイル状のテクスチャ画像とタイル番号の対応は、タイル番号の説明をご覧ください。


タイルの数が12個の場合は、
タイルの番号は0から11になりますが
それより大きな値や小さな値を指定することも可能です。

例えば、タイルの数が12個の場合、
12を指定すると
タイル番号0が表示され
13を指定すると
タイル番号1が表示され
-1を指定すると
タイル番号11が表示されるという具合に
機能します。

ver5.0.1.7でrevuflag引数を追加しました。

1. [IN] int : bbid
  ビルボードを識別するid

2. [IN] int : unum
3. [IN] int : vnum
  タイルの横と縦の個数

4. [IN] int : tileno
  設定したいテクスチャのタイルの番号

5. [IN] int : revuflag
  1を指定するとテクスチャを左右反転させます。0を指定するとそのまま。


ver5.0.0.1
ver5.0.1.7で拡張
E3DCreateTexture テクスチャ 指定したファイルからテクスチャを作ります。画面と同じテクスチャを作ることも可能です。

テクスチャの操作にはこの関数で取得した
テクスチャのID、texidを使用してください。


transparentに1(黒透過)を指定した場合には、
黒透過処理が行われます。
D3DPOOL_DEFAULTで、
テクスチャを作成する場合にはtransparentに1を指定すると失敗することがあります。


filenameに"MainWindow"を指定すると、
バックバッファと同じ内容で
同じ大きさのサーフェスを作成します。
この際、poolに何を指定しても
強制的にシステムメモリに作成します。
また、このときtransparentに1を指定できません。

"MainWindow"を指定した場合は、
E3DSetTextureToDispObjは使えません。
E3DCopyTextureToBackBufferを使ってください。


"MainWindow"を指定したときはバックバッファと同じフォーマットで、それ以外は、D3DFMT_A8R8G8B8で作成します。

DX8からDX9への移行時の変更の関係で、
現在、"MainWindow"指定は使用できない状態です。
1. [IN] char* : filename
  テクスチャファイル のパス文字列。

2. [IN] int : pool
  どのメモリ位置にテクスチャを作成するかを指定します。

  D3DPOOL_DEFAULT (普通はビデオメモリに作られます)
  D3DPOOL_MANAGED (DirectXの管理(バックアップ有り))
  D3DPOOL_SYSTEMMEM (システムメモリに作られます)
  の中から選びます。


3. [IN] int : transparent
  透過情報を指定します。

  0を指定すると不透明のテクスチャ。
  1を指定すると黒色を透過するテクスチャ。
  2を指定するとテクスチャファイルのアルファに従って
  透過するテクスチャになります。


4. [OUT] int* : texidptr
  作成したテクスチャを識別するID
  テクスチャ操作の際には、このIDを使用してください。

ver5.0.0.1
E3DGetTextureInfo テクスチャ 作成したテクスチャの情報を取得します。

テクスチャのサイズは、
ビデオカードによっては2の乗数のサイズしか
確保できないので
ファイルのサイズと異なる場合があります。


TEXTUREINFO構造体はusercoef.hで定義されています。
1. [IN, OUT] TEXTUREINFO* : texinfo
  テクスチャ情報を受け取るポインタ
  texinfo.texidにテクスチャのIDをセットしてからこの関数に渡してください。
ver5.0.0.1
E3DGetTextureFromDispObj テクスチャ 読み込み済の3Dオブジェクトに設定されているテクスチャを取得します。

sigモデルデータに対する操作には
E3DGetTextureFromMaterialをお使いください。

1. [IN] int : hsid
  モデルデータを識別するID

  -1を指定すると、ビルボードの処理を行います。

2. [IN] int : partno
  パーツの番号。
  E3DGetPartNoByNameで取得した番号を指定してください。

  hsidに-1を指定した場合には、
  ビルボードのIDを指定してください。

3. [OUT] int* : texidptr
  テクスチャを識別するID
  指定したパーツにテクスチャが貼られていない場合には、
  texidには-1が代入されます。

ver5.0.0.1
E3DSetTextureToDispObj テクスチャ 読み込み済の3Dオブジェクトにテクスチャを設定します。

sigモデルデータに対する操作には
E3DSetTextureToMaterialをお使いください。


テクスチャをセットしても
UV座標は自動的に生成されません。
動的にテクスチャを設定する場合は、
UV座標もE3DSetUVで設定するか、
もしくは、
あらかじめ、モデルに仮のテクスチャを貼っておいてUV設定しておく必要があります。

1. [IN] int : hsid
  モデルデータを識別するID

  -1を指定すると、ビルボードの処理を行います。
  -2を指定するとスプライトの処理を行います。

  パーティクルの設定をする場合は
  パーティクルIDを指定してください。

2. [IN] int : partno
  パーツの番号。
  E3DGetPartNoByNameで取得した番号を指定してください。

  hsidに-1を指定した場合には、
  ビルボードのIDを指定してください。

  hsidに-2を指定した場合には
  スプライトのIDを指定してください。

  hsidにパーティクルIDを指定した場合には
  partnoには0を指定してください。

3. [IN] int : texid
  貼り付けたいテクスチャのIDを指定します。
ver5.0.0.1
ver5.5.0.4で拡張
E3DDestroyTexture テクスチャ テクスチャを破棄します。
1. [IN] int : texid
  テクスチャを識別するID
ver5.0.0.1
E3DSetLightSpecular ライト ライトのスペキュラー色を指定します。
1. [IN] int : lightid
  ライトを識別するID

2. [IN] E3DCOLOR4UC : col
  スペキュラー色を指定します。
  col.aは無視されます。
ver5.0.0.1
E3DCreateTextureFromBuf テクスチャ メモリに読み込んだ絵のデータからテクスチャを作成します。

filenameの代わりにバッファを指定し、
"MainWindow"が扱えないこと以外は、
E3DCreateTextureと同じです。

E3DCreateTextureの説明を
お読みください。


例えば、以下のような使い方になります。
1. [IN] char* : buf
  バッファのポインタ

2. [IN] int : bufleng
  バッファの中のデータの長さ(バイト)

3. [IN] int : pool
  どのメモリ位置にテクスチャを作成するかを指定します。

  D3DPOOL_DEFAULT (普通はビデオメモリに作られます)
  D3DPOOL_MANAGED (DirectXの管理(バックアップ有り))
  D3DPOOL_SYSTEMMEM (システムメモリに作られます)
  の中から選びます。


4. [IN] int : transparent
  透過情報を指定します。

  0を指定すると不透明のテクスチャ。
  1を指定すると黒色を透過するテクスチャ。
  2を指定するとテクスチャファイルのアルファに従って
  透過するテクスチャになります。


5. [OUT] int* : texidptr
  作成したテクスチャを識別するIDが代入されます。
  テクスチャ操作の際には、このIDを使用してください。
ver5.0.0.1
E3DLoadSoundFromBuf サウンド メモリから音データを読み込みIDを取得します。

メモリから読み込むこと以外は
E3DLoadSoundと同じです。

E3DLoadSoundの説明をお読みください。

現在、oggにはこの命令は使えません。

ver5.3.1.6でoggdatanum引数を削除。
1. [IN] char* : buf
  バッファのポインタ

2. [IN] int : bufleng
  バッファの中のデータの長さ(バイト)

3. [IN] int : type
  midiのときは1、それ以外は0を指定してください。

4. [IN] int : use3dflag
  3Dサウンドとして読み込む場合は1を指定してください。
  デフォルト値は0。

5. [IN] int : reverbflag
  リバーブをオンにしたいときは1を
  オフにしたいときは0を指定してください。

6. [IN] int : bufnum
  同じIDのサウンドを同時にいくつ重ねて再生できるかを指定します。

7. [OUT] int* : soundidptr
  作成した音データを識別する番号が代入されます。

ver5.0.0.1
ver5.3.0.0で仕様変更
ver5.3.0.3で拡張
ver5.3.1.6で修正

E3DTwistBone モーション ボーンをツイストします。

指定したジョイントとその親のジョイントのベクトルを軸として回転します。

boneno引数に指定したジョイントに
親のジョイントがない場合は、
この関数を呼んでも
何も効果はありません。

1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : motid
  モーションを識別する番号

3. [IN] int : frameno
  操作するモーションのフレーム番号

4. [IN] int : jointno
  ジョイントを識別する番号
  E3DGetPartNoByNameなどで取得した値や、
  E3DGetJointInfoで取得したシリアル番号を指定してください。
  ジョイント以外のパーツの番号を指定すると
  エラーになります。



5. [IN] float : twistdeg
  twistdeg 度だけツイストします。
ver5.0.0.1
E3DGetBoneQ モーション ボーンのクォータニオンを取得します。

kind引数の値により、
親のクォータニオンの影響を受けたものと
受けていないものを取得できます。

モーションを読み込んでいないときは
エラーになります。

指定したframenoにキーフレームがない場合は、
補間計算した結果を取得します。

エンドジョイント(子供を持たないジョイント)
に対しても呼ぶことが出来ます。

ボーン以外の番号をbonenoに入れると
エラーになります。

マルチレイヤーモーションを使用する場合は
この命令は使えません。
E3DGetCurrentBoneQをお使いください。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。
  E3DGetBoneNoByNameまたは、
  E3DGetPartNoByNameで取得した番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  フレームの番号を指定してください。

5. [IN] int : kind
  親の影響を受けたクォータニオンを
  取得する場合は1を指定してください。

  親の影響を受けていないクォータニオンを
  取得する場合は0を指定してください。

  親の影響を受け、
  更に、モデル全体の向きの影響を受けたクォータニオンを取得
  するには2を指定してください。


6. [IN, OUT] int : qid
  クォータニオンを識別する番号。
  E3DCreateQで取得した番号を指定してください。

  qidで識別されるクォータニオンの内容に、
  指定したボーンのクォータニオンの内容を代入します。
ver5.0.0.1
E3DSetBoneQ モーション ボーンのクォータニオンをセットします。

指定したフレームにモーションポイントが存在しない場合は、
自動的にモーションポイントを作成した後、
クォータニオンをセットします。

E3DFillUpMotionを呼び出さないと
他のフレームには反映されません。

ver5.4.0.0でcurboneonlyフラグを追加しました。
このフラグが0のとき(今までと同じ動作)は、クォータニオンをセットした後、親にさかのぼって姿勢の計算をします。
この計算はE3DFillUpMotionでも行われるので、多数のボーンにSetBoneQをするとかなりのタイムロスになります。
curboneonlyに1をセットするとこの計算をスキップします。
curboneonlyに1をセットして多数のボーンの設定を行った後に、一回E3DFillUpMotionをすれば良いことになります。

1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。
  E3DGetBoneNoByNameまたは、
  E3DGetPartNoByNameで取得した番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  フレームの番号を指定してください。

5. [IN] int : qid
  クォータニオンを識別する番号。
  E3DCreateQで取得した番号を指定してください。

  qidで識別されるクォータニオンの内容をボーンの姿勢にセットします。

6. [IN] int : curboneonly
  前述をお読みください。
  デフォルト引数(0)。
ver5.0.0.1
ver5.4.0.0で拡張
E3DIsSoundPlaying サウンド 音が再生中かどうかを調べます。
1. [IN] int : soundid
  音を識別する番号を、指定します。

2. [OUT] int* : playingptr
  再生中の場合は1が、
  そうでない場合は0が代入されます。

ver5.0.0.1
E3DIKTranslate モーション IKで、ボーンの位置を移動します。

RokDeBone2のTボタンと同様に、
一番親のボーン以外でこの関数を呼ぶと、
モデルの形状が崩れます。
形状を保ちたい場合はE3DIKRotateBetaを使用してください。

位置にはグローバル座標を指定してください。

モーションを読み込んでいないとエラーになります。

framenoにモーションポイントがない場合は、
自動的に作成した後に移動をセットします。

ジョイント以外に対して呼ぶとエラーになります。

他のフレームにも結果を反映させたい場合は、
E3DFillUpMotionを呼んでください。

1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。
  E3DGetBoneNoByNameまたは、
  E3DGetPartNoByNameで取得した番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  フレームの番号を指定してください。

5. [IN] D3DXVECTOR3 : pos
  ボーンを移動させたいグローバル座標を指定します。
ver5.0.0.1
E3DSetUVTile モデル情報 ひとつの画像にタイル画像を敷き詰めたテクスチャのUV座標を、タイル番号でセットできます。

タイル状のテクスチャ画像とタイル番号の対応は、タイル番号の説明をご覧ください。


タイルの数が12個の場合は、
タイルの番号は0から11になりますが、
それより大きな値や小さな値を指定することも可能です。

例えば、タイルの数が12個の場合
12を指定すると、
タイル番号0が表示され、
13を指定すると
タイル番号1が表示され、
-1を指定すると
タイル番号11が表示されるという具合に
機能します。

5種類の投影、貼り付けをサポートします。

1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  表示パーツを識別する番号を指定してください。
  E3DGetPartNoByNameで取得した番号を指定してください。

3. [IN] int : texrule
  投影、貼り付けのモードを指定します。

  0を指定するとX軸投影
  1を指定するとY軸投影
  2を指定するとZ軸投影
  3を指定すると円筒貼り付け
  4を指定すると球貼り付け
  です。


4. [IN] int : unum
  テクスチャのタイル画像の
  横方向の個数を指定してください。

5. [IN] int : vnum
  テクスチャのタイル画像の
  縦方向の個数を指定してください。

6. [IN] int : tileno
  表示したいタイルの番号を指定してください。
  
ver5.0.0.1
E3DImportMQOFileAsGround 地面 hsidに読み込み済の地面データに、
filenameで指定した地面データを
インポート(追加読み込み)します。



1. [IN] int : hsid
  読み込み済の地面モデルを識別する番号を
  指定してください。

2. [IN] char* : filename
  読み込む、mqo ファイル名。

3. [IN] int : adjustuvflag
  UV座標を正規化したいときは1を、
  そうでないときは、0を指定してください。
  2を指定すると0.0から1.0の間にクランプします。


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

5. [IN] D3DXVECTOR3 : offset
  読み込み位置のオフセット座標を指定します。
  ローカル座標で指定します。

6. [IN] D3DXVECTOR3 : rot
  追加形状を、X,Y,Zそれぞれの軸に対して
  rotx, roty, rotz度だけ回転してから
  インポートを行います。
  回転順序はZ,Y,Xの順番です。

パラメータの適用順序は、
まず倍率を掛けて、
次に回転をして、
最後に移動します。
ver5.0.0.1
ver5.0.2.6で拡張

E3DLoadMQOFileAsMovableAreaFromBuf 移動可能領域を定義するデータをメモリから読み込みます。

メモリから読み込むこと以外は、
E3DLoadMQOFileAsMovableArea
と同じです。
E3DLoadMQOFileAsMovableArea
の説明をお読みください。


1. [IN] char* : buf
  バッファのポインタ

2. [IN] int : bufleng
  バッファの中のデータの長さ

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

4. [OUT] int : hsidptr
  作成した壁データを識別するhsidが代入されます。
ver5.0.0.1
E3DChkThreadWorking スレッド管理 関数の最後に「Thread」が付いている関数は、新たにスレッドを作成します。

この作成したスレッドが
現在動作中であるかどうかをチェックするための関数です。

スレッドが終了している場合には、
スレッドの動作結果が
returnval1, reteurnval2変数で取得できます。
この変数は、hsidやモーションIDを取得するために使用します。

スレッド読み込み関数に存在しないファイル名などを指定した場合などはエラーにならずに、
hsidが代入される引数に-1が代入されるので注意してください。

1. [IN] int : threadid
  スレッドを識別するID
  名前の最後にThreadが付いている関数で
  取得したIDを指定してください。

2. [OUT] int* : workingptr
  スレッドが動作中かどうかが代入されます。
  動作中の場合は1が、
  動作が終了している場合には0が代入されます。

  workingが0の場合は、
  returnval1, returnval2に代入される値が意味を持ちます。

3. [OUT] int* : returnval1
4. [OUT] int* : returnval2
  スレッドの実行結果が代入されます。
  returnval1, returnval2に代入される値の
  意味については、
  各Thread作成関数の説明をお読みください。

ver5.0.0.1
E3DLoadMQOFileAsGroundThread 地面 スレッドを作成してE3DLoadMQOFileAsGroundを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が代入されます。

threadidは、
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は全部で4098回まで
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)
E3DFreeThreadの説明もご覧ください。

スレッドが終了すると
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

E3DLoadMQOFileAsGroundの説明もお読みください。
1. [IN] char* : filename
  読み込む、mqo ファイル名。

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

3. [IN] int : adjustuvflag
  UV座標を正規化したいときは1を、
  そうでないときは0を指定してください。
  2を指定すると0.0から1.0の間にクランプします。

4. [OUT] int* : threadidptr
  作成したスレッドを識別するIDが代入されます。
ver5.0.0.1
ver5.0.2.6で拡張

E3DSigLoadThread 形状データ スレッドを作成してE3DSigLoadを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が代入されます。

threadidは
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は全部で4098回まで
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)
E3DFreeThreadの説明もご覧ください。


スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

E3DSigLoadの説明も、お読みください。
1. [IN] char* : fname
  *.sig のパス文字列。

2. [IN] int : adjustuvflag
  UV値を正規化するかどうかのフラグ。
  正規化する場合は1を指定。
  しない場合は0を指定。
  2を指定すると0.0から1.0の間にクランプします。

3. [IN] float : mult
  読み込み倍率を指定してください。
  等倍は1.0。

4. [OUT] int* : threadidptr
  作成したスレッドを識別するIDが代入されます。

ver5.0.0.1
ver5.0.2.6で拡張
E3DSigLoadFromBufThread 形状データ スレッドを作成してE3DSigLoadFromBufを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が代入されます。

threadidは
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は全部で4098回まで
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)
E3DFreeThreadの説明もご覧ください。

スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

E3DSigLoadFromBufの説明もお読みください。
1. [IN] char* : resdir
  テクスチャーのあるフォルダ のパス文字列。
  最後に"\\"が必要。

2. [IN] char* : buf
  バッファのポインタ

3. [IN] int : bufleng
  バッファの中のデータの長さ

4. [IN] int : adjustuvflag
  UV値を正規化するかどうかのフラグ。
  正規化する場合は1を指定。
  しない場合は0を指定。
  2を指定すると0.0から1.0の間にクランプします。

5. [IN] float : mult
  倍率を指定してください。
  等倍は、1.0。

6. [OUT] int* : threadidptr
  作成したスレッドを識別するIDが代入されます。
ver5.0.0.1
ver5.0.2.6で拡張
E3DLoadMQOFileAsMovableAreaThread スレッドを作成してE3DLoadMQOFileAsMovableAreaを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が代入されます。

threadidは
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は全部で4098回まで
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)
E3DFreeThreadの説明もご覧ください。

スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

E3DLoadMQOFileAsMovableAreaの説明もお読みください。
1. [IN] char* : filename
  読み込む、mqo ファイル名。

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

3. [OUT] int* : threadidptr
  作成したスレッドを識別するIDが代入されます。
ver5.0.0.1
E3DLoadMQOFileAsMovableAreaFromBufThread スレッドを作成してE3DLoadMQOFileAsMovableAreaFromBufを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が代入されます。

threadidは
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は全部で4098回まで
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)
E3DFreeThreadの説明もご覧ください。


スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

E3DLoadMQOFileAsMovableAreaFromBufの説明もお読みください。
1. [IN] char* : buf
  バッファのポインタ

2. [IN] int : bufleng
  バッファの中のデータの長さ

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

4. [OUT] int* : threadidptr
  作成したスレッドを識別するIDが代入されます。


ver5.0.0.1
E3DLoadGroundBMPThread 地面 スレッドを作成してE3DLoadGroundBMPを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が代入されます。

threadidは
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は全部で4098回まで
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)
E3DFreeThreadの説明もご覧ください。


スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

E3DLoadGroundBMPの説明もお読みください。
1. [IN] char* : filename1
  地面の座標情報の元となる、BMPファイル名

2. [IN] char* : filename2
  地面の道の情報の元となる、BMPファイル名

3. [IN] char* : filename3
  地面の川の情報の元となる、BMPファイル名

4. [IN] char* : filename4
  地面、道、川の模様を決める、BMPファイル名

5. [IN] float : maxx
  地面のX座標の最大値

6. [IN] float : maxz
  地面のZ座標の最大値

7. [IN] int : divx
  X方向の分割数

8. [IN] int : divz
  Z方向の分割数

9. [IN] float : maxheight
  地面の高さの最大値

10. [OUT] int* : threadidptr
  作成したスレッドを識別するIDが代入されます。
ver5.0.0.1
E3DAddMotionThread モーション スレッドを作成してE3DAddMotionを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が代入されます。

threadidは
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は全部で4098回まで
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)
E3DFreeThreadの説明もご覧ください。


スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に
モーションをを識別するIDが代入されます。
returnval2に
最大フレーム番号が代入されます。

この関数が終了するまで
この関数に渡したhsidに対して
モーションの再生命令などは使わないようにしてください。


E3DAddMotionの説明もお読みください。

1. [IN] int : hsid
  どのモデルデータに対するモーションかを指定する。

2. [IN] char* : fname
  *.quaのパス文字列。

3. [OUT] int* : threadidptr
  作成したスレッドを識別するIDが代入されます。
ver5.0.0.1
E3DAddMotionFromBufThread モーション スレッドを作成してE3DAddMotionFromBufを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が代入されます。

threadidは
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は全部で4098回まで
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)
E3DFreeThreadの説明もご覧ください。


スレッドが終了すると
E3DChkThreadWorkingで取得される
returnval1に
モーションをを識別するIDが代入されます。
returnval2に
最大フレーム番号が代入されます。

この関数が終了するまで
この関数に渡したhsidに対して
モーションの再生命令などは使わないようにしてください。


E3DAddMotionFromBufの説明もお読みください。
1. [IN] int : hsid
  形状データを識別するhsid

2. [IN] char* : buf
  バッファのポインタ

4. [IN] int : bufleng
  バッファの中のデータの長さ

5. [OUT] int* : threadidptr
  作成したスレッドを識別するIDが代入されます。

ver5.0.0.1
E3DGetShaderType モデル情報 シェーダーの種類を取得します。

それぞれの値の意味は、
E3DSetShaderTypeの説明をお読みください。
1. [IN] int : hsid
  形状データを識別するhsid

2. [OUT] int* : shaderptr
  シェーダーの種類代入されます。
ver5.0.0.1
E3DSetShaderType モデル情報 シェーダーの種類を設定します。

シェーダーの種類は、
usercoef.hの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
  ピクセルシェーダーを使用したトゥーン表示。
COL_PPHONG
  ピクセルシェーダーを使用したPhong表示。


ver3.0.0.1での仕様変更により、現在は、COL_PHONGとCOL_TOON1とCOL_TOON0のみのサポートとなります。

ver5.2.1.5でCOL_PPHONGを追加しました。

ver5.2.2.0でCOL_TOON1とCOL_TOON0は統合されCOL_TOON1となりました。


1. [IN] int : hsid
  形状データを識別するhsid

2. [IN] int : shader
  シェーダーの種類の指定をします。
  値の意味は、前記をご覧ください。
ver5.0.0.1
ver5.2.1.5で拡張
E3DSetBillboardEmissive モデル情報 ビルボードのemissive色をセットする関数です。

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

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


1. [IN] int : bbid
  ビルボードを識別するID

2. [IN] E3DCOLOR4UC : col
  色を指定します。
  col.aは無視されます。

  setflagに乗算を指定した場合は、
  各成分に、col.r/255, col.g/255, col.b/255を乗算します。

3. [IN] int : setflag
  setflagが0のときはcolをセットします。

  setflagが1のときは、
  ビルボードの色に(col.r/255, col.g/255, col.b/255)を乗算します。

  setflagが2のときは、
  ビルボードの色にcolを足し算します。

  setflagが3のときは、
  ビルボードの色からcolを減算します。

7. [IN] int : vertno
  指定した頂点番号の色をセットします。
  -1をセットした場合には
  ビルボード全体の色の設定をします。
ver5.0.0.1
E3DSetBillboardSpecularPower モデル情報 ビルボードののspecular powerをセットする関数です。

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

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


1. [IN] int : bbid
  ビルボードを識別するID

2. [IN] float : pow
  pow の値をsetflagに基づいて、
  現在の色に対して処理を行います。

3. [IN] int : setflag
  setflagが0のときは、
  指定した値をセットします。

  setflagが1のときは、
  現在の値に指定した値を乗算します。

  setflagが2のときは、
  現在の値に指定した値を足し算します。

  setflagが3のときは、
  現在の値から指定した値を減算します。

4. [IN] int : vertno
  指定した頂点番号の色をセットします。
  -1をセットした場合にはビルボード全体の色の設定をします。

ver5.0.0.1
E3DGetBillboardEmissive モデル情報 ビルボードの任意の頂点のemissive色を取得します。
1. [IN] int : bbid
  ビルボードを識別するID

2. [IN] int : vertno
  色を取得したい頂点の番号を指定します。

3. [OUT] E3DCOLOR4UC* : colptr
   指定した頂点のemissive色が代入されます。
   colptr->aは無視されます。
ver5.0.0.1
E3DGetBillboardSpecularPower モデル情報 ビルボードの任意の頂点のspecular powerを取得します。
1. [IN] int : bbid
  ビルボードを識別するID

2. [IN] int : vertno
  色を取得したい頂点の番号を指定します。

3. [OUT] float* : powptr
   指定した頂点のspecular powerが代入されます。
ver5.0.0.1
E3DGetInfElemNum ボーン影響 指定した頂点が何個のボーンの影響を受けているかを取得します。

影響度情報は影響を受けるボーンごとに存在します。
(影響を受けるボーンの数だけ存在します)

この影響度情報のことを、
Easy3DではInfElemと呼びます。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : partno
  取得したいパーツの番号を指定します。

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

3. [IN] int : vertno
  頂点の番号

4. [OUT] int* : numptr
  影響度情報の個数が代入されます。
ver5.0.0.1
E3DGetInfElem ボーン影響 指定した頂点のボーン影響度情報を取得します。

E3DINFELEM構造体はusercoef.hで定義されています。

infelem.infnoに、
E3DGetInfElemNumで取得した数値をinfnumとすると、
0から(infnum - 1)の値をセットしてからこの関数に渡してください。


infelem.childjointnoに0以下(0を含む)の数値が取得された場合には、そのデータはダミーデータですので無視するようにしてください。


infelem.calcmodeの意味
calcmodeは、影響度の計算方法を表します。
usercoef.h中で定義されているCALCMODE_で始まる定数を使用します。
NOSKIN0はスキニング無し。
ONESKIN0は距離と角度によりスキニング。
ONESKIN1は距離のみによりスキニング。
DIRECT0は直接数値指定。
SYMは対称コピーによる指定。
を表します。

Easy3D内部での影響度の計算方法
影響度を算出する際には、
intelem.orginf, infelem.dispinf, infelem.userrate, normalizeflagを使います。
infelem.orginfは、infelem.calcmodeで指定した方法で、算出した影響度。
infelem.userrateは、比重。
normalizeflagは、正規化(一つの頂点の影響度の合計が1になるようにする)をするかどうかのフラグ。
infelem.dispinfが、最終的な影響度。
まず、InfElemごとに、以下の計算をします。
orginf * userrate / 100
normalizeflagが0のときは、この値がそのまま、dispinfになります。
normalizeflagが1のときは、
ある頂点の全部のInfElemの影響度(dispinf)の合計が1になるように、正規化します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : partno
  取得したいパーツの番号を指定します。

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

3. [IN] int : vertno
  頂点の番号

4. [IN, OUT] E3DINFELEM* : infelemptr

  infelemptr->infnoに
  影響度情報の番号つまり
  0から(影響度の個数-1)までの数
  をセットしてから渡します。

  infelemptr->childjointnoは
  どのボーンの影響を受けるかが代入されます。
  この値が0以下の値の時はダミーデータです。
  ボーンの線分の内子供の方のジョイントの番号が代入されます。

  infelemptr->calcmodeには
  影響度の計算方法が代入されます。

  infelemptr->userrateには
  比重が代入されます。
  %値が代入されます。
  例えば、100%の場合は、100.0が代入されます。

  infelemptr->orginf, infelemptr->dispinfのそれぞれの意味は、前記をご覧ください。
 
ver5.0.0.1
E3DSetInfElem ボーン影響 頂点にボーン影響度を設定します。


paintmodeの意味
paintmodeは影響度の設定方法を表します。
usercoef.h内で、PAINT_で始まる定数で
定義されています。
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には指定できません。

CALCMODE_SYMの影響度設定はこの命令ではできません。
E3DSetSymInfElemをお使いください。

この命令を呼んだだけでは表示には反映されません。
影響度の編集がすべて終わったら、E3DCreateSkinMatを呼んで表示に反映させてください。


PAINT_ERAは使えません。
影響度を消したい場合は
E3DDeleteInfElemをご使用ください。


1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : partno
  パーツの番号を指定します。

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

3. [IN] int : vertno
  頂点の番号

4. [IN] int : childjointno
  影響を受けるボーンの指定。
  ボーンの線分の内、子供の方のジョイントの番号を
  指定します。

5. [IN] int : calcmode
  影響度の計算方法を指定します。

6. [IN] int : paintmode
  影響度の設定方法を指定します。

7. [IN] int : normalizeflag
  正規化をするときは1、
  しないときは0を指定します。
  詳しくは、E3DGetInfElemの説明をお読みください。

8. [IN] float : userrate
  比重%の値を指定します。
  100%の時は、100.0fを指定します。
  詳しくは、E3DGetInfElemの説明をお読みください。

9. [IN] float : directval
  直接数値指定の数値を指定します。
  詳しくは、前記をご覧ください。
ver5.0.0.1
E3DDeleteInfElem ボーン影響 ボーン影響度情報を削除します。

normalizeflagに1を指定すると、
削除した後に
指定頂点の残りの影響度情報を
正規化します。

この命令を呼んだだけでは表示には反映されません。
影響度の編集がすべて終わったら、E3DCreateSkinMatを呼んで表示に反映させてください。

1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : partno
  パーツの番号を指定します。

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

3. [IN] int : vertno
  頂点の番号

4. [IN] int : childjointno
  影響を受けるボーンの指定。
  ボーンの線分の内、子供の方のジョイントの番号を
  指定します。

5. [IN] int : normalizeflag
  正規化をするときは1、
  しないときは0を指定します。
  詳しくは、E3DGetInfElemの説明をお読みください。
ver5.0.0.1
E3DSetInfElemDefault ボーン影響 ボーン影響度情報をデフォルト状態に戻します。

partnoに-1を指定すると、
全パーツの全頂点の影響度を
デフォルト状態に戻します。

この命令を呼んだだけでは表示には反映されません。
影響度の編集がすべて終わったら、E3DCreateSkinMatを呼んで表示に反映させてください。

1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : partno
  パーツの番号を指定します。

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

3. [IN] int : vertno
  頂点の番号
ver5.0.0.1
E3DNormalizeInfElem ボーン影響 ボーン影響度情報を正規化します。

指定した頂点の影響度の合計が1になるように、各影響度を合計値で割り算します。

vertnoに-1を指定すると、
指定パーツの全頂点に対して
正規化を行います。

この命令を呼んだだけでは表示には反映されません。
影響度の編集がすべて終わったら、E3DCreateSkinMatを呼んで表示に反映させてください。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : partno
  パーツの番号を指定します。

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

3. [IN] int : vertno
  頂点の番号
ver5.0.0.1
E3DChkConfGroundPart 当たり判定 地面の指定パーツとキャラクターとの当たり判定を行います。

地面のパーツ番号を指定する他は、
E3DChkConfGroundと同じです。
E3DChkConfGroundの説明をお読みください。
1. [IN] int : charahsid
  移動する形状データを識別するid

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

3. [IN] int : groundpart
  当たり判定をしたい地面のパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  指定してください。

4. [IN] int : mode
  0を指定すると、飛ぶモード
  1を指定すると、地面を這うモード

5. [IN] float : diffmaxy
  一度の移動で登ることが出来る高さの最大値を
  指定してください。

6. [IN] float : mapminy
  groundhsidで識別されるデータの一番低いY座標の値

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

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

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

  となります。

8. [OUT] D3DXVECTOR3* : adjustptr
  result != 0 のときに、
    mode == 0のときは、ぶつかった座標
    mode == 1のときは、地面の座標が代入されます。

9. [OUT] D3DXVECTOR3* : nptr
  result != 0 のときに、
    mode == 0のときは、ぶつかったポリゴン
    mode == 1のときは、地面のポリゴンの
    法線ベクトルが代入されます。
    
    跳ね返る方向を決めるときなどに
    使用できるのではないかと思い
    加えてみました。
ver5.0.0.1
E3DChkConfGroundVecPart 当たり判定 地面パーツを指定して、線分と地面の当たり判定を行います。

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

詳しくは、E3DChkConfGround2の説明をお読みください。
1. [IN] D3DXVECTOR3 : befpos
  線分の始点を指定します。

2. [IN] D3DXVECTOR3 : newpos
  線分の終点を指定します。

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

4. [IN] int : groundpart
  地面のパーツ番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  指定してください。

5. [IN] int : mode
  0を指定すると、飛ぶモード
  1を指定すると、地面を這うモード

6. [IN] float : diffmaxy
  一度の移動で登ることが出来る高さの最大値を
  指定してください。

7. [IN] float : mapminy
  groundhsidで識別されるデータの一番低いY座標の値

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

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

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

9. [OUT] D3DXVECTOR3* : adjustptr
  result != 0 のときに、
    mode == 0のときは、ぶつかった座標
    mode == 1のときは、地面の座標が代入されます。

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

ver5.0.0.1
E3DSetNextMotionFrameNo モーション モーションの最後のフレーム番号に到達した後、どのモーションのどのフレーム番号にジャンプするかを指定できます。

この関数で次のモーションの指定を行っておけば、E3DSetNewPoseで自動的にモーションが切り替わります。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : srcmotid
3. [IN] int : nextmotid
4. [IN] int : nextframeno
5. [IN] int : befframeno
  srcmotidのモーションがbefframenoに達した後、nextmotidのモーションの、nextframenoのフレーム番号に、ジャンプするように設定されます。
ver5.0.0.1
E3DSetLinearFogParams 描画パラメータ 頂点フォグ(線形)を設定します。

頂点フォグなのでポリゴンのない部分にはフォグはかかりません。
画面全体にフォグをかけたい場合は、
E3DCreateBGで背景を作成してください。(背景はポリゴンです。)

1. [IN] int : enable
  1を指定すると、フォグが有効に、
  0を指定すると、フォグが無効になります。

2. [IN] E3DCOLOR4UC : col

  フォグの色を指定します。
  col.aは無視されます。

3. [IN] int : start
4. [IN] int : end
  フォグが開始される距離をstartに、
  フォグが終了する(一番濃くなる)距離をendに
  指定します。
  距離は、カメラからの距離です。

5. [IN] int : hsid
  この引数に、モデルデータのhsidを
  指定することにより、
  モデル単位でのフォグの指定が可能になります。
  特殊効果などで、フォグをかけたくない場合などの
  表示にお使いください。
  この引数に-1を指定した場合は、
  すべてのモデルデータに対して設定します。

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

パーツの番号に配列を指定できること以外は、
ほとんどE3DChkConflict2と同じです。
(inviewflagが微妙に違います)


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

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


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


すべてのパーツが視野外だった場合は
inviewflagに3が、
ひとつでも視野内のパーツがあった場合は
inviewflagに0が代入されます。

1. [IN] int : hsid1
  形状データを識別するid

2. [IN] int* : partno1
  hsid1のモデル中のパーツの番号の配列
  int partno1[partnum1];
  などで配列を作成し、それぞれの配列要素に
  判定をしたいパーツの番号を入れてください。

3. [IN] int : partnum1
  partno1に値をセットした要素数を指定してください。


4. [IN] int : hsid2
  形状データを識別するid

5. [IN] int* : partno2
  hsid2のモデル中のパーツの番号の配列
  int partno2[partnum2];
  などで配列を作成しそれぞれの配列要素に
  判定をしたいパーツの番号を入れてください。

6. [IN] int : partnum2
  partno2に値をセットした要素数を指定してください。


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

8. [OUT] int* : inviewflag
  すべてのパーツが視野外だった場合は
  inviewflagに3が、
  1つでも視野内のパーツがあった場合は
  inviewflagに0が代入されます。

ver5.0.0.1
E3DChkConflictBSPartArray 当たり判定 境界球によるあたり判定を任意のパーツごとに行います。

パーツの番号に配列を指定できること以外は
E3DChkConfBySphere2と同じです。


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



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

パーツ番号に-1を指定すると
モデル全体とあたり判定をします。

1. [IN] int : hsid1
  形状データを識別するid

2. [IN] int* : partno1
  hsid1のモデル中のパーツの番号の配列
  int partno1[partnum1];
  などで配列を作成しそれぞれの配列要素に
  判定をしたいパーツの番号を入れてください。

3. [IN] int : partnum1
  partno1に値をセットした要素数を指定してください。

4. [IN] int : hsid2
  形状データを識別するid

5. [IN] int* : partno2
  hsid2のモデル中のパーツの番号の配列
  int partno2[partnum2];
  などで配列を作成しそれぞれの配列要素に
  判定をしたいパーツの番号を入れてください。

6. [IN] int : partnum2
  partno2に値をセットした要素数を指定してください。


7. [OUT] int* : confflagptr
  hsid1, hsid2で識別される形状同士が
  衝突している場合は1が、
  衝突していない場合は0がセットされる。
ver5.0.0.1
E3DSetMovableAreaThread スレッドを作成してE3DSetMovableAreaを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が代入されます。

threadidは
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は全部で4098回まで
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)
E3DFreeThreadの説明もご覧ください。


スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。

E3DSetMovableAreaの説明も、お読みください。
1. [IN] char* : filename1
  壁の座標情報の元となるBMPファイル名

2. [IN] float : maxx
  壁のX座標の最大値

3. [IN] float : maxz
  壁のZ座標の最大値

4. [IN] int : divx
  X方向の分割数

5. [IN] int : divz
  Z方向の分割数

6. [IN] float : wallheight
  作成する壁の高さ

7. [OUT] int* : threadidptr
  作成したスレッドを識別するIDが代入されます。
ver5.0.0.1
E3DLoadMOAFile モーションアクセラレータ モーションアクセラレータファイル(*.moa)を読み込みます。

moaと同じフォルダに
moaに記述されている全てのquaファイルが存在しないと
エラーになります。

詳しくは、マニュアルのrdb2_ma.htmと
e3dhsp3_MotionAccelerator.hsp
をご覧ください。
1. [IN] int : hsid
  どのモデルデータに対するmoaかを指定する。

2. [IN] char* : fname
  *.moaのパス文字列。

3. [IN] int : FillUpFrameLength
  補間モーションのフレーム長
  ver5.3.2.6以降では、-1を指定するとmoaファイルに記述されているフレーム長を読み込みます。

4. [IN] float : mvmult
  モーションの移動成分に掛ける倍率
ver5.0.0.1
ver5.3.2.6で拡張
E3DSetNewPoseByMOA モーションアクセラレータ モーションアクセラレータに基づいてモーションの更新をします。E3DSetNewPoseの代わりに呼んでください。

詳しくは、マニュアルの、rdb2_ma.htmと
e3dhsp3_MotionAccelerator.hsp
をご覧ください。
1. [IN] int : hsid
  モデルデータを識別するID

2. [IN] int : eventno
  イベント番号
  詳しくは、マニュアルのrdb2_ma.htmをご覧ください。


ver5.0.0.1
E3DGetMotionFrameNo モーション カレント(現在の)のモーション番号とフレーム番号を取得します。 1. [IN] int : hsid
  形状データを識別するid

2. [OUT] int* : motidptr
  モーションを識別する番号

3. [OUT] int* : frameptr
  フレーム番号
ver5.0.0.1
E3DGetKeyboardCnt キーボード 256 個の仮想キーの状態(カウンター)を指定されたバッファkeybufへコピーします。


E3DGetKeyboardState関数は、呼び出し時にキーが押されているかどうかしか取得できませんが、
E3DGetKeyboardCnt関数は、どのくらいの時間押し続けているかを表すカウンターを取得できます。

Easy3D内部で、
前回のきーの情報を保存しておき、
呼び出し時にキーが押されていれば
カウンターを1増やします。
押されていなければカウンターを0にします。


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

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

例えば、Aキーのカウンタを調べる場合は、
E3DGetKeyboardCnt
呼び出し後に
keybuf['A'] の値を調べます。
( ’ を忘れずに。 )
1. [OUT] int* : keybuf
  keybufにキーの状態(カウンタ)が代入されます。
  keybufは、int keybuf[256];で
  作成されている必要があります。
ver5.0.0.1
E3DResetKeyboardCnt キーボード E3DGetKeyboardCntが内部で使用する前回のキーの情報をリセットします。
なし ver5.0.0.1
E3DEncodeBeta 簡易暗号化 ファイルの内容を暗号化します。

暗号化といっても超簡易な方法ですので、
プログラムに詳しい人なら復号できてしまう程度のものです。

ファイルを暗号化して内容を上書きします。
暗号化したファイルに対して
この関数を呼べば、暗号化前のファイルに戻ります。

1. [IN] char* : filename
  簡易暗号化するファイル名

2. [IN] int* : rnd10
  簡易暗号化する際に使用する、
  ランダムなキー配列を指定します。
  キーは10個指定します。
  キーの値は0から255の値を使用してください。
  int rnd10[10];
  で配列を作成してから値をセットしてください。


ver5.0.0.1
E3DDecodeBeta 簡易暗号化 E3DEncodeBetaで暗号化したファイルをバッファ上で復号します。

バッファはmallocで確保してください。

1. [IN] char* : filename
  復号するファイル名

2. [IN] int* : rnd10
  E3DEncodeBetaで使用したのと同じ内容の
  キー配列。

3. [OUT] char* : dstbuffer
  復号した内容がセットされます。
  ファイルの長さをflengthとした場合
  dstbuffer = (char*)malloc( sizeof( char ) * flength );
  で作成したバッファーを指定してください。

ver5.0.0.1
E3DGetMoaInfo モーション Moaファイルを読み込んだ場合のモーションの名前とIDを取得します。

MOAINFO構造体はusercoef.hで定義されています。

motmaxnumは、大き目の値を設定してください。
この値が実際のモーションの数よりも小さいとエラーになります。

moainfoptrは
moainfoptr = (MOAINFO*)malloc( sizeof( MOAINFO ) * motmaxnum );
で作成した配列を指定してください。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : motmaxnum
  データ取得用配列の大きさ(モーションの数)を指定します。

3. [OUT] MOAINFO* : moainfoptr
  情報を取得するための配列を渡してください。

4. [OUT] int : motgetnumptr
  何個のモーションの情報を出力したかが代入されます。
ver5.0.0.1
E3DGetNextMotionFrameNo モーション E3DSetNextMotionFrameNoで設定した情報を取得します。

Moaファイルを読み込んで
E3DSetNewPoseByMOAを使用する場合、
モーションとモーションの間に補間モーションが入ります。
この補間モーションのモーションIDはver5001では常に0です。

この補間モーションにはE3Dが内部で、
次のモーションをE3DSetNextMotionFrameNoでセットしています。

つまり、この補間モーションに対して
E3DGetNextMotionFrameNoを呼び出せば、
次に再生するモーションの情報が取得できるというわけです。

1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : motid
  現在のモーションのID


3. [OUT] int* : nextmotionidptr
  次に再生されるモーションのID

4. [OUT] int* : nextframeptr
  フレーム番号
ver5.0.0.1
E3DGetScreenPos3F モデル情報 形状データの画面上での2Dの座標を取得する関数です。
奥行き情報Zも取得できます。

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

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

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

Z情報はスプライト描画時のZ指定の値に使用できます。


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


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

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

3. [IN] int : partno
  設定したいパーツの番号を指定します。

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

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

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

4. [IN] int : vertno
  取得したい頂点の番号を指定します。
  -1を指定した場合は
  パーツの中心の2D座標を取得します。


5. [OUT] D3DXVECTOR3* : scposptr
  指定したパーツの2Dスクリーン座標が
(scposptr->x, scposptr->y)に代入されます。

  scpospptr->zは奥行き情報です。
  この値に0から1の範囲外の値が得られた場合は、
  画面に描画されない頂点です。

ver5.0.0.1
E3DEnableToonEdge 描画パラメータ 輪郭線のオンオフをします。

トゥーン設定されたsigを読み込んでいる状態か、
もしくは、E3DSetShaderTypeでCOL_TOON1を設定している状態か
でしか機能しません。


1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : partno
  設定したいパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  渡してください。

  partnoに-1を渡すと、
  モデル全体の輪郭線のオンオフをします。

3. [IN] int : type
  輪郭線のタイプを指定します。
  0を指定してください。

4. [IN] int : flag
  輪郭をオンにしたい場合は1を、
  オフにしたい場合は0を指定してください。
ver5.0.0.1
E3DSetToonEdge0Color 描画パラメータ 輪郭線の色をセットします。

トゥーン設定されたsigを読み込んでいる状態か、
もしくは、E3DSetShaderTypeでCOL_TOON1を設定している状態か
でしか機能しません。

1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : partno
  設定したいパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  渡してください。

  partnoに-1を渡すと、
  モデル全体の輪郭線の色を設定します。

3. [IN] char* : materialname
  マテリアルの名前を指定します。
  RokDeBone2の「トゥ」ボタンを押したときに
  リストボックスに表示されるマテリアル名を
  指定してください。

  partnoに-1を指定している場合は、
  "dummy"と指定してください。

4. [IN] E3DCOLOR4UC : col
  色を指定します。
  col.aは無視されます。


ver5.0.0.1
E3DSetToonEdge0Width 描画パラメータ 輪郭線の幅をセットします。

トゥーン設定されたsigを読み込んでいる状態か、
もしくは、E3DSetShaderTypeでCOL_TOON1を設定している状態か
でしか機能しません。

1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : partno
  設定したいパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  渡してください。

  partnoに-1を渡すと、
  モデル全体の輪郭線の色を設定します。

3. [IN] char* : materialname
  マテリアルの名前を指定します。
  RokDeBone2の「トゥ」ボタンを押したときに
  リストボックスに表示されるマテリアル名を
  指定してください。

  partnoに-1を指定している場合は、
  "dummy"と指定してください。

4. [IN] float : width
  輪郭の幅を指定してください。

ver5.0.0.1
E3DGetToonEdge0Color 描画パラメータ 輪郭線の色を取得します。

トゥーン設定されたsigを読み込んでいる状態か、
もしくは、E3DSetShaderTypeでCOL_TOON1を設定している状態か
でしか機能しません。

1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : partno
  設定したいパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  渡してください。

3. [IN] char* : materialname
  マテリアルの名前を指定します。
  RokDeBone2の「トゥ」ボタンを押したときに
  リストボックスに表示されるマテリアル名を
  指定してください。

4. [OUT] E3DCOLOR4UC* : colptr
  輪郭の色が代入されます。
  colptr->aは無視されます。

  指定したマテリアルが見つからなかった場合は
  (0, 0, 0)が代入されます。
ver5.0.0.1
E3DGetToonEdge0Width 描画パラメータ 輪郭線の幅を取得します。

トゥーン設定されたsigを読み込んでいる状態か、
もしくは、E3DSetShaderTypeでCOL_TOON1を設定している状態か
でしか機能しません。

1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : partno
  設定したいパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  渡してください。

3. [IN] char* : materialname
  マテリアルの名前を指定します。
  RokDeBone2の「トゥ」ボタンを押したときに
  リストボックスに表示されるマテリアル名を
  指定してください。

4. [OUT] float* : widthptr
  輪郭の幅が代入されます。

  指定したマテリアルが見つからなかった場合は、
  0.0が代入されます。
ver5.0.0.1
E3DCreateParticle パーティクル パーティクルを作成します。

1. [IN] int : maxnum
  表示できるパーティクルの最大数を指定します。
  2000以下の数字を指定してください。

2. [IN] char* : texname
  テクスチャー名をフルパスで指定します。

3. [IN] float : width
  パーティクルの幅を指定します。

4. [IN] float : height
  パーティクルの高さを指定します。

5. [IN] int : blendmode
  半透明のブレンドモードを指定します。
  0を指定すると
  テクスチャのアルファによるブレンドをします。
  1を指定すると
  アッドモードでのブレンドをします。
  2を指定すると
  頂点のアルファを考慮した
  アッドモードブレンドをします。

6. [IN] int : transparentflag
  1を指定すると黒色を透過します(BMP用)。
  0を指定すると画像ファイルのアルファをそのまま使います。

7. [IN] int : cmpalways
  1を指定するとZバッファの比較を行わずに常に描画するようになります。
  通常はは0。

8. [OUT] int* : particleidptr
  パーティクルを識別するIDが代入されます。



ver5.0.0.1
E3DDestroyParticle パーティクル パーティクルを破棄します。
1. [IN] int : particleid
  削除したいパーティクルを識別するIDを指定します。
ver5.0.0.1
E3DSetParticlePos パーティクル パーティクルの場所を設定します。
設定した場所からパーティクルが噴き出します。
1. [IN] int : particleid
  パーティクルを識別するIDを指定します。

2. [IN] D3DXVECTOR3 : pos
  パーティクルの位置を指定します。
 
ver5.0.0.1
E3DSetParticleGravity パーティクル パーティクルの重力を設定します。
設定した値はY方向の負の加速度として計算に使用されます。
1. [IN] int : particleid
  パーティクルを識別するIDを指定します。

2. [IN] float : gravity
  重力を指定します。
ver5.0.0.1
E3DSetParticleLife パーティクル パーティクルの寿命を設定します。
パーティクルが噴き出してから消えるまでの時間を
秒で指定します。
1. [IN] int : particleid
  パーティクルを識別するIDを指定します。

2. [IN] float : life
  パーティクルの寿命を指定します。
  秒。

ver5.0.0.1
E3DSetParticleEmitNum パーティクル パーティクルの生成個数をします。
E3DRenderParticleを呼ぶたびに指定した個数だけ生成されます。
小数での指定が可能です。
例えば0.2と指定した場合は、
5回E3DRenderParticleを呼び出すごとに1個パーティクルが
生成されます。
1. [IN] int : particleid
  パーティクルを識別するIDを指定します。

2. [IN] float : emitnum
  パーティクルの1回あたりの生成個数を指定します。
ver5.0.0.1
E3DSetParticleVel0 パーティクル パーティクルの速度を指定します。

速度の最低値をminvelに指定し、
速度の最大値をmaxvelに指定します。

最低値と最大値の幅が広いほど、
パーティクルは、まばらに放出されます。
1. [IN] int : particleid
  パーティクルを識別するIDを指定します。

2. [IN] D3DXVECTOR3 : minvel
  パーティクルの速度の最小値を指定します。

3. [IN] D3DXVECTOR3 : maxvel
  パーティクルの速度の最大値を指定します。
ver5.0.0.1
E3DSetParticleRotation パーティクル パーティクルの回転を指定します。

この関数を呼び出すたびに、
パーティクルが指定角度だけ回転します。
1. [IN] int : particleid
  パーティクルを識別するIDを指定します。

2. [IN] float : rotation
  パーティクルの回転を角度(度)で指定します。
ver5.0.0.1
E3DSetParticleDiffuse パーティクル パーティクルの頂点色を指定します。

テクスチャ色とモジュレートされて表示されます。
1. [IN] int : particleid
  パーティクルを識別するIDを指定します。

2. [IN] E3DCOLOR4UC : col
  パーティクルの頂点色を指定します。
  col.aは無視されます。



ver5.0.0.1
E3DRenderParticle パーティクル パーティクルを描画します。

呼び出すたびに、パーティクルの消滅、生成、位置移動をして
描画します。

1.0 / fps 秒だけ時間を進めて描画します。
fpsにマイナスの値を指定した場合は、
パーティクルが静止した状態で描画します。


E3DCreateParticleで指定したmaxnum個より多いパーティクルは
描画できません。
パーティクルの噴出が途中で途切れる場合は、
maxnumの値を増やすかまたは、
E3DSetParticleEmitNumの値を小さくするかまたは、
E3DSetParticleLifeに指定するlifeの値を小さくしてください。

fps引数に1を指定すると各パーティクル関数の時間を秒ではなくてフレーム数で扱えます。
1. [IN] int : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] int : particleid
  パーティクルを識別するIDを指定します。

3. [IN] int : fps
  1秒間に何回この関数を呼ぶかを
  指定してください。


4. [IN] int : onlyupdate
  1を指定した場合は、
  描画を行わず状態のアップデートのみ行います。
  0を指定した場合や省略した場合は
  通常通りアップデートと描画を行います。
ver5.0.0.1
E3DSetParticleAlpha パーティクル パーティクルの透明度を設定します。

パーティクルが放出されてからの時間帯ごとに、
設定可能です。

生成されてからの時間が、mintimeからmaxtimeの間にある
パーティクルに対して処理を行います。

負荷は気にしなくていい程度です。

呼び出すたびに設定されます。
ループ中で使用します。
(一回だけ呼び出しても意味がありません)

1. [IN] int : particleid
  パーティクルを識別するIDを指定します。

2. [IN] float : mintime
3. [IN] float : maxtime
  処理したいパーティクルの時間帯を
  秒で指定します。

4. [IN] float : alpha
  透明度を0から1の間のfloatで指定します。

ver5.0.0.1
E3DSetParticleUVTile パーティクル パーティクルのUVを設定します。

パーティクルが放出されてからの時間帯ごとに、
設定可能です。

生成されてからの時間がmintimeからmaxtimeの間にある
パーティクルに対して処理を行います。

この処理はビデオメモリにアクセスする必要があるので、
ちょっと重い処理です。

ひとつの画像にタイル画像を敷き詰めたテクスチャの、UV座標をタイル番号でセットできます。

タイル状のテクスチャ画像とタイル番号の対応は、タイル番号の説明をご覧ください。


呼び出すたびに設定されます。
ループ中で使用します。
(一回だけ呼び出しても意味がありません)

1. [IN] int : particleid
  パーティクルを識別するIDを指定します。

2. [IN] float : mintime
3. [IN] float : maxtime
  処理したいパーティクルの時間帯を
  秒で指定します。

4. [IN] int : unum
  テクスチャの横方向の分割数を指定します。

5. [IN] int : vnum
  テクスチャの縦方向の分割数を指定します。

6. [IN] int : tileno
  設定したいタイル番号を指定します。

ver5.0.0.1
E3DInitParticle パーティクル パーティクルの発生状態を初期状態に戻します。 1. [IN] int : particleid
  パーティクルを識別するIDを指定します。
ver5.0.0.1
E3DPickFacePartArray 当たり判定 2Dの画面の座標に対応する3Dモデルの座標を取得できます。

判定したいパーツを指定できる点以外は、
E3DPickFaceと同じです。
詳しくはE3DPciFaceの説明をお読みください。

パーツ番号3とパーツ番号4についてのみ判定を行いたい場合は、
partnum = 2
int partarray[2];
partarray[ 0 ] = 3
partarray[ 1 ] = 4
の様に値をセットしてE3DPickFacePartArrayを呼び出してください。
1. [IN] int : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] int : hsid
  モデルを識別する番号を指定してください。

3. [IN] int* : partarray
  判定したいパーツ番号を指定します。
  要素数partnumの配列のポインタを指定してください。

4. [IN] int : partnum
  partarray配列の要素数


5. [IN] POINT : pos2d
  画面上の2D座標を指定してください。

6. [IN] float : maxdist
  どのくらいの距離まで3Dモデルの検索をするかを指定します。
  この値を小さくするほど処理は高速になります。

7. [OUT] int* : partno
8. [OUT] int* : faceno
  2D座標に対応する3D座標が見つかった場合に、
  その3Dモデルのパーツの番号と面の番号が
  代入されます。

  見つからなかった場合は-1が代入されます。

9. [OUT] D3DXVECTOR3* : pos3dptr
  2D座標に対応する3D座標が代入されます。
  partnoに-1以外の値が代入されているときのみ、
  これらの値は意味を持ちます。

10. [OUT] D3DXVECTOR3* : nptr
  2D座標に対応する3D座標を含む面の法線ベクトルが
  代入されます。

  ベクトルの大きさは1のものを代入します。

  partnoに-1以外の値が代入されているときのみ、
  これらの値は意味を持ちます。


11. [OUT] float* : distptr
  視点とpos3dとの距離が代入されます。
  partnoに-1以外の値が代入されているときのみ、
  この値は意味を持ちます。

ver5.0.0.1
E3DChkConfWallPartArray 当たり判定 E3DSetMovableArea, または、E3DLoadMQOFileAsMovableAreaで作成した壁データとキャラクターのあたり判定を行います。

判定したい壁データのパーツ番号を指定できる点以外は
E3DChkConfWallと同じです。
詳しくは、E3DChkConfWallの説明をお読みください。

壁モデルのパーツ番号3とパーツ番号4についてのみ、
判定を行いたい場合は、
partnum = 2
int partarray[2];
partarray[ 0 ] = 3
partarray[ 1 ] = 4
の用に値をセットしてE3DConfWall3を呼び出してください。


1. [IN] int : charahsid
  移動する形状データを識別するid

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

3. [IN] int* : partarray
  判定したい壁のパーツ番号を指定します。
  要素数partnumの配列のポインタを渡してください。

4. [IN] int : partnum
  partarray配列の要素数

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

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

7. [OUT] D3DXVECTOR3* : adjustptr
  result != 0 のときに、
  修正後の座標が代入されます。

8. [OUT] D3DXVECTOR3* : nptr
  result != 0 のときに、
  ぶつかった面の法線ベクトルの値が
  代入されます。

ver5.0.0.1
E3DGetMotionIDByName モーション モーションの名前からモーションのIDを取得します。 1. [IN] int : hsid
  形状データを識別するid

2. [IN] char* : motname
  RokDeBone2で設定したモーションの名前。

3. [OUT] int* : motidptr
  名前がmotnameであるモーションのIDが代入されます。
  見つからなかった場合は負の値が代入されます。
ver5.0.0.1
E3DGetMotionNum モーション 読み込んでいるモーションの総数を取得します。 1. [IN] int : hsid
  形状データを識別するid

2. [OUT] int* : motnumptr
  モーションの総数が代入されます。
ver5.0.0.1
E3DChkConfParticle 当たり判定 パーティクルとモデルデータのあたり判定をします。

境界球を使用した判定を行います。

モデルデータ側の境界球の半径が大きすぎるときは、
rate引数に1より小さい値を指定して調整してください。

1. [IN] int : ptclid
  パーティクルを識別するid

2. [IN] int : hsid
  形状データを識別するid

3. [IN] float : rate
  モデルデータの境界球の半径に掛け算して
  判定します。
  1より小さい値を指定すれば、
  判定の感度が落ちます。

4. [OUT] int* : confflagptr
  パーティクルとモデルデータが
  ぶつかっているときは1が
  ぶつかっていないときは0が代入されます。



ver5.0.0.1
E3DLoadSigFileAsGround 地面 sigファイルを地面として読み込んでhsidを得る。

sigファイルの読み込み速度はmqoファイルの読み込みよりも
だいぶ速くなります。
1. [IN] char* : fname
  *.sig のパス文字列。

2. [IN] float : mult
  読み込み倍率を指定してください。
  等倍は1.0。

3. [IN] int : adjustuvflag
  UV値を正規化するかどうかのフラグ。
  正規化する場合は1を指定。
  しない場合は0を指定。
  2を指定すると0.0から1.0の間にクランプします。



4. [OUT] int* : hsidptr
  読み込んだ形状データを識別するhsidが代入されます。


ver5.0.0.1
ver5.0.2.6で拡張
E3DLoadSigFileAsGroundFromBuf 地面 メモリから地面データのロードを行います。
メモリ内にはsigファイルと同じフォーマットが
入っているとみなして処理します。

テクスチャファイルは、通常読込と同様に
ファイルから行います。

resdirにはテクスチャの存在するフォルダのパスを指定してください。
最後に"\\"を付けるのを忘れないでください。

例えば、
"C:\\hsp\\Meida\\"
などのように指定してください。

1. [IN] char* : resdir
  テクスチャーのあるフォルダ のパス文字列。
  最後に"\\"が必要。

2. [IN] char* : buf
  バッファのポインタ

3. [IN] int : bufleng
  バッファの中のデータの長さ

4. [IN] int : adjustuvflag
  UV値を正規化するかどうかのフラグ。
  正規化する場合は1を指定。
  しない場合は0を指定。
  2を指定すると0.0から1.0の間にクランプします。

5. [IN] float : mult
  読み込み倍率を指定してください。
  等倍は1.0。

6. [OUT] int* : hsidptr
  読み込んだ形状データを識別するhsidが代入されます。

ver5.0.0.1
ver5.0.2.6で拡張
E3DGetCenterPos モデル位置 パーツの中心のグローバル座標を取得します。
パーツの中心の座標はE3DChkInViewで計算されます。

1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  取得したいパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  渡してください。

  -1を指定すると、モデル全体の中心座標が
  取得できます。

3. [OUT] D3DXVECTOR3* : posptr
  中心の座標が代入されます。
ver5.0.0.1
E3DGetFaceNum モデル情報 指定した表示オブジェクトの面の総数を取得します。


1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  取得したいパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  渡してください。

3. [OUT] int* : facenumptr
  面の総数が代入されます。
ver5.0.0.1
E3DGetFaceNormal モデル情報 指定した表示オブジェクトの面の法線を取得します。

E3DGetFaceNumで取得した面の総数をfacenumとしたとき、
faceno引数には0からfacenum - 1までの値を
指定してください。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  取得したいパーツの番号を指定します。
  E3DGetPartNoByNameで取得した番号を
  渡してください。

3. [IN] int : faceno
  面の番号を指定します。

4. [OUT] D3DXVECTOR3* : nptr
  法線のベクトルが代入されます。
ver5.0.0.1
E3DCreateEmptyMotion モーション 姿勢情報の入っていない空のモーションを作成します。 1. [IN] int : hsid
  形状データを識別するid

2. [IN] char* : motname
  モーションの名前の文字列。

3. [IN] int : frameleng
  作成するモーションの長さ。フレーム長。

4. [OUT] int* : motidptr
  作成したモーションを識別する番号が代入されます。

ver5.0.0.1
E3DSetTextureMinMagFilter 描画パラメータ テクスチャーを拡大縮小表示する際のフィルターを指定します。

3Dモデル、背景、スプライト、ビルボードに指定できます。

minfilter引数には縮小する際のフィルターを指定し、
magfilter引数には拡大する際のフィルターを指定します。

以下の2つの定数を使います。

D3DTEXF_POINT
最近点フィルタ。
目的のピクセル値に最も近い座標のテクセルを使います。
テクスチャがぼやけるのが嫌な場合などに使います。

D3DTEXF_LINEAR
双線形補間フィルタ。
目的のピクセルを取り囲む 2 x 2 領域のテクセルの重み付けした平均を使います。
なめらかな表示をしたいときに使います。

1. [IN] 変数または、数値 : scid
  スワップチェインID。
  この引数は、背景の指定の場合のみ意味を持ちます。


2. [IN] int : hsid
  形状データを識別するid

  E3DCreateBGで作成した背景に対して処理を行いたい場合は0を指定します。

  ビルボードに対して処理を行いたい場合は-1を指定します。

  スプライトに対して処理を行いたい場合は-2を指定します。

3. [IN] int : partno
  形状データを識別するidを指定します。

  背景の場合は0を指定します。

  ビルボードの場合はビルボードIDを指定します。

  スプライトの場合はスプライトIDを指定します。


4. [IN] int : minfilter
  縮小フィルター

5. [IN] int : magfilter
  拡大フィルター

ver5.0.0.1
E3DGetMotionName モーション 読み込み済みのモーションの名前を取得します。

motname引数には
char motname[256];
で確保したメモリを指定してください。

1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : motid
  モーションを識別するid

3. [OUT] char* : motname
  モーションの名前が代入されます。
ver5.0.0.1
E3DSetMotionName モーション モーションに名前を設定します。

255文字以下(255バイト以下)の名前を設定してください。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : motid
  モーションを識別するid

3. [IN] char* : motname
  モーションの名前を指定します。
  名前の長さは255文字(255バイト)までです。
ver5.0.0.1
E3DGetMaterialNoByName マテリアル マテリアル名からマテリアル番号を取得します。

マテリアル名はRokDeBone2のメインメニューの
「面マテリアル」メニューを押したときに現れるダイアログで確認できます。

ver4.0.0.1以降のRokDeBone2でmqoからデータを読み込んでいる場合には、マテリアル名はメタセコイアの材質名と同じです。

存在しないマテリアル名を渡した場合は、
マテリアル番号には-3が返されます。

1. [IN] int : hsid
  形状データを識別するid

2. [IN] char* : motname
  マテリアルの名前を指定します。
  名前の長さは255文字(255バイト)までです。

3. [OUT] int* : matnoptr
  マテリアルの番号が代入されます。
  存在しない名前を渡した場合は-3が代入されます。

ver5.0.0.1
E3DGetMaterialAlpha マテリアル マテリアルの透明度を取得します。

透明度は0.0から1.0までのfloatです。

1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [OUT] float* : alphaptr
  透明度が代入されます。
  
ver5.0.0.1
E3DGetMaterialDiffuse マテリアル マテリアルの拡散光(diffuse)を取得します。

1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [OUT] E3DCOLOR4UC* : colptr
  diffuseのRGBが代入されます。
  colptr->aは無視されます。
ver5.0.0.1
E3DGetMaterialSpecular マテリアル マテリアルの反射光(specular)を取得します。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [OUT] E3DCOLOR4UC* : colptr
  specularのRGBが代入されます。
  colptr->aは無視されます。
ver5.0.0.1
E3DGetMaterialAmbient マテリアル マテリアルの周囲光(ambient)を取得します。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [OUT] E3DCOLOR4UC* : colptr
  ambientのRGBが代入されます。
  colptr->aは無視されます。
ver5.0.0.1
E3DGetMaterialEmissive マテリアル マテリアルの自己照明(emissiver)を取得します。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [OUT] E3DCOLOR4UC* : colptr
  emissiveのRGBが代入されます。
  colptr->aは無視されます。
ver5.0.0.1
E3DGetMaterialPower マテリアル マテリアルの反射の強さ(power)を取得します。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [OUT] float* : powerptr
  powerが代入されます。
ver5.0.0.1
E3DGetMaterialBlendingMode マテリアル マテリアルの半透明モードを取得します。

modeの値の意味は
0のとき
頂点アルファ値による半透明モードです。

1のとき 
アッドモードです。

2のとき
頂点アルファを考慮したアッドモードです。

1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [OUT] int* : modeptr
  半透明モードが代入されます。
ver5.0.0.1
E3DSetMaterialAlpha マテリアル マテリアルの透明度を設定します。

透明度は0.0fから1.0fで指定します。

マテリアルの変更により
表示オブジェクトの対応する部分の表示が面単位で変化します。

透明度1.0以外のものはE3DRenderのwithalpha引数に1を指定したときに表示されます。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [IN] float : alpha
  透明度。
ver5.0.0.1
E3DSetMaterialDiffuse マテリアル マテリアルの拡散光(diffuse)を設定します。

マテリアルの変更により
表示オブジェクトの対応する部分の表示が面単位で変化します。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [IN] int : setflag
  setflagが0のときは、
  色をcolにセットします。

  setflagが1のときは、
  パーツの色に(col.r/255, col.g/255, col.b/255)を乗算します。

  setflagが2のときは、
  パーツの色にcolを足し算します。

  setflagが3のときは、
  パーツの色からcolを減算します。


4. [IN] E3DCOLOR4UC : col
  指定したい色をcolで指定します。
  col.aは無視されます。
ver5.0.0.1
E3DSetMaterialSpecular マテリアル マテリアルの反射光(specular)を設定します。

マテリアルの変更により
表示オブジェクトの対応する部分の表示が面単位で変化します。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [IN] int : setflag
  setflagが0のときは、
  色をcolにセットします。

  setflagが1のときは、
  パーツの色に(col.r/255, col.g/255, col.b/255)を乗算します。

  setflagが2のときは、
  パーツの色にcolを足し算します。

  setflagが3のときは、
  パーツの色からcolを減算します。


4. [IN] E3DCOLOR4UC : col
  指定したい色をcolで指定します。
  col.aは無視されます。
ver5.0.0.1
E3DSetMaterialAmbient マテリアル マテリアルの周囲光(ambient)を設定します。

マテリアルの変更により
表示オブジェクトの対応する部分の表示が面単位で変化します。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [IN] int : setflag
  setflagが0のときは、
  色をcolにセットします。

  setflagが1のときは、
  パーツの色に(col.r/255, col.g/255, col.b/255)を乗算します。

  setflagが2のときは、
  パーツの色にcolを足し算します。

  setflagが3のときは、
  パーツの色からcolを減算します。


4. [IN] E3DCOLOR4UC : col
  指定したい色をcolで指定します。
  col.aは無視されます。
ver5.0.0.1
E3DSetMaterialEmissive マテリアル マテリアルの自己照明(emissive)を設定します。

マテリアルの変更により
表示オブジェクトの対応する部分の表示が面単位で変化します。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [IN] int : setflag
  setflagが0のときは、
  色をcolにセットします。

  setflagが1のときは、
  パーツの色に(col.r/255, col.g/255, col.b/255)を乗算します。

  setflagが2のときは、
  パーツの色にcolを足し算します。

  setflagが3のときは、
  パーツの色からcolを減算します。


4. [IN] E3DCOLOR4UC : col
  指定したい色をcolで指定します。
  col.aは無視されます。
ver5.0.0.1
E3DSetMaterialPower マテリアル マテリアルの反射の強さ(power)を設定します。

マテリアルの変更により
表示オブジェクトの対応する部分の表示が面単位で変化します。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [IN] int : setflag
  setflagが0のときは、
  powerをそのままセットします。

  setflagが1のときは、
  現在のマテリアルにpowerを乗算します。

  setflagが2のときは、
  現在のマテリアルにpowerを足し算します。

  setflagが3のときは、
  現在のマテリアルからpowerを減算します。


4. [IN] float : power
  反射の強さを指定します。
 
ver5.0.0.1
E3DSetMaterialBlendingMode マテリアル マテリアルの半透明モードを設定します。

マテリアルの変更により
表示オブジェクトの対応する部分の表示が面単位で変化します。

blendmode 0, 1, 2はアルファテストの設定も変更します。
アルファテストの設定を変更したくない場合は
blendmode 100, 101, 102をお使いください。

ver5.0.2.2でモードが4つ増えました。

ver5.1.0.1でモードが2つ増えました。

アルファテストを設定したい場合は
E3DSetMaterialAlphaTestをご使用ください。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [IN] int : blendmode
  0を指定すると
  頂点アルファ値による半透明モードになります。
  アルファテストはオフになります。

  1を指定すると 
  アッドモードになります。
  アルファテストはオンになり8より小さいアルファのときに描画されなくなります(Zバッファにも)。

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


  100を指定すると
  頂点アルファ値による半透明モードになります。
  アルファテストは変更しません。

  101を指定すると 
  アッドモードになります。
  アルファテストは変更しません。

  102を指定すると、
  頂点アルファを考慮したアッドモードになります。
  アルファテストは変更しません。

  103を指定すると乗算モード
  104を指定すると減算モード
  105を指定するとスクリーンモード
  106を指定するとネガ反転モードになります。


  107を指定するとオーバーレイ風合成モード。
  108を指定すると覆い焼き風モードになります。



ver5.0.0.1
ver5.0.2.2で拡張
ver5.1.0.1で拡張
E3DGetTextureFromMaterial マテリアル マテリアルに設定されているテクスチャを取得します。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [OUT] int* : texidptr
  テクスチャのIDが代入されます。
  エラーのときは-1が代入されます。

ver5.0.0.1
E3DSetTextureToMaterial マテリアル マテリアルにテクスチャを設定します。

マテリアルの変更により
表示オブジェクトの対応する部分の表示が面単位で変化します。


テクスチャをセットしても、
UV座標は自動的に生成されません。
動的にテクスチャを設定する場合は、
UV座標もE3DSetUVで設定するか、
もしくは、
あらかじめ、モデルに仮のテクスチャを貼っておいてUV設定しておく必要があります。

1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [IN] int : texid
  テクスチャのIDを指定してください。
ver5.0.0.1
E3DGetMaterialNo マテリアル 面のマテリアル番号を取得します。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [IN] int : faceno
  面を識別する番号を指定してください。

4. [OUT] int* : matnoptr
  マテリアルの番号が代入されます。
ver5.0.0.1
E3DSetMotionKindML モーション ボーンごとに再生するモーションの番号を設定します。

list, notlistはボーンの番号をセットした配列
listに指定した番号とその子供全部に対して再帰的に処理を行う。
notlistには除外したいボーンの内、一番親の番号を記述する。
notlistに記述した番号は、listに記述した番号よりも優先される。
list, notlistには複数の番号を指定できるが、一番最後の要素には0をセットしなければならない。
listの先頭要素に限り-1を指定できる。
-1指定はすべてのボーンに対する処理を表す。

左肩のボーン番号を2、左ひじの番号を3、左手の番号を4、
右肩のボーン番号を12、右ひじの番号を13、右手の番号を14、
手に持っている武器のボーン番号を22として
武器を除く手の部分にモーションを設定したい場合は、

int list[3];
list[0] = 2
list[1] = 12
list[2] = 0

int notlist[2];
notlist[0] = 22
notlist[1] = 0

のようにlist, notlistの配列に値をセットして命令を呼び出す。
2を指定すれば2の子供全部に処理が行われるので3,4を指定する必要はない。
同様に12を指定すれば12の子供全部に処理が行われるので13,14を指定する必要はない。
リストの最後には必ず0を指定する。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : motid
  モーションを識別するid

3. [IN] int* : list
4. [IN] int* : notlist
  設定したいボーン番号と
  設定したくないボーン番号をセットした配列のポインタ。
  詳しくは前記をご覧ください。
ver5.0.0.1
E3DSetMotionFrameNoML モーション ボーンごとに再生するモーションの番号とフレーム番号を設定します。


list, notlistはボーンの番号をセットした配列
listに指定した番号とその子供全部に対して再帰的に処理を行う。
notlistには除外したいボーンの内、一番親の番号を記述する。
notlistに記述した番号は、listに記述した番号よりも優先される。
list, notlistには複数の番号を指定できるが、一番最後の要素には0をセットしなければならない。
listの先頭要素に限り-1を指定できる。
-1指定はすべてのボーンに対する処理を表す。

左肩のボーン番号を2、左ひじの番号を3、左手の番号を4、
右肩のボーン番号を12、右ひじの番号を13、右手の番号を14、
手に持っている武器のボーン番号を22として
武器を除く手の部分にモーションを設定したい場合は、

int list[3];
list[0] = 2
list[1] = 12
list[2] = 0

int notlist[2];
notlist[0] = 22
notlist[1] = 0

のようにlist, notlistの配列に値をセットして命令を呼び出す。
2を指定すれば2の子供全部に処理が行われるので3,4を指定する必要はない。
同様に12を指定すれば12の子供全部に処理が行われるので13,14を指定する必要はない。
リストの最後には必ず0を指定する。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : motid
  モーションを識別するid

3. [IN] int : frameno
  フレーム番号。


4. [IN] int* : list
5. [IN] int* : notlist
  設定したいボーン番号と
  設定したくないボーン番号をセットした配列へのポインタ。
  詳しくは前記をご覧ください。
ver5.0.0.1
E3DSetNextMotionFrameNoML モーション 現在再生しているモーションの後につづけて再生するモーションをボーンごとに設定します。


list, notlistはボーンの番号をセットした配列
listに指定した番号とその子供全部に対して再帰的に処理を行う。
notlistには除外したいボーンの内、一番親の番号を記述する。
notlistに記述した番号は、listに記述した番号よりも優先される。
list, notlistには複数の番号を指定できるが、一番最後の要素には0をセットしなければならない。
listの先頭要素に限り-1を指定できる。
-1指定はすべてのボーンに対する処理を表す。

左肩のボーン番号を2、左ひじの番号を3、左手の番号を4、
右肩のボーン番号を12、右ひじの番号を13、右手の番号を14、
手に持っている武器のボーン番号を22として
武器を除く手の部分にモーションを設定したい場合は、

int list[3];
list[0] = 2
list[1] = 12
list[2] = 0

int notlist[2];
notlist[0] = 22
notlist[1] = 0

のようにlist, notlistの配列に値をセットして命令を呼び出す。
2を指定すれば2の子供全部に処理が行われるので3,4を指定する必要はない。
同様に12を指定すれば12の子供全部に処理が行われるので13,14を指定する必要はない。
リストの最後には必ず0を指定する。

1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : srcmotid
3. [IN] int : nextmotid
4. [IN] int : nextframeno
5. [IN] int : befframeno
  srcmotidのモーションがbefframeフレーム番号に達した後、nextmotidのモーションのnextframenoのフレーム番号にジャンプするように設定されます。
befframeに-1をセットした場合は、srcmotidが最終フレームに達した後にジャンプします。


6. [IN] int* : list
7. [IN] int* : notlist
  設定したいボーン番号と
  設定したくないボーン番号をセットした配列へのポインタ。
  詳しくは前記をご覧ください。

ver5.0.0.1
E3DSetMOAEventNoML モーション モーションアクセラレータのイベント番号をボーンごとに設定します。

この命令を必要な分だけ呼んだ後に1回E3DSetNewPoseMLを呼ぶ必要があります。

list, notlistはボーンの番号をセットした配列
listに指定した番号とその子供全部に対して再帰的に処理を行う。
notlistには除外したいボーンの内、一番親の番号を記述する。
notlistに記述した番号は、listに記述した番号よりも優先される。
list, notlistには複数の番号を指定できるが、一番最後の要素には0をセットしなければならない。
listの先頭要素に限り-1を指定できる。
-1指定はすべてのボーンに対する処理を表す。

左肩のボーン番号を2、左ひじの番号を3、左手の番号を4、
右肩のボーン番号を12、右ひじの番号を13、右手の番号を14、
手に持っている武器のボーン番号を22として
武器を除く手の部分にモーションを設定したい場合は、

int list[3];
list[0] = 2
list[1] = 12
list[2] = 0

int notlist[2];
notlist[0] = 22
notlist[1] = 0

のようにlist, notlistの配列に値をセットして命令を呼び出す。
2を指定すれば2の子供全部に処理が行われるので3,4を指定する必要はない。
同様に12を指定すれば12の子供全部に処理が行われるので13,14を指定する必要はない。
リストの最後には必ず0を指定する。

1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : eventno
  モーションの変化のトリガーとなるイベント番号。

3. [IN] int* : list
4. [IN] int* : notlist
  設定したいボーン番号と
  設定したくないボーン番号をセットした配列へのポインタ。
  詳しくは前記をご覧ください。
ver5.0.0.1
E3DGetMotionFrameNoML モーション 指定したボーンのモーション番号とフレーム番号を取得します。 1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : boneno
  ボーンを識別するID

3. [OUT] int* : motidptr
  モーション番号が代入されます。

4. [OUT] int* : framenoptr
  フレーム番号が代入されます。

ver5.0.0.1
E3DGetNextMotionFrameNoML モーション E3DSetNextMotionFrameNoMLで設定した情報をボーンごとに取得します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : boneno
  ボーンを識別するID

3. [IN] int : motid
  モーションを識別するID

4. [OUT] int* : nextmotidptr
  ジャンプ先のモーション番号が代入されます。

5. [OUT] int* : nextframenoptr
  ジャンプ先のフレーム番号が代入されます。
ver5.0.0.1
E3DSetNewPoseML モーション マルチレイヤーモーションの仕様に従って、新しい姿勢情報をそれぞれのボーンにセットします。
1. [IN] int : hsid
  形状データを識別するID
ver5.0.0.1
E3DGetCurrentBonePos モデル情報 現在のボーンの位置を取得します。
E3DSetNewPose, E3DSetNewPoseMLの結果を使用します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : boneno
  ボーンを識別するID

3. [IN] int : poskind
  poskind = 0 ---> ローカル座標(ボーン変形なし)
  poskind = 1 ---> グローバル座標(ボーン変形あり)
  poskind = 2 ---> ローカル座標(ボーン変形あり)

4. [OUT] D3DXVECTOR3* : posptr
  ボーンの位置が代入されます。

ver5.0.0.1
E3DGetCurrentBoneQ モーション 現在のボーンの姿勢情報を取得します。
E3DSetNewPose, E3DSetNewPoseMLの結果を使用します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。
  E3DGetBoneNoByNameまたは、
  E3DGetPartNoByNameで取得した番号を指定してください。

3. [IN] int : kind
  親の影響を受けたクォータニオンを
  取得する場合は1を指定してください。

  親の影響を受けていないクォータニオンを
  取得する場合は0を指定してください。

  親の影響を受け、
  更に、モデル全体の向きの影響を受けたクォータニオンを取得
  するには2を指定してください。


4. [IN, OUT] int : qid
  クォータニオンを識別する番号。
  E3DCreateQで取得した番号を指定してください。

  qidで識別されるクォータニオンの内容に、
  指定したボーンのクォータニオンの内容を代入します。
ver5.0.0.1
E3DChkBumpMapEnable 描画パラメータ ハードウェアがバンプマップを表示可能かどうかを調べます。

E3DInitよりも後で呼び出してください。
1. [OUT] int* : flagptr
  バンプマップ表示可能の場合は0以外が、
  表示不可能のときは0が代入されます。
ver5.0.0.1
E3DEnableBumpMap 描画パラメータ バンプマップ表示を使用するかどうかを設定します。 1. [IN] int : flag
  0を指定するとバンプマップを表示しません。
  1を指定するとハードウェアに能力がある場合に限り、バンプマップを表示可能にします。
ver5.0.0.1
E3DConvHeight2NormalMap テクスチャ 白黒の高さマップの画像データを、E3Dで使用可能な法線マップに変換します。 1. [IN] char* : hmapname
  白黒画像のファイルのパス。

2. [IN] char* : nmapname
  法線マップのファイルのパス。
  出力ファイル名。BMPのみ有効。

3. [IN] float : hparam
  バンプマップの高さのパラメータ。
  値が大きいほど段差がきつくなります。
ver5.0.0.1
E3DSetBumpMapToMaterial マテリアル E3DCreateTextureで作成したテクスチャをバンプマップに設定します。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [IN] int : texid
  テクスチャのIDを指定してください。

  -1を指定するとバンプマップが無効になります。

ver5.0.0.1
E3DGetMOATrunkInfo モーション MOAの分岐元モーションの情報を取得します。

trunkinfoptr引数にはusercoef.hで定義されている
MOATRUNKINFO構造体へのポインタを渡してください。

trunkinfo.idlingはアイドリングモーションかどうかを0と1で表します。
trunkinfo.ev0idleはイベント番号0でアイドリングに戻すかどうかを表します。
trunkinfo.comidは共通分岐イベント番号です。
trunkinfo.notcomnumは共通分岐禁止イベント番号の個数を表します。
trunkinfo.notcomidは共通分岐禁止イベント番号です。notcomnum個だけのintがセットされている配列のポインタです。
trunkinfo.branchnumは分岐先モーションがいくつあるかを表します。

この命令に渡すmotidはE3DGetMOAInfoで取得したIDを使用してください。

motid 0 (補間モーション)を指定すると
trunkinfoにはすべて0が代入されます。

1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : motid
  モーションを識別するID

3. [OUT] MOATRUNKINFO* : trunkinfoptr
  分岐元モーションの情報が代入されます。
ver5.0.0.1
E3DGetMOABranchInfo モーション MOAの分岐先モーションの情報を取得します。

branchnumにはE3DGetMOATrunkInfoで取得した
trunkinfo.branchnum を指定してください。

branchinfoptr引数にはusercoef.hで定義されているMOABRANCHINFO構造体の配列へのポインタを渡してください。
branchinfoptr = (MOABRANCHINFO*)malloc( sizeof( MOABRANCHINFO ) * branchnum );
で作成したポインタを渡してください。

branchinfo.motidは分岐先モーションのモーションID。
branchinfo.eventnoはイベント番号。
branchinfo.frameno1は分岐元フレーム番号。
branchinfo.frameno2は分岐先フレーム番号。
branchinfo.notfuは補間なしで変化させるかどうか。

この命令に渡すmotidはE3DGetMOAInfoで取得したIDを使用してください。

1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : motid
  モーションを識別するID

3. [OUT] MOABRANCHINFO* : branchinfoptr
  分岐先モーションの情報が代入されます。
  前述の方法でmallocした配列を指定してください。

4. [IN] int : branchnum
  branchinfoptrをmallocしたときのbranchnumを指定してください。

5. [OUT] int* : getnum
  分岐先モーション情報をいくつ取得したかが代入されます。

ver5.0.0.1
E3DSetMOABranchFrame1 モーション MOAの分岐の分岐元フレーム番号情報を設定します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : tmotid
  分岐元モーションを識別するID

3. [IN] int : bmotid
  分岐先モーションを識別するID

4. [IN] int : frame1
  分岐の分岐元フレーム番号
  -1指定は、いつでも分岐することを表します。


E3DSetMOABranchFrame2 モーション MOAの分岐の分岐先フレーム番号情報を設定します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : tmotid
  分岐元モーションを識別するID

3. [IN] int : bmotid
  分岐先モーションを識別するID

4. [IN] int : frame2
  分岐の分岐先フレーム番号
E3DSetDispSwitch 描画パラメータ ディスプレイスイッチのアニメーションの設定をします。 1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : boneno
  ボーンを識別するパーツの番号

3. [IN] int : motid
  モーションを識別するID

4. [IN] int : switchid
  スイッチの番号。0から99

5. [IN] int : frameno
  モーションのフレーム番号

6. [IN] int : switchflag
  スイッチの状態。
  0がオフ。1がオン。

ver5.0.0.1
E3DQtoEuler 算術 クォータニオンの姿勢をオイラー角に変換します。
回転の順番はZ軸、X軸、Y軸です。
1. [IN] int : qid
  クォータニオンを識別するID

2. [OUT] D3DXVECTOR3* : newdegptr
  オイラー角が代入されます。

3. [IN] D3DXVECTOR3 : olddeg
  前回E3DQtoEulerした結果を指定します。
  計算時にolddegに一番近い角度をnewdegに代入します。
  初回時には0を指定してください。

ver5.0.0.1
E3DEnablePhongEdge 描画パラメータ 色P時に輪郭線を表示するかを指定します。 1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : flag
  輪郭線を表示するとき1、しないとき0

ver5.0.0.1
E3DSetPhongEdge0Params 描画パラメータ 色P時の輪郭線の色と幅と半透明モードを設定します。

半透明の輪郭線はE3DRenderのwithalpha引数に1を指定したときに表示されます。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] E3DCOLOR4UC : col
  輪郭線の色をRGBで指定します。
  col.aは無視されます。

5. [IN] float : width
  輪郭線の幅をfloatで指定します。

6. [IN] int : blendmode
  輪郭線の半透明モードを指定します。
  0を指定すると頂点アルファによる半透明
  1を指定するとアッドモード
  2を指定すると頂点アルファを考慮したアッドモード
  3を指定すると不透明
  になります。

7. [IN] float : alpha
  輪郭線の頂点アルファを指定します。
  blendmodeで0または2を指定したときに
  意味を持ちます。
  0.0から1.0の間のfloatを指定してください。

ver5.0.0.1
E3DGetDispSwitch モーション ディスプレイスイッチを取得します。
E3DSetNewPose, E3DSetNewPoseMLの結果を利用します。

dispswitch変数は
int dispswitch[DISPSWITCHNUM];
で確保してからこの命令に渡してください。

DISPSWITCHNUMはusercoef.hで定義されています。
(スイッチの総数です)

スイッチがオフのとき0がオンのときは0以外が代入されます。

例えばスイッチ3がオンのときは
dispswitch[ 3 ] に0以外が代入されます。
1. [IN] int : hsid
  形状データを識別するID

2. [OUT] int* : dispswitch
  スイッチの状態が代入されます。
  詳しくは前記をご覧ください。

3. [IN] int : leng
  dispswitch配列を作成したときの
  要素数を指定します。
  通常DISPSWITCHNUMを指定します。
ver5.0.0.1
E3DFreeThread スレッド管理 スレッドのリソースを解放します。
この命令を実行が終わったスレッドに対して呼ぶことで
4098回の呼び出し回数制限を緩和することが出来ます。
ただしこの命令を使用しても一度にアクティブにできる
スレッド命令は4098個のままです。
1. [IN] int : threadid
  スレッドを識別するID
ver5.0.0.1
E3DLoadSigFileAsGroundThread 地面 スレッドを作成してE3DLoadSigFileAsGroundを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が代入されます。

threadidは
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は全部で4098回まで
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)
E3DFreeThreadの説明もご覧ください。


スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。


E3DLoadSigFileAsGroundの説明もお読みください。
1. [IN] char* : fname
  *.sig のパス文字列。

2. [IN] int : adjustuvflag
  UV値を正規化するかどうかのフラグ。
  正規化する場合は1を指定。
  しない場合は0を指定。
  2を指定すると0.0から1.0の間にクランプします。


3. [IN] float : mult
  読み込み倍率を指定してください。
  等倍は1.0。

4. [OUT] int* : threadidptr
  作成したスレッドを識別するIDが代入されます。
ver5.0.0.1
ver5.0.2.6で拡張
E3DLoadSigFileAsGroundFromBufThread 地面 スレッドを作成してE3DLoadSigFileAsGroundFromBufを実行します。

作成したスレッドを識別するためのIDが
threadidに代入されます。

スレッドの作成に失敗した場合には、
threadidにマイナスの値が代入されます。

threadidは
E3DChkThreadWorkingに使用することが
出来ます。

スレッド作成関数は全部で4098回まで
呼ぶことが出来ます。
(E3DChkThreadWorkingを除く)
E3DFreeThreadの説明もご覧ください。


スレッドが終了すると、
E3DChkThreadWorkingで取得される
returnval1に、
モデルデータを識別するhsidが代入されます。


E3DLoadSigFileAsGroundFromBufの説明もお読みください。
1. [IN] char* : resdir
  テクスチャーのあるフォルダ のパス文字列。
  最後に"\\"が必要。

2. [IN] char* : buf
  バッファのポインタ

3. [IN] int : bufleng
  バッファの中のデータの長さ

4. [IN] int : adjustuvflag
  UV値を正規化するかどうかのフラグ。
  正規化する場合は1を指定。
  しない場合は0を指定。
  2を指定すると0.0から1.0の間にクランプします。

5. [IN] float : mult
  読み込み倍率を指定してください。
  等倍は1.0。
  

6. [OUT] int* : threadidptr
  作成したスレッドを識別するIDが代入されます。
ver5.0.0.1
ver5.0.2.6で拡張
E3DSetLightIdOfBumpMap ライト バンプマップを照らす光源を1つだけ選択します。

平行光源でも点光源でもOKです。
1. [IN] int : lid
  ライトを識別するID
ver5.0.0.1
E3DSetSpriteUV スプライト スプライトのUVを設定します。
1. [IN] int : spid
  スプライトを識別するID

2. [IN] float : startu
  U方向の表示開始点を0から1で指定します。

3. [IN] float : endu
  U方向の表示終了点を0から1で指定します。

4. [IN] float : startv
  V方向の表示開始点を0から1で指定します。

5. [IN] float : endv
  V方向の表示終了点を0から1で指定します。

ver5.0.0.1
E3DCreateRenderTargetTexture テクスチャ レンダリング可能なテクスチャを作成します。

この命令が成功するとスワップチェインIDとテクスチャIDが取得できます。

テクスチャのサイズは2の乗数にしてください。

消費するビデオメモリ量は
texsize.cx * texsize.cy * ( 4 + 2 ) バイトです。


メモリ不足などでこの命令が失敗した場合には
エラーにならずにokflagに0が代入されます。
失敗した場合はテクスチャサイズを小さくするなどして
再試行してみてください。

1. [IN] SIZE : texsize
  texsize.cx, texsize.cyにテクスチャのサイズを指定してください。詳しくは前記をご覧ください。

2. [IN] int : fmt
  作成したいテクスチャのフォーマットを指定します。
D3DFMT_で始まる
  定数を使用してください。

3. [OUT] int* : scidptr
  スワップチェインIDが代入されます。

4. [OUT] int* : texidptr
  テクスチャIDが代入されます。

5. [OUT] int* : okflagptr
  成功した場合は1が
  失敗した場合は0が代入されます。

6. [IN] int : needz
  needzに0を指定した場合はZバッファを作成しません。
  作成したレンダーターゲットテクスチャをE3DBlendRTTextureでしか使わない場合などはneedzを0に出来ます。
  デフォルト値は1。

ver5.0.0.1
ver5.5.0.8で拡張

E3DDestroyRenderTargetTexture テクスチャ レンダーターゲットテクスチャを破棄します。
1. [IN] int : scid
  E3DCreateRenderTargetTextureで
  取得したスワップチェインIDを指定します。

2. [IN] int : texid
  E3DCreateRenderTargetTextureで
  取得したテクスチャIDを指定します。
ver5.0.0.1
E3DSetDSFillUpMode モーション 補間時に補間前のモーションのスイッチ状態を表示するか、もしくは補間後のモーションのスイッチ状態を表示するかを選びます。

MOA専用です。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : mode
  0を指定すると補間前のモーションの
  スイッチ状態を表示します。
  1を指定すると補間後のモーションの
  スイッチ状態を表示します。


ver5.0.0.1
E3DSetTexFillUpMode モーション 補間時に補間前のモーションのテクスチャアニメの状態を表示するか、もしくは補間後のモーションのテクスチャアニメの状態を表示するかを選びます。

MOA専用です。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : mode
  0を指定すると補間前のモーションの
  テクスチャを表示します。
  1を指定すると補間後のモーションの
  テクスチャを表示します。
ver5.0.0.1
E3DSetShadowBias 描画パラメータ 影をレンダリングする際のZバッファのバイアスを設定します。
一般に大きい値を設定すればマッハバンド(縞模様)が消えます。

1. [IN] float : bias
  Zバッファの誤差を緩和するためのバイアスを指定します。
  デフォルト値は0.005です。
ver5.0.0.1
E3DRenderWithShadow 描画 影付きのシーンを一括レンダリングします。
内部でE3DChkInView、E3DBeginScene、E3DEndSceneも
呼ばれます。

全ての不透明を描画後、半透明が描画されます。

hsidarray(配列)にレンダリングしたいhsidを格納してから呼び出します。
1. [IN] int : scid
  影付きのシーンをレンダリングするための
  スワップチェインIDを指定してください。

2. [IN] int : rtscid
3. [IN] int : rttexid
  シャドウマップ用のE3DCreateRenderTargetTexture
  で取得したscidとtexidを指定してください。

4. [IN] int* : hsidarray
  描画したいhsidを配列に格納してください。
  ビルボードを描画したいときはhsidに-1を
  格納してください。


5. [IN] int : num
  hsidarrayに何個のhsidを格納したかを指定してください。

6. [IN] int : skipflag
  skipflagに1を指定すると
  画面のバッファのクリアと背景の描画を
  スキップします。

  通常は0.
  BeginSceneとEndSceneはスキップしません。

  E3DBeginScene scid1
    前に描画したいものをレンダー
  E3DEndScene
  E3DRenderWithShadow (skipflag = 1)
  E3DBeginScene scid1, 1
    後に描画したいものをレンダー
  E3DEndScene
  のように描画してください。


ver5.0.0.1
E3DChkShadowEnable 描画パラメータ ハードウェアで影の描画が出来るかどうかを調べます。 1. [OUT] int* : flagptr
  影の描画が出来る時は0以外が
  出来ないときは0が代入されます。
ver5.0.0.1
E3DEnableShadow 描画パラメータ 影の描画をオンまたはオフにします。 1. [IN] int : flag
  1をセットすると影の描画が可能な時は描画するようにします。
  0をセットすると影の描画は行わないようにします。
ver5.0.0.1
E3DCheckRTFormat テクスチャ E3DCreateRenderTargetTextureで作成できるフォーマットを調べます。
1. [IN] int : fmt
  調べたいフォーマットを指定します。
D3DFMT_で始まる
  定数を使用してください。

2. [OUT] int* : okflagptr
  指定したフォーマットが使用可能な時は0以外が
  使用不可な時は0が代入されます。

ver5.0.0.1
E3DSetShadowDarkness 描画パラメータ 影の暗さを設定します。

darknessに指定した係数にAmbientを掛けたものが
影の色となります。

デフォルト値は1.0です。
0に近づくほど暗くなります。

1. [IN] float : darkness
  0以上のfloat。
  アンビエントに掛け算して影の色とする。
ver5.0.0.1
E3DRenderBatch 描画 E3DRenderのバッチ版。hsidをまとめて描画することにより高速化。

内部でE3DChkInView、E3DBeginScene、E3DEndSceneも
呼ばれます。

全ての不透明を描画後、半透明が描画されます。
1. [IN] int : scid
  スワップチェインIDを指定してください。

2. [IN] int* : hsidarray
  描画したいhsidを格納した配列。

3. [IN] int : num
  hsidarrayに何個のhsidをセットしたか。

4. [IN] int : needchkinview
  内部でChkInViewを呼ぶかどうかのフラグ。

5. [IN] int : skipflag
  0以外をセットすると
  画面バッファのクリアと背景の描画をスキップします。
  
  BeginSceneとEndSceneはスキップしません。
  デフォルト値は0。
ver5.0.0.1
E3DSetVertPosBatch モデル情報 E3DSetVertPosのバッチ版。まとめて高速化。

あたり判定データの更新はされません。
1. [IN] int : hsid
  形状データを識別するID。

2. [IN] int : partno
  パーツを識別するID。

3. [IN] int* : vertnoarray
  位置を設定したい頂点の番号を配列にセットしてください。

4. [IN] int : vnum
  何個の頂点の位置を設定するかをセットしてます。
  vertnoarrayとvertarrayの要素数をセットしてください。

5. [IN] D3DXVECTOR3* : vertarray
  頂点の座標を配列にセットしてください。




ver5.0.0.1
E3DSetShadowMapLightDir 描画パラメータ 影用の平行光源の向きを設定します。 1. [IN] D3DXVECTOR3 : dir
  平行光源の向きをベクトルで指定します。
ver5.0.0.1
E3DRenderBatchMode 描画 E3DRenderBatchの拡張版。
hsidごとに不透明のみを描画するか
半透明のみを描画するか
不透明と半透明の両方を描画するかを指定できます。

適切に設定することで描画速度が速くなります。


hsidarrayにはパーティクルのIDを指定することもできます。
パーティクルはmode 2のみ有効です。
パーティクルをhsidarrayに含める場合はこの命令を呼ぶ前に
onlyupdate引数を1にしてE3DRenderParticleを呼んでおく必要があります。


1. [IN] int : scid
  スワップチェインIDを指定してください。

2. [IN] int* : hsidarray
  描画したいhsidを格納した配列。

3. [IN] int : num
  hsidarrayに何個のhsidをセットしたか。

4. [IN] int : needchkinview
  内部でChkInViewを呼ぶかどうかのフラグ。

5. [IN] int : skipflag
  0以外をセットすると
  画面バッファのクリアと背景の描画をスキップします。
  
  BeginSceneとEndSceneはスキップしません。
  デフォルト値は0。

6. [IN] int* : modearray
  描画モードを格納した配列。
  hsidarrayと同じ長さの配列。
  配列の要素に1を指定すると不透明のみ
  2を指定すると半透明のみ
  3を指定すると両方を描画します。

ver5.0.0.1
E3DGlobalToLocal 算術 グローバル座標系からキャラクターのローカル座標系への変換。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] D3DXVECTOR3 : srcpos
  変換前の座標を指定します。

3. [OUT] D3DXVECTOR3* : dstposptr
  変換後の座標が代入されます。

ver5.0.0.1
E3DLocalToGlobal 算術 キャラクターのローカル座標系からグローバル座標系への変換。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] D3DXVECTOR3 : srcpos
  変換前の座標を指定します。

3. [OUT] D3DXVECTOR3* : dstposptr
  変換後の座標が代入されます。

ver5.0.0.1
E3DSetShadowMapMode 描画パラメータ シャドウマップのモードを設定します。

モード0を指定するとLiSPSMの方法で
E3DSetShadowMapLightDirを呼び出すだけで自動的に
適切なシャドウマップを作成します。

モード1を指定するとE3DSetShadowMapCameraと
E3DSetShadowMapProjOrthoを使用する
マニュアル設定のモードになります。

この命令を呼び出さなかった場合は
モード0が適用されます。
1. [IN] int : mode
  モード(0または1)を指定します。
  詳しくは前記をご覧ください。
ver5.0.0.1
E3DSetShadowMapCamera 描画パラメータ シャドウマップを作成する際のカメラの位置を設定します。
影を落とす際のライトの位置と同じ意味です。
1. [IN] D3DXVECTOR3 : pos
  カメラの位置を指定します。

2. [IN] D3DXVECTOR3 : target
  カメラの注視点を指定します。

3. [IN] D3DXVECTOR3 : upvec
  カメラの上方向ベクトルを
  指定します。
  通常は( 0.0, 1.0, 0.0 )を指定します。
ver5.0.0.1
E3DSetShadowMapProjOrtho 描画パラメータ シャドウマップを作成する際のプロジェクションを設定します。
どのくらいの範囲のシーンをシャドウマップにするかが決定されます。
1. [IN] int : rttexid
  E3DCreateRenderTargetTextureで作成したシャドウマップ用のテクスチャIDを渡します。

2. [IN] float : near
  視野内のカメラから一番近い距離を指定します。
  あまり小さいとZバッファの精度が悪くなります。

3. [IN] float : far
  視野内のカメラから一番遠い距離を指定します。
  あまり大きいとZバッファの精度が悪くなります。

4. [IN] float : viewsize
  正射影のビューのボリュームサイズを指定します。
ver5.0.0.1
E3DLoadTextureFromBuf テクスチャ 作成済みのテクスチャにバッファから画像ファイルを読み込みます。

テクスチャの内容を頻繁に更新したいときに
この命令を使えばテクスチャの作成と破棄を繰り返さなくても
すみます。

ループの外で1回E3DCreateTextureなどでテクスチャを作っておき
ループ中でこのE3DLoadTextureFromBufを呼び出すことを想定しています。

1. [IN] int : texid
  作成済みのテクスチャを識別するID

2. [IN] char* : buf
  バッファのポインタ
  ファイルのイメージがバッファに入っていると
  想定します。

3. [IN] int : bufleng
  バッファの中のデータの長さ(バイト)

4. [IN] int : transparent
  透過情報を指定します。

  texidを取得するときのテクスチャ作成命令に
  指定したのと同じtransparentを指定してください。

ver5.0.0.1
E3DSetShadowMapInterFlag 描画パラメータ シャドウマップにパーツを含めるかどうかのフラグを設定します。

シャドウマップモード0用です。

フラグには
usercoef.hで定義されているSHADOWIN_*を指定します。

SHADOWIN_PROJのときは
パーツの一部分でも視野内に入っている場合には
パーツ全体がシャドウマップに含まれるようにします。
キャラクターデータのデフォルト値です。

SHADOWIN_ALWAYSのときは
視野内に入っているかどうかにかかわらず
必ずシャドウマップにパーツ全体が含まれるようにします。
シャドウマップに入るパーツが広い範囲に散らばれば散らばるほど
影の品質は悪くなります。
ですのでシャドウマップに入れるかどうかを動的に判定し、
必要がなくなったら
SHADOWIN_PROJやSHADOWIN_NOTに戻すことを推奨します。

SHADOWIN_NOTのときは
シャドウマップに入れるかどうかをE3D側で制御しません。
地面などの大きいオブジェクト用のモードです。
地面データのデフォルト値です。

ver5.2.2.6よりSHADOWIN_EXCLUDEが追加されました。
SHADOWIN_EXCLUDEを指定した場合は
シャドウマップから指定パーツを除外します。


1. [IN] int : hsid
  形状データを識別するID。

2. [IN] int : partno
  パーツを識別するID。
  -1を指定すると全てのパーツに対し処理を行います。

3. [IN] int : flag
  SHADOWIN_ではじまる定数を指定します。
  詳しくは前記をご覧ください。

ver5.0.0.1
ver5.2.2.6で拡張
E3DSetMaterialAlphaTest マテリアル マテリアルごとにアルファテストのオンオフを設定できます。

E3DSetMaterialBlendingModeで0、1、2の値をセットしている場合はアルファテストも自動的に設定されるようになっています。
自動設定させたくない場合はblendmode 100、101、102を使用するか、もしくはE3DSetMaterialBlendingModeの後で
E3DSetMaterialAlphaTestを呼び出してください。

アルファテストをオンにした場合は
アルファの値が閾値よりも小さい場合に描画されなくなります。
(Zバッファにも描画されなくなります。)

1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [IN] int : alphatest0
  不透明を描画時にアルファテストする場合は1を
  しない場合は0を指定します。

4. [IN] int : alphaval0
  不透明時のアルファテストのアルファの閾値。
  (0から255)

5. [IN] int : alphatest1
  半透明を描画時にアルファテストする場合は1を
  しない場合は0を指定します。

6. [IN] int : alphaval1
  半透明時のアルファテストのアルファの閾値。
  (0から255)

ver5.0.0.1
E3DTransformBillboard 描画準備 ビルボードの視野内判定と位置計算とソートを行います。

デフォルト状態のE3DRenderBillboardでは
これらの描画準備の計算と描画の処理がいっぺんに行われていました。
そのためあたり判定は描画の後にしなくてはならず、
実際の描画と判定が1フレームずれるという問題がありました。

この問題を解決するためにこの命令を追加しました。
この命令を呼び出したあとビルボードの位置などに変更がない場合は、E3DRenderBillboardのtransskip引数に1を設定します。
そうすることで2度同じ描画準備の計算を行うことを防ぎます。


E3DTransformBillboard
あたり判定
E3DRenderBillboard (transskip = 1)

のように使ってください。

引数なし ver5.0.0.1
E3DGetVersion バージョン easy3d.dllのバージョンを取得します。 1. [OUT] int* : verptr
  バージョンが代入されます。
ver5.0.0.1
E3DChkVertexShader 描画パラメータ 実行マシンの頂点シェーダーのバージョンを取得します。 1. [OUT] int* : verptr
  バージョンが代入されます。
  ver1.1のときは11が代入され
  ver2.0以上の時は20が代入されます。
  頂点シェーダーがない場合は0が代入されます。
ver5.0.0.1
E3DSetToon0Params 描画パラメータ COL_TOON0を指定したときの
トゥーンの影の付き方を指定します。

この関数の仕様は将来変更になる可能性が高いです。

darkrate, brightrateは、暗い色、明るい色の色値を制御するパラメータ。
diffuseに掛け算されて使用されます。
darkdeg, brightdegは、暗い色、明るい色の大きさを制御するパラメータ。
これらのパラメータは、角度(度)で、指定します。
ライトと面の法線との角度です。
ライトと面の法線との角度をdegnlとすると、
0 < degnl < brightdeg の部分が明るい色になります。
brightdeg < degnl < darkdeg の部分が通常の色になります。
darkdeg < degnl < 90 の部分が暗い色になります。
90 < degnl < 180 の部分は、常に、暗い色になります(シェーダーのパラメータが持てる値の範囲に制限があるため)
ですので、darkdegには、brightdegより、大きい値を指定してください。
darkdeg, brightdegには、0.0から90.0の値を指定してください。
darkdeg, brightdegのデフォルト値は、それぞれ、66.4、25.8です。

(ここで言うライトの向きとは、頂点から、ライトの光源への向きです。)

partnoで、指定したパーツにだけ、設定することが出来ます。
-1を指定すると、すべてのパーツに設定されます。



1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別するid

3. [IN] TOON0PARAMS : toon0
  トゥーンのパラメータ。

ver5.0.0.1
E3DGetMaterialNum マテリアル モデルデータの色P用のマテリアルの数を取得します。 1. [IN] int : hsid
  形状データを識別するid

2. [OUT] int* : numptr
  色P用のマテリアルの数が代入されます。



ver5.0.0.4
E3DGetMaterialInfo マテリアル 色P用のマテリアル情報を一括取得します。

MATERIALINFO構造体はusercoef.hで定義されています。

以下にMATERIALINFOのメンバの説明を書きます。
materialnoはマテリアル番号。
nameはマテリアル名。
alphaは透明度。
diffuseは拡散光。
specularは反射光。
ambientは周囲光。
emissiveは自己照明。
powerは反射の強さ。

arraylengにはE3DGetMaterialNumで取得したマテリアルの数をセットしてください。

infoptrは
infoptr = (MATERIALINFO*)malloc( sizeof( MATERIALINFO) * arrayleng );
で作成したポインタを渡してください。

diffuse.a, specular.a, ambient.a, emissive.aには
常に255が代入されます。


1. [IN] int : hsid
  形状データを識別するid

2. [OUT] MATERIALINFO* : infoptr
  情報を格納する構造体へのポインタ。
  作成方法は前記をご覧ください。

3. [IN] int : arrayleng
  infoptrを作成したときの要素数を指定してください。

4. [OUT] int* : getnumptr
  infoptrにいくつの要素が代入されたかがセットされます。

ver5.0.0.4
E3DGetToon1MaterialNum マテリアル 色ト(COL_TOON1)用のマテリアルの数を取得します。

トゥーンマテリアルとは通常のマテリアルとは異なります。
RokDeBone2の「トゥ」ボタンを押したときに出てくるダイアログに表示されているマテリアルのことです。
一回もトゥーン表示したことが無い状態でこの命令を呼ぶと、マテリアル数には0が返ってきます。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  表示用パーツを識別するid

3. [OUT] int* : numptr
  COL_TOON1用のマテリアルの数が代入されます。

ver5.0.0.4
E3DGetToon1MaterialInfo マテリアル 色ト(COL_TOON1)用のマテリアル情報を取得します。

TOON1MATERIALINFO構造体はusercoef.hで定義されています。

以下にTOON1MATERIALINFOのメンバの説明を書きます。

nameはマテリアルの名前。
ambientは暗い所の色。
specularはハイライト部分の色
diffuseはambient,specular以外の部分の色。
edgevalidは輪郭線を表示するかどうかの0か1。
edgecol0は輪郭線の色。
edgewidthは輪郭線の幅。

arraylengにはE3DGetToon1MaterialNumで取得したマテリアルの数をセットしてください。

infoptrは
infoptr = (TOON1MATERIALINFO*)malloc( sizeof( TOON1MATERIALINFO) * arrayleng );
で作成したポインタを渡してください。

diffuse.a, specular.a, ambient.a, edgecol0.aには
常に255が代入されます。


1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  表示パーツを識別するid

3. [OUT] TOON1MATERIALINFO* : infoptr
  情報を格納する構造体へのポインタ。
  作成方法は前記をご覧ください。

4. [IN] int : arrayleng
  infoptrを作成したときの要素数を指定してください。

5. [OUT] int* : getnumptr
  infoptrにいくつの要素が代入されたかがセットされます。
ver5.0.0.4
E3DSetJointInitialPos モデル情報 ジョイント(ボーン)の初期位置をローカル座標系で設定します。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : jointno
  ジョイントを識別するパーツのid

3. [IN] D3DXVECTOR3 : pos
  ジョイントの位置をローカル座標系で指定します。

4. [IN] int : calcflag
  頂点の影響度の再計算をするときは1を、しないときは0を指定します。

5. [IN] int : excludeflag
  calcflagに1を指定したときのみ意味を持ちます。
  1を指定するとE3DSetValidFlagで無効にしているパーツの影響度は再計算しません。
  0を指定すると無効にしているパーツも全て再計算の対象になります。

ver5.0.0.5
E3DSetVertexDiffuse モデル情報 sigモデルの拡散色を頂点単位でセットする関数です。

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

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


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

メタセコイアの材質単位で色を変えたい場合は
「マテリアル」グループの関数をご覧ください。

1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別するID。
  -1を指定すると全てのパーツの色を設定できます。

3. [IN] int : vertno
  指定した頂点番号の色をセットします。
  -1をセットした場合には
  partnoで指定したパーツ全体の色の設定をします。


4. [IN] E3DCOLOR4UC : col
  指定したい色を(col.r, col.g, col.b)で指定します。

  setflagに乗算を指定した場合は、
  各成分に、r/255, g/255, b/255を乗算します。

  col.aは無視されます。

5. [IN] int : setflag
  setflagが0のときは、
  パーツの色をcolにセットします。

  setflagが1のときは、
  パーツの色に(col.r/255, col.g/255, col.b/255)を乗算します。

  setflagが2のときは、
  パーツの色にcolを足し算します。

  setflagが3のときは、
  パーツの色からcolを減算します。


ver5.0.0.6
E3DSetVertexAmbient モデル情報 sigモデルの周囲光を頂点単位でセットする関数です。

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

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



メタセコイアの材質単位で色を変えたい場合は
「マテリアル」グループの関数をご覧ください。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別するID。
  -1を指定すると全てのパーツの色を設定できます。

3. [IN] int : vertno
  指定した頂点番号の色をセットします。
  -1をセットした場合には
  partnoで指定したパーツ全体の色の設定をします。


4. [IN] E3DCOLOR4UC : col
  指定したい色を(col.r, col.g, col.b)で指定します。

  setflagに乗算を指定した場合は、
  各成分に、r/255, g/255, b/255を乗算します。

  col.aは無視されます。

5. [IN] int : setflag
  setflagが0のときは、
  パーツの色をcolにセットします。

  setflagが1のときは、
  パーツの色に(col.r/255, col.g/255, col.b/255)を乗算します。

  setflagが2のときは、
  パーツの色にcolを足し算します。

  setflagが3のときは、
  パーツの色からcolを減算します。

ver5.0.0.6
E3DSetVertexSpecular モデル情報 sigモデルの反射光を頂点単位でセットする関数です。

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

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



メタセコイアの材質単位で色を変えたい場合は
「マテリアル」グループの関数をご覧ください。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別するID。
  -1を指定すると全てのパーツの色を設定できます。

3. [IN] int : vertno
  指定した頂点番号の色をセットします。
  -1をセットした場合には
  partnoで指定したパーツ全体の色の設定をします。


4. [IN] E3DCOLOR4UC : col
  指定したい色を(col.r, col.g, col.b)で指定します。

  setflagに乗算を指定した場合は、
  各成分に、r/255, g/255, b/255を乗算します。

  col.aは無視されます。

5. [IN] int : setflag
  setflagが0のときは、
  パーツの色をcolにセットします。

  setflagが1のときは、
  パーツの色に(col.r/255, col.g/255, col.b/255)を乗算します。

  setflagが2のときは、
  パーツの色にcolを足し算します。

  setflagが3のときは、
  パーツの色からcolを減算します。

ver5.0.0.6
E3DSetVertexEmissive モデル情報 sigモデルの自己照明を頂点単位でセットする関数です。

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

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



メタセコイアの材質単位で色を変えたい場合は
「マテリアル」グループの関数をご覧ください。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別するID。
  -1を指定すると全てのパーツの色を設定できます。

3. [IN] int : vertno
  指定した頂点番号の色をセットします。
  -1をセットした場合には
  partnoで指定したパーツ全体の色の設定をします。


4. [IN] E3DCOLOR4UC : col
  指定したい色を(col.r, col.g, col.b)で指定します。

  setflagに乗算を指定した場合は、
  各成分に、r/255, g/255, b/255を乗算します。

  col.aは無視されます。

5. [IN] int : setflag
  setflagが0のときは、
  パーツの色をcolにセットします。

  setflagが1のときは、
  パーツの色に(col.r/255, col.g/255, col.b/255)を乗算します。

  setflagが2のときは、
  パーツの色にcolを足し算します。

  setflagが3のときは、
  パーツの色からcolを減算します。

ver5.0.0.6
E3DSetVertexSpecularPower モデル情報 sigモデルの反射の強さを頂点単位でセットする関数です。

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

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



メタセコイアの材質単位で色を変えたい場合は
「マテリアル」グループの関数をご覧ください。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別するID。
  -1を指定すると全てのパーツの色を設定できます。

3. [IN] int : vertno
  指定した頂点番号の色をセットします。
  -1をセットした場合にはパーツ全体の色の設定をします。


4. [IN] float : power
  power の値をsetflagに基づいて、
  現在の色に対して処理を行います。

5. [IN] int : setflag
  setflagが0のときは、
  指定した値をセットします。

  setflagが1のときは、
  現在の値に指定した値を乗算します。

  setflagが2のときは、
  現在の値に指定した値を足し算します。

  setflagが3のときは、
  現在の値から指定した値を減算します。


ver5.0.0.6
E3DGetVertexDiffuse モデル情報 sigモデルの拡散色を頂点単位で取得します。 1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別するID。

3. [IN] int : vertno
  指定した頂点番号の色を取得します。

4. [OUT] E3DCOLOR4UC* : colptr
   指定した頂点の色が代入されます。
   colptr->aは無視されます。

ver5.0.0.6
E3DGetVertexAmbient モデル情報 sigモデルの周囲光を頂点単位で取得します。 1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別するID。

3. [IN] int : vertno
  指定した頂点番号の色を取得します。

4. [OUT] E3DCOLOR4UC* : colptr
   指定した頂点の色が代入されます。
   colptr->aは無視されます。

ver5.0.0.6
E3DGetVertexSpecular モデル情報 sigモデルの反射光を頂点単位で取得します。 1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別するID。

3. [IN] int : vertno
  指定した頂点番号の色を取得します。

4. [OUT] E3DCOLOR4UC* : colptr
   指定した頂点の色が代入されます。
   colptr->aは無視されます。

ver5.0.0.6
E3DGetVertexEmissive モデル情報 sigモデルの自己照明を頂点単位で取得します。 1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別するID。

3. [IN] int : vertno
  指定した頂点番号の色を取得します。

4. [OUT] E3DCOLOR4UC* : colptr
   指定した頂点の色が代入されます。
   colptr->aは無視されます。

ver5.0.0.6
E3DGetVertexSpecularPower モデル情報 sigモデルの反射の強さを頂点単位で取得します。 1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : partno
  パーツを識別するID。

3. [IN] int : vertno
  指定した頂点番号の色を取得します。

4. [OUT] float* : powerptr
   指定した頂点の反射の強さが代入されます。

ver5.0.0.6
E3DCreateSkinMat ボーン影響 影響度の編集結果を表示用データに反映させます。

E3DSetInfElem, E3DDeleteInfElem, E3DNormalizeInfElem, E3DSetSymInfElemなどで影響度を全て編集し終わったら
この命令を呼んでください。
1. [IN] int : hsid
  形状データを識別するID。

2. [IN] int : partno
  パーツを識別するID。
  -1を指定すると全てのパーツに対して処理を行います。

ver5.0.0.9
E3DSetSymInfElem ボーン影響 CALCMODE_SYM(対称セット)で頂点のボーン影響度を設定します。

対称軸symaxis引数にはusercoef.hで定義されているSYMAXIS_で始まる定数を使用してください。
SYMAXIS_XはX軸対称
SYMAXIS_YはY軸対称
SYMAXIS_ZはZ軸対称

この命令を呼んだだけでは表示には反映されません。
影響度の編集がすべて終わったら、E3DCreateSkinMatを呼んで表示に反映させてください。
1. [IN] int : hsid
  形状データを識別するID。

2. [IN] int : partno
  パーツを識別するID。
  -1を指定すると全てのパーツに対して処理を行います。

3. [IN] int : vertno
  頂点の番号。
  -1を指定するとパーツ中のすべての頂点に対して処理を行います。

4. [IN] int : symaxis
  対称軸をSYMAXIS_で始まる定数で指定します。

5. [IN] float : symdist
  対称距離。
  ぴったり対称な位置からどれくらい離れていても対称とみなすかを指定します。
ver5.0.0.9
E3DUpdateSymInfElem ボーン影響 CALCMODE_SYM(対称設定)の設定してある頂点の影響度を最新の状態に更新します。

内部でCreateSkinMatも呼ばれます。
1. [IN] int : hsid
  形状データを識別するID。

2. [IN] int : excludeflag
  0を指定すると全てのパーツに対して処理を行います。1を指定するとE3DSetValidFlagで無効にしているパーツは除外して処理を行います。
ver5.0.0.9
E3DCalcMLMotion モーション マルチレイヤーモーションの姿勢情報を計算します。ローカルの姿勢から親子関係を反映した姿勢を計算します。

E3DSetNewPoseMLより後でE3DSetBoneQした場合などに
呼んでください。

(E3DSetNewPoseML内部からも呼ばれています)

使用例としては
E3DSetMotionKindML
E3DSetNewPoseML
E3DGetMotionFrameNo
E3DSetBoneQ
E3DCalcMLMotion
のような順序で呼び出します。

1. [IN] int : hsid
  形状データを識別するid
ver5.0.1.2
E3DSetLightId2OfBumpMap ライト バンプマップを設定したモデルデータを照らす2個目のライトを指定します。
影を表示している場合は有効になりません。
(影表示時はライト1個だけ有効)
1. [IN] int : lid
  ライトを識別するid
ver5.0.1.3
E3DSetLightId3OfBumpMap ライト バンプマップを設定したモデルデータを照らす3個目のライトを指定します。
影を表示している場合は有効になりません。
(影表示時はライト1個だけ有効)
1. [IN] int : lid
  ライトを識別するid
ver5.0.1.3
E3DGetCharaDir 算術 キャラクターから見て任意の方向のベクトルを取得します。
degxzにはXZ平面上の角度をdegyには仰ぎ角度を指定します。

例えばキャラクターの向いている向きを取得したい場合は
( degxz, degy ) = ( 0.0, 0.0 )を指定します。
キャラクター後ろは(180.0, 0.0), 右は(-90.0, 0.0)
左は(90.0, 0.0)上は(0.0, 90)下は(0.0, -90)
というように指定します。
1. [IN] int : hsid
  形状データを識別するid
2. [IN] float : degxz
  xz平面上での角度。
3. [IN] float : degy
  仰ぎ角度。
4. [OUT] D3DXVECTOR3* : dstdir
  向きのベクトルが代入されます。
ver5.0.1.8
E3DGetStrSizeByFontID テキスト 文字列の描画に必要な幅と高さを取得します。
1. [IN] int : fontid
  E3DCreateFontで作成した、フォントの番号を指定します。

2. [IN] const char* : textstr
  大きさを調べたい文字列を指定します。

3. [OUT] SIZE* : sizeptr
  描画に必要な幅と高さが代入されます。
ver5.0.2.3
E3DSetUVBatch モデル情報 複数の頂点のUV設定を一括で行います。
ビデオバッファのロックとアンロックの回数が最小限なので
複数回E3DSetUVをよびだすよりも高速です。


処理したい頂点の総数をsetnum個とするとき
*vertnoptrから*(vertnoptr + setnum - 1) までの整数配列に
頂点の番号を格納してください。

UVも同様に
uvptr = (UV*)malloc( sizeof( UV ) * setnum );
などで作成し
(uvptr + 頂点のインデックス)->u にU座標を
(uvptr + 頂点のインデックス)->v にV座標を
格納してください。

頂点のインデックスとは頂点番号ではありません。
0からsetnumまでの値です。
1. [IN] int : hsid
  形状データを識別するid。
  -1を渡すとビルボードの処理をします。

2. [IN] int : partno
  パーツを識別する番号。
  hsidに-1を渡した場合はビルボードIDを指定します。

3. [IN] int* : vertnoptr
  頂点の番号を格納した配列。

4. [IN] int : setnum
  vertnoptrの要素数。
  uvptrの要素数と同じです。

5. [IN] UV* : uvptr
  設定したいUV値の値を指定してください。
  UVの配列。

6. [IN] int : setflag
  setflag に0を指定すると、
  指定UV値を、そのままセットします。

  setflagに1を指定すると、
  指定UV値を、既存のUV値に、足し算します。

7. [IN] int : clampflag
  1をセットするとUVの値を0.0から1.0の間にクランプします。
  0を指定するとクランプは行いません。
ver5.0.2.7
E3DSetPresentInterval 描画パラメータ E3DPresentがモニタの垂直同期に合わせて動作するかどうかを設定します。
E3DInitよりも前に呼び出すことを想定しています。
E3DInitを呼び出したら途中で変更することは出来ません。
この命令を呼び出さなかった場合は垂直同期しません。

1. [IN] int : flag
  0を指定すると垂直同期しません。
  1を指定すると垂直同期します。
ver5.0.2.8
E3DSetBillboardSize ビルボード ビルボードの大きさを設定します。
大きさはE3DCreateBillboardでも設定されるので
この命令は大きさを変更したいときのみに使用します。

この命令はビデオメモリにアクセスするので多用すると重くなる可能性があります。
拡大縮小はE3DSetScaleをご使用ください。E3DSetScaleは高速です。
1. [IN] int : bbid
  ビルボードを識別するID。

2. [IN] float : width
  ビルボードの幅。

3. [IN] float : height
  ビルボードの高さ。

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

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

5. [IN] int : orgflag
  ビルボードの原点の位置を指定します。

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

  orgflagに1を指定すると、
  原点は、ビルボードの中心になります。
  爆発などの、特殊効果に使う場合に、便利です。
ver5.1.0.0
E3DSetHeightFogParams 描画パラメータ 高さフォグ(線形)を設定します。

頂点フォグなので、ポリゴンのない部分には、フォグはかかりません。
画面全体にフォグをかけたい場合は、
E3DCreateBGで、背景を作成してください。(背景はポリゴンです。)

hsid, ビルボードを作成してから呼び出してください。
E3DCreateBGよりも前で呼び出してください。

E3DSetLinearFogParamsとの混在は出来ません。
1. [IN] int : enable
  1を指定すると、フォグが有効に、
  0を指定すると、フォグが無効になります。

2. [IN] E3DCOLOR4UC : col

  フォグの色を指定します。
  col.aは無視されます。

3. [IN] int : start
4. [IN] int : end
  フォグが一番濃くなる一番低い高さをstartに指定してください。
  フォグが無くなる一番高い高さをendに指定してください。

5. [IN] int : hsid
  この引数に、モデルデータのhsidを
  指定することにより、
  モデル単位でのフォグの指定が可能になります。
  特殊効果などで、フォグをかけたくない場合などの
  表示にお使いください。
  この引数に-1を指定した場合は、
  すべてのモデルデータに対して設定します。
ver5.1.0.0
E3DSetTextureToBG テクスチャ E3DCreateBGで作成した背景のテクスチャを変更します。
E3DCreateBGが呼び出されている状態で使用してください。
1. [IN] int : scid
  スワップチェインIDを指定します。

2. [IN] int : stageno
  背景の1枚目のテクスチャにセットしたい場合は0を、2枚目のテクスチャにセットしたい場合は1を指定します。

3. [IN] int : texid
  貼り付けたいテクスチャのIDを指定します。
ver5.1.0.0
E3DGetTextureFromBG テクスチャ E3DCreateBGで作成した背景のテクスチャIDを取得します。
E3DCreateBGが呼び出されている状態で使用してください。
1. [IN] int : scid
  スワップチェインIDを指定します。

2. [IN] int : stageno
  背景の1枚目のテクスチャを取得したい場合は0を、2枚目のテクスチャを取得したい場合は1を指定します。

3. [OUT] int* : texidptr
  テクスチャのIDが代入されます。
ver5.1.0.0
E3DChangeMoaIdling モーション MOA(モーションアクセラレータ)のアイドリングモーションを変更します。

副作用として現在再生中のモーションが新しい(指定した)アイドリングモーションになります。
1. [IN] int : hsid
  形状データを識別するID。

2. [IN] int : motid
  新しいアイドリングモーションのID。
ver5.2.0.1
E3DSetMotionBlur エフェクト モーションブラーのオンオフと種類を設定します。
種類にはワールドブラーとカメラブラーがあります。

ワールドブラーはキャラクターのワールド座標(位置)が変化したときにブラーが生じます。

カメラブラーはキャラクターのカメラ座標(キャラ位置含む)が変化したときにブラーが生じます。このモードでは位置が同じでもカメラが動いた時にはブラーが生じます。

この命令はオフにするとき以外重い処理です。
毎回呼ぶ必要はありません。
状態を変化させるときのみ呼んでください。


ver5.2.0.4でblurtime引数が追加されました。
これは何フレーム前のデータをブラー作成に使用するかを指定するものです。
blurtimeには1から20までの数字を指定してください。

具体的な使用例は
MotionBlurソリューションをご覧ください。
1. [IN] int : hsid
  形状データを識別するID。

2. [IN] int : mode
  BLUR_NONEを指定するとブラーが無効になります。
  BLUR_WORLDを指定するとワールドブラーがオンになります。
  BLUR_CAMERAを指定するとカメラブラーがオンになります。
  BLUR_で始まる定数はusercoef.hで定義されています。

3. [IN] int : blurtime
  何フレーム前のデータをブラー作成に使用するかを指定します。
  1から20までの整数。

ver5.2.0.3
ver5.2.0.4で拡張
E3DSetBeforeBlur エフェクト ブラー作成用のデータを準備します。
現在の姿勢などを保存しE3DSetMotionBlurで指定したblurtime回分蓄積します。

この命令はE3DSetMotionBlurを少なくとも1回は呼び出した後でないと意味を持ちません。

毎フレーム呼び出してください。

具体的な使用例は
MotionBlurソリューションをご覧ください。
1. [IN] int : hsid
  形状データを識別するID。
ver5.2.0.3
ver5.2.0.4で修正
E3DRenderMotionBlur エフェクト モーションブラーを表示します。

不透明の描画、半透明の描画の後に呼び出してください。
現在のキャラクターの状態とE3DSetBeforeBlurを呼び出したときのキャラクターの状態から移動軌跡ボリュームを作成し半透明で表示します。

具体的な使用例は
MotionBlurソリューションをご覧ください。
1. [IN] int : scid
  スワップチェインIDを指定してください。

2. [IN] int* : hsidarray
  描画したいhsidを配列に格納してください。
  ビルボードを描画したいときはhsidに-1を
  格納してください。


3. [IN] int : num
  hsidarrayに何個のhsidを格納したかを指定してください。
ver5.2.0.3
E3DInitBeforeBlur エフェクト ブラー作成用データを初期化します。

E3DSetMotionBlur呼び出しから数えて1回目の描画の前には
必ず呼び出してください。
呼ばなかった場合はゴミのようなブラーが表示されます。

E3DRenderよりも後で呼び出してください。

具体的な使用例は
MotionBlurソリューションをご覧ください。
1. [IN] int : hsid
  形状データを識別するID。
ver5.2.0.4
E3DSetMotionBlurPart エフェクト モーションブラーのオンオフと種類の変更をパーツ単位で行います。

E3DSetMotionBlurの代わりに呼び出します。

パーツ単位で設定できること以外はE3DSetMotionBlurと同じです。
E3DSetMotionBlurの説明もお読みください。
1. [IN] int : hsid
  形状データを識別するID。
  ビルボードにセットしたいときは-1を指定。

2. [IN] int : mode
  BLUR_NONEを指定するとブラーが無効になります。
  BLUR_WORLDを指定するとワールドブラーがオンになります。
  BLUR_CAMERAを指定するとカメラブラーがオンになります。
  BLUR_で始まる定数はusercoef.hで定義されています。

3. [IN] int : blurtime
  何フレーム前のデータをブラー作成に使用するかを指定します。
  1から20までの整数。

4. [IN] int* : partarray
  設定したいパートの番号を配列に格納してください。
  パートの番号はRokDeBone2の階層構造エディタでパーツ名を右クリックしシリアル番号を調べるか、またはE3DGetPartNoByNameを使用して取得してください。
  hsidに-1を指定した場合はビルボードIDを格納してください。
  

5. [IN] int : num
  partarrayに何個のパート番号を格納したかを指定してください。
ver5.2.0.6
E3DBlurTexture16Box エフェクト テクスチャに16ボックスブラーでぼかしをかけます。
1パス処理です。

ver5.3.0.5で引数追加。
1. [IN] int : resultscid
  結果を描画するレンダーターゲットのスワップチェインID。

2. [IN] int : srctexid
  ぼかしたいテクスチャのID。

3. [IN] int : adjustuvflag
  UV補正をする場合は1、しない場合は0。
  しないとボケが大きいが右下にずれます。


ver5.2.0.8
ver5.3.0.5で拡張

E3DBlurTexture9Corn エフェクト テクスチャに9コーンブラーでぼかしをかけます。
1パス処理です。

ver5.3.0.5で引数追加。

1. [IN] int : resultscid
  結果を描画するレンダーターゲットのスワップチェインID。

2. [IN] int : srctexid
  ぼかしたいテクスチャのID。

3. [IN] int : adjustuvflag
  UV補正をする場合は1、しない場合は0。
  しないとボケが大きいが右下にずれます。

ver5.2.0.8
ver5.3.0.5で拡張
E3DBlurTextureGauss5x5 エフェクト テクスチャにガウスブラーでぼかしをかけます。
1パス処理です。

ver5.3.0.5で引数追加。
1. [IN] int : resultscid
  結果を描画するレンダーターゲットのスワップチェインID。

2. [IN] int : srctexid
  ぼかしたいテクスチャのID。

3. [IN] float : dispersion
  ぼかしの強さ。大きいほどぼける。
  この命令ではぼかしに限界があります。
  もっとたくさんぼかしたい場合は
  E3DBlurTextureGaussを使ってください。

4. [IN] int : adjustuvflag
  UV補正をする場合は1、しない場合は0。
  しないとボケが大きいが右下にずれます。

ver5.2.0.8
ver5.3.0.5で拡張
E3DBlurTextureGauss エフェクト テクスチャにガウスブラーでぼかしをかけます。
縦方向のぼかしと横方向のぼかしの2パス構成です。
E3Dの中では一番効果のあるぼかしです。

具体的な使用例は
BlurTextureソリューションをご覧ください。

ver5.3.0.5で引数追加。

1. [IN] int : resultscid
  結果を描画するレンダーターゲットのスワップチェインID。

2. [IN] int : workscid
  途中経過格納用のレンダーターゲットテクスチャのスワップチェインID。

3. [IN] int : worktexid
  途中経過格納用のレンダーターゲットテクスチャのテクスチャID。

4. [IN] int : srctexid
  ぼかしたいテクスチャのID。

5. [IN] float : dispersion
  ぼかしの強さ。大きいほどぼける。

6. [IN] int : adjustuvflag
  UV補正をする場合は1、しない場合は0。
  しないとボケが大きいが右下にずれます。

ver5.2.0.8
ver5.3.0.5で拡張
E3DBlendRTTexture エフェクト 2つのテクスチャをアルファブレンドし1つのテクスチャにレンダーします。

2つ目のテクスチャIDに-1を指定すると2個目のテクスチャは無効になり1個のテクスチャだけで処理が行われます。これはテクスチャのサイズを変えたい場合などに便利です。

具体的な使用例は
BlurTextureソリューションをご覧ください。

ver5.3.0.5で引数追加。

1. [IN] int : resultscid
  結果を描画するレンダーターゲットのスワップチェインID。

2. [IN] int : texid1
  1枚目のテクスチャのID。
  最初に描画される。

3. [IN] E3DCOLOR4F : col1
  頂点色を指定します。
  E3DCOLOR4Fはusercoef.hで定義されています。
  各値は0.0から1.0です。
  この色はtexid1のテクスチャの色に乗算されます。

4. [IN] int : texf1
  texid1の拡大縮小フィルタの種類。
  D3DTEXF_POINTはぼけません。
  D3DTEXF_LINEARはぼけます。
  どちらかを指定してください。

5. [IN] int : texid2
  2枚目のテクスチャのID。
  texid1の後に描画される。

6. [IN] E3DCOLOR4F : col2
  頂点色を指定します。
  E3DCOLOR4Fはusercoef.hで定義されています。
  各値は0.0から1.0です。
  この色はtexid2のテクスチャの色に乗算されます。

7. [IN] int : texf2
  texid2の拡大縮小フィルタの種類。
  D3DTEXF_POINTはぼけません。
  D3DTEXF_LINEARはぼけます。
  どちらかを指定してください。

8. [IN] int : blendop
  アルファブレンド操作の種類。
  D3DBLENDOP_で始まる定数を指定してください。

9. [IN] 変数または、数値 : srcblend
  D3DRS_SRCBLENDの値。
  D3DBLEND_で始まる定数を指定してください。

10. [IN] 変数または、数値 : destblend
  D3DRS_DESTBLENDの値。
  D3DBLEND_で始まる定数を指定してください。

11. [IN] int : adjustuvflag
  UV補正をする場合は1、しない場合は0。
  しないとボケが大きいが右下にずれます。

ver5.2.0.8
ver5.3.0.5で拡張

E3DBeginSceneZbuf 描画 Zバッファを指定するE3DBeginScene。
Zバッファを指定できる点を除いてE3DBeginSceneと同じです。
E3DBeginSceneの説明をお読みください。

ver5.2.1.0でskipflagを拡張しました。
1. [IN] int : scid
  スワップチェインID。
  E3DInitやE3DCreateSwapChainで取得したIDを
  指定してください。

2. [IN] int : skipflag
  skipflagに0を指定すると色の初期化とZバッファの初期化と背景の描画を行います。
  skipflagに1を足すと色の初期化とZバッファの初期化と背景の描画を行いません。
  skipflagに2を足すとシェーダー定数のビデオカードへの転送をキャンセルします。
  skipflagに4を足すと色の初期化は行いますがZバッファの初期化と背景の描画は行いません。 
 

3. [IN] int : zscid
  Zバッファを指定できます。
  描画に使用したいZバッファを持つレンダーターゲットテクスチャなどのスワップチェインIDを指定します。
  この引数を省略した場合はscidで指定したZバッファが使用されます。
  zscidを指定した場合は指定したZバッファはこの命令で初期化されません。
  zscidで指定するZバッファはscidで指定したサーフェスの大きさと大きさが同じ時のみ有効です。
ver5.2.0.8
ver5.2.1.0で拡張
E3DSetClearCol 描画パラメータ サーフェスのクリア色をスワップチェインごとに設定します。
レンダーターゲットテクスチャのクリア色も設定できます。
E3DBeginSceneより前で呼んでください。
1. [IN] int : scid
  スワップチェインIDを指定します。

2. [IN] E3DCOLOR4UC : col
  クリア色を指定します。
  E3DCOLOR4UCはusercoef.hで定義されています。

ver5.2.0.9
E3DSetMotionBlurMinAlpha エフェクト モーションブラーのブラーの消え具合を設定します。
モーションブラーは動いた後の位置の透明度が1で
動く前の位置の透明度はminAlphaとなります。
ブラーの透明度は1からminAlphaまで徐々に薄くなっていくことになります。

このminAlphaの値を調整することでブラーの消え具合を変えることが出来ます。

何も設定しない状態ではminAlphaは0.2になっています。

1. [IN] int : hsid
  形状データを識別するID。

2. [IN] int : partno
  設定したいパーツの番号。
  -1を指定すると全てのパーツに設定します。

3. [IN] float : minAlpha
  0.0から1.0までのfloat。
  ブラーの最小透明度を指定します。

ver5.2.0.9
E3DRenderGlow エフェクト グロー源を描画します。
グローの使い方についてはrdb2_glow.htmをご覧ください。
具体的な使用例は
Glowソリューションをご覧ください。
1. [IN] int* : hsidarray
  描画したいhsidを配列に格納してください。

2. [IN] int : num
  hsidarrayに何個のhsidを格納したかを指定してください。
ver5.2.1.0
E3DSetMaterialGlowParams マテリアル グローの有効無効と色倍率を指定します。

この命令でグローのモードやオンオフを変更すると
マテリアルの透過方法transparentが自動的に適切なものに変更されます。
モード変更前の状態に戻したい場合は
E3DGetMaterialTransparentとE3DSetMaterialTransparent
を使用して変更前の状態を保存しておいて復元してください。

グローの使い方についてはrdb2_glow.htmをご覧ください。
具体的な使用例は
Glowソリューションをご覧ください。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [IN] int : glowmode
  グローのモードを指定します。
  GLOW_NONEを指定するとグローが無効になります。
  GLOW_NORMALを指定すると不透明グローになります。
  GLOW_ALPHAを指定すると半透明グローになります。
  GLOWで始まる定数はusercoef.hで定義されています。

4. [IN] int : setcolflag
  colmult引数で指定した値を設定したいときは1を指定し、無視したいときは0を指定します。

5. [IN] E3DCOLOR4F : colmult
  colmult.r, colmult.g, colmult.bにそれぞれRGBの倍率をしてしてください。
  colmult.aは無視されます。
ver5.2.1.0
E3DGetMaterialGlowParams マテリアル グローの有効無効と色倍率を取得します。
グローの使い方についてはrdb2_glow.htmをご覧ください。
具体的な使用例は
Glowソリューションをご覧ください。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [OUT] int* : glowmodeptr
  グローのモードが代入されます。
  GLOW_NONEはグロー無し。
  GLOW_NORMALは不透明グロー。
  GLOW_ALPHAは半透明グロー。
  GLOWで始まる定数はusercoef.hで定義されています。

4. [OUT] E3DCOLOR4F* : colmultptr
  RGBの倍率が代入されます。
  colmultptr->aは意味がありません。
ver5.2.1.0
E3DSetMaterialTransparent マテリアル テクスチャの透過方法を設定します。 1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [IN] int : transparent
  テクスチャの透過モードを指定します。
  0を指定すると透過なし。
  1を指定すると黒色透過。
  2を指定するとテクスチャのアルファにより透過。
ver5.2.1.0
E3DGetMaterialTransparent マテリアル テクスチャの透過方法を取得します。 1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [OUT] int* : transparentptr
  テクスチャの透過モードが代入されます。
  0は透過なし。
  1は黒色透過。
  2はテクスチャアルファによる透過。
ver5.2.1.0
E3DChkHDR 環境 HDRで描画できるかどうかを調べます。
E3DInitよりも後で呼び出します。
主に浮動小数フォーマットのテクスチャが使えるかどうかが問題になります。
1. [OUT] int : okflag
  HDRが使用できる場合は1が出来ない場合は0が代入されます。

2. [OUT] int* : hdrformat
  HDRシーンを描画するときのテクスチャのフォーマットが代入されます。

3. [OUT] int* : toneformat
  トーンマップを作成するときのテクスチャのフォーマットが代入されます。
ver5.2.1.6
E3DCheckSpec 環境 Easy3Dが実行可能かどうかを調べます。
ピクセルシェーダー2.0が存在するかどうかや
ストリームを3つ以上使えるかどうかなどを調べます。
E3DInitよりも前で呼び出します。
1. [IN] HINSTANCE : hinst
  アプリケーションのhinstanceを
  渡します。

2. [IN] HWND : hwnd
  メインウインドウのハンドルを
  渡してください。

3. [OUT] int* : okflag
  Easy3Dが使用できる場合は1が出来ない場合は0が代入されます。
ver5.2.1.6
E3DDisablePostEffect 環境 デフォルトの動作ではdllと同じ場所にE3D_HLSLフォルダが無いとエラーになりますが、ポストエフェクト機能を使わないとこの命令で宣言すれば、E3D_HLSLフォルダがなくてもエラーになりません。

E3DInitよりも前で1回だけ呼び出してください。
なし ver5.2.1.6
E3DSetHDRLightDiffuse ライト HDR用の強いライト色(拡散光)を設定することが出来ます。
浮動小数点で指定します。
1.0は整数指定時の255に相当します。
1. [IN] int : lid
  ライトを識別するid

2. [IN] E3DCOLOR4F : col
  ライトの拡散色を指定します。
  E3DCOLOR4Fはusercoef.hで定義されています。
ver5.2.1.6
E3DSetHDRLightSpecular ライト HDR用の強いライト色(反射光)を設定することが出来ます。
浮動小数点で指定します。
1.0は整数指定時の255に相当します。
1. [IN] int : lid
  ライトを識別するid

2. [IN] E3DCOLOR4F : col
  ライトの反射色を指定します。
  E3DCOLOR4Fはusercoef.hで定義されています。
ver5.2.1.6
E3DDownScaleRTTexture4x4 エフェクト 縦横それぞれ4分の1の大きさのレンダーターゲットテクスチャにコピーします。
1. [IN] int : dstscid
  描画先のレンダーターゲットテクスチャのスワップチェインID。小さい方のテクスチャ。

2. [IN] int : srctexid
  描画元のレンダーターゲットテクスチャのテクスチャID。大きい方のテクスチャ。

ver5.2.1.6
E3DDownScaleRTTexture2x2 エフェクト 縦横それぞれ2分の1の大きさのレンダーターゲットテクスチャにコピーします。 1. [IN] int : dstscid
  描画先のレンダーターゲットテクスチャのスワップチェインID。小さい方のテクスチャ。

2. [IN] int : srctexid
  描画元のレンダーターゲットテクスチャのテクスチャID。大きい方のテクスチャ。
ver5.2.1.6
E3DCreateToneMapTexture テクスチャ トーンマップテクスチャを作成します。
トーンマップテクスチャとはシーンの明るさを計測するために使用するレンダーターゲットテクスチャです。

一度に有効にできるトーンマップの組は10組までです。
それ以上のトーンマップを使用したい場合はE3DDestroyToneMapTextureを呼んで不要なものを削除してから
この命令を呼んでください。

具体的な使用例は
HDRLightingソリューションをご覧ください。

1. [IN] int : tonenum
  トーンマップテクスチャの数を指定します。
  3以上の数を指定してください。
  トーンマップは1X1の大きさのものから順番に4倍ずつしたサイズのテクスチャになります。
  例えばtonenumに4を指定した場合は
  1X1, 4X4, 16X16, 64X64のサイズのテクスチャが内部で作成されます。

2. [IN] int : toneformat
  トーンマップテクスチャのフォーマット。
  E3DChkHDRで取得したtoneformatを指定してください。
  
3. [OUT] int* : tonemapid
  作成したトーンマップを識別するIDが代入されます。

4. [OUT] int* : okflag
  命令が成功した場合には1が失敗した場合には0が代入されます。
ver5.2.1.6
E3DDestroyToneMapTexture テクスチャ トーンマップテクスチャを削除します。 1. [IN] int : tonemapid
  削除するトーンマップを識別するID。
ver5.2.1.6
E3DRenderToneMap エフェクト トーンマップにシーンの明るさをレンダリングし明るさを計測します。

具体的な使用例は
HDRLightingソリューションをご覧ください。
1. [IN] int : tonemapid
  トーンマップを識別するID。

2. [IN] int : srctexid
  明るさを計測したいテクスチャのID。
ver5.2.1.6
E3DBrightPassRTTextureHDR エフェクト HDRで描画したテクスチャの明るい部分だけを抜き出しLDRに変換します。

具体的な使用例は
HDRLightingソリューションをご覧ください。
1. [IN] int : dstscid
  描画先のスワップチェインID。
  
2. [IN] int : srctexid
  HDRで描画されている元画像の入ったテクスチャのID。
  
3. [IN] float : middlegray
  画面の明るさを決めるキーになる値。
  実数。
  
4. [IN] float : threshold
  この値より暗い部分は色が0になる。
  実数。

5. [IN] float : offset
  thresholdで色成分を引いた後にoffsetだけ色を足します。
  
6. [IN] int : tonemapid
  シーンの明るさを記録してあるトーンマップのID。
ver5.2.1.6
E3DRenderHDRFinal エフェクト HDRシーンとブルーム画像を合成しLDRに変換して描画します。


具体的な使用例は
HDRLightingソリューションをご覧ください。
1. [IN] int : dstscid
  描画先のスワップチェインID。
  
2. [IN] int : srctexid0
  HDRで描画されている元画像の入ったテクスチャのID。

3. [IN] int : srctexid1
  ブルーム画像のテクスチャID。

4. [IN] int : tonemapid
  トーンマップのID。

5. [IN] float : middlegray
  シーンの明るさを決定するキーの値。
  E3DBrightPassRTTextureHDRに指定したのと同じ値を指定します。
ver5.2.1.6
E3DMonoRTTexture エフェクト テクスチャの内容を白黒画像に変換します。

具体的な使用例は
Monoソリューションをご覧ください。
1. [IN] int : dstscid
  描画先のスワップチェインID。
  
2. [IN] int : srctexid
  元画像の入ったテクスチャのID。
ver5.2.1.7
E3DCbCrRTTexture エフェクト テクスチャの内容をYCbCr色空間に変換しYを保ったままCbとCrを指定値に設定します。

YCbCrの値のセットがどんな色になるのかはPhotoShopなどのペイントソフトで確認してください。

具体的な使用例は
CbCrソリューションをご覧ください。
1. [IN] int : dstscid
  描画先のスワップチェインID。
  
2. [IN] int : srctexid
  元画像の入ったテクスチャのID。

3. [IN] float : cb
  YCbCrのCbの値。

4. [IN] float : cr
  YCbCrのCrの値。
ver5.2.1.7
E3DShaderConstOffset16 エフェクト posteffect.fxのデータfloat2 avSampleOffsets[16]に値を設定します。
このデータは他の命令でも使われます。
(使われている場所はposteffect.fxで確認してください。)
他の命令で上書きされることがあるのでその都度設定してください。

offsetarrayには
D3DXVECTOR2 offsetarray[16];
で確保した配列を使用してください。
自分で値をセットしてから命令に渡してください。
1. [IN] D3DXVECTOR2* : offsetarray
  セットしたい値が設定してある配列。
  詳しくは前記をご覧ください。
ver5.2.1.8
E3DShaderConstWeight16 エフェクト posteffect.fxのデータfloat4 avSampleWeights[16]に値を設定します。
このデータは他の命令でも使われます。
(使われている場所はposteffect.fxで確認してください。)
他の命令で上書きされることがあるのでその都度設定してください。

weightarrayには
D3DXVECTOR4 weightarray[16];
で確保した配列を使用してください。
自分で値をセットしてから命令に渡してください。
1. [IN] D3DXVECTOR4* : weightarray
  セットしたい値が設定してある配列。
  詳しくは前記をご覧ください。
ver5.2.1.8
E3DShaderConstUserFL4 エフェクト posteffect.fxのデータfloat4 userFL4_0からuserFL4_9のどれかに値を設定します。

自分で値をセットしてから命令に渡してください。

具体的な使用例は
CustomShaderソリューションをご覧ください。
1. [IN] int : datano
  userFL4_0からuserFL4_9までのどれに値をセットするかを0から9の整数で指定します。

2. [IN] D3DXVECTOR4 : fl4
  セットしたい値が設定してあるD3DXVECTOR4。
ver5.2.1.8
E3DShaderConstUserTex エフェクト posteffect.fxのデータtexture usertex0からusertex4のどれかに値を設定します。

具体的な使用例は
CustomShaderソリューションをご覧ください。
1. [IN] int : datano
  usertex0からusetex4までのどれに値をセットするかを0から4の整数で指定します。

2. [IN] int : srctexid
  設定したいテクスチャを識別するID。
ver5.2.1.8
E3DCallUserShader エフェクト posteffect.fxのtechnique PostEffectUser0からPostEffectUser4のうちの一つを実行します。
実行するパスも1つだけ選べます。

具体的な使用例は
CustomShaderソリューションをご覧ください。
1. [IN] int : shaderno
  PostEffectUser0からPostEffectUser4までのどれを実行するかを0から4の整数で指定します。

2. [IN] int : passno
  テクニックの何番のパスを実行するかを指定します。
  例えばpass P0を実行したいときは0をpass P1を実行したいときは1を指定します。
  記述してあるパスの番号最大値よりも大きい値を指定するとエラーになります。

3. [IN] int : dstscid
  描画先のスワップチェインID。
ver5.2.1.8
E3DCreateBone モデル情報 ボーンを新規に作成します。

読み込み済みのモーションは全て破棄されます。

影響度の再計算はしません。
したい場合はE3DJointRemakeを呼び出してください。

ボーンの位置はE3DSetJointInitialPosで設定してください。

Easy3Dの仕様上ボーンを破棄するとゴミデータが残ります。
ゴミデータはあまり多くなると描画速度に影響します。
E3DCreateBoneにはゴミデータが存在すればそれを再利用するような仕組みがあります。
ですのでまず不要なボーンをE3DDestroyBoneした後にE3DCreateBoneするとゴミが少なくて済みます。
ゴミの掃除の仕方はRokDeBone2ver5.2.1.3の新機能のページの説明をご覧ください。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] const char* : nameptr
  ボーンの名前を格納した文字列。
  255バイトまでです。
  終端はNULL(0)にしてください。

3. [IN] int : parentid
  親になるジョイントを識別するパーツのID。
  一番親のボーンを作成する場合以外は必ずジョイントのIDを指定してください。
  一番親のボーンを作成するときは-1を指定してください。-1を指定するとパーツをまとめる役割をするパーツのうちで一番最後に作られたパーツが親になります。
( 通常は「Joint Part」という名前のパーツになります。)

4. [OUT] int* : serialidptr
  新たに作成されたボーンを識別するID(パーツのID)が代入されます。
  エラーが生じた場合は-1が代入されます。
ver5.2.1.9
E3DDestroyBone モデル情報 ボーンを破棄します。

読み込み済みのモーションは全て破棄されます。

影響度の再計算は強制的に行われます。

E3DCreateBoneの説明もお読みください。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : boneno
  削除したいボーンを識別するID。

ver5.2.1.9
E3DGetMorphBaseNum モーフ モーフのベースの数を取得します。
それぞれのモーフにはベースは1個だけしか含まれないので
この数はモーフの数と一致します。

具体的な使用例は
MorphInfoソリューションをご覧ください。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [OUT] int* : basenumptr
  ベースの数が代入されます。
ver5.2.2.3
E3DGetMorphBaseInfo モーフ モーフのベースの情報を一括で取得します。

具体的な使用例は
MorphInfoソリューションをご覧ください。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [OUT] E3DMORPHBASE* : baseinfoptr
  ベースの情報が代入されます。
  E3DMORPHBASEはusercoef.hで定義されています。
  
  E3DGetMorphBaseNum( hsid, &basenum );
  baseinfo = (E3DMORPHBASE*)malloc( sizeof( E3DMORPHBASE ) * basenum );
  のようにして作成したメモリを指定してください。

3. [IN] int : arrayleng
  baseinfoの要素数を指定してください。
  E3DGetMorphBaseNumで取得したbasenum個じゃないとエラーになります。
ver5.2.2.3
E3DGetMorphTargetInfo モーフ モーフのターゲットの情報をモーフごと(ベースごと)に取得します。

具体的な使用例は
MorphInfoソリューションをご覧ください。

1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : baseid
  モーフのベースを識別する番号を指定してください。
  E3DGetMorphBaseInfoで取得したbaseinfoptr->dispnoを指定してください。

3. [OUT] E3DMORPHTARGET* : targetinfoptr
  ターゲットの情報が代入されます。
  E3DMORPHTARGETはusercoef.hで定義されています。
 
  ベースに含まれるターゲット数分の要素数のメモリを渡してください。
  targetinfo = (E3DTARGETINFO*)malloc( sizeof( E3DTARGETINFO ) * (baseinfo + baseno)->targetnum );
  のようにして作成してください。

4. [IN] int : arrayleng
  targetinfoの要素数を指定してください。
  ベースに含まれるターゲット数と異なる場合にはエラーになります。
ver5.2.2.3
E3DGetMorphKeyNum モーフ モーフモーションのキーの数を取得します。

具体的な使用例は
MorphInfoソリューションをご覧ください。

1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : boneid
  モーフモーション情報の格納先のボーンを識別する番号を指定してください。
  E3DGetMorphBaseInfoで取得したbaseinfoptr->bonenoを指定してください。

4. [IN] int : baseid
  モーフのベースを識別する番号を指定してください。
  E3DGetMorphBaseInfoで取得したbaseinfoptr->dispnoを指定してください。

5. [IN] int : targetid
  モーフのターゲットを識別する番号を指定してください。
  E3DGetMorphTargetInfoで取得したtargetinfoptr->dispnoを指定してください。

6. [OUT] int* : keynumptr
  キーの数が代入されます。
ver5.2.2.3
E3DGetMorphKey モーフ モーフモーションの情報をキーの数分取得します。

具体的な使用例は
MorphInfoソリューションをご覧ください。


1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : boneid
  モーフモーション情報の格納先のボーンを識別する番号を指定してください。
  E3DGetMorphBaseInfoで取得したbaseinfoptr->bonenoを指定してください。

4. [IN] int : baseid
  モーフのベースを識別する番号を指定してください。
  E3DGetMorphBaseInfoで取得したbaseinfoptr->dispnoを指定してください。

5. [IN] int : targetid
  モーフのターゲットを識別する番号を指定してください。
  E3DGetMorphTargetInfoで取得したtargetinfoptr->dispnoを指定してください。

6. [OUT] E3DMORPHMOTION* : motioninfoptr
  モーション情報が代入されます。
  E3DMORPHMOTIONはusercoef.hで定義されています。

  E3DGetMorphKeyNum( hsid, motid, baseid, targetid, &keynum );
  motioninfo = (E3DMORPHMOTION*)malloc( sizeof( E3DMORPHMOTION ) * keynum );
  のようにしてメモリを作成してください。

7. [IN] int : arrayleng
  motioninfoptrの要素数を指定してください。
  E3DGetMorphKeyNumで取得したkeynum個じゃないとエラーになります。

ver5.2.2.3
E3DGetCurMorphInfo モーフ 任意のフレーム番号の補間済みのモーフモーション情報を取得します。
この命令では現在のモーションID、フレーム番号についての情報を取得します。
任意のモーション、フレーム番号の情報を取得したい場合は
E3DSetMotionFrameNoと組み合わせて使ってください。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneid
  モーフモーション情報の格納先のボーンを識別する番号を指定してください。
  E3DGetMorphBaseInfoで取得したbaseinfoptr->bonenoを指定してください。

3. [IN] int : baseid
  モーフのベースを識別する番号を指定してください。
  E3DGetMorphBaseInfoで取得したbaseinfoptr->dispnoを指定してください。

4. [IN] int : targetid
  モーフのターゲットを識別する番号を指定してください。
  E3DGetMorphTargetInfoで取得したtargetinfoptr->dispnoを指定してください。

5. [OUT] E3DMORPHMOTION* : motioninfoptr
  モーション情報が代入されます。
  E3DMORPHMOTIONはusercoef.hで定義されています。

  要素数は1。
ver5.2.2.3
E3DCreateMorph モーフ モーフを作成します。
ベースのIDとボーンのIDを指定します。
ここで指定したボーンに作成したモーフのモーション情報が格納されます。

この命令を呼ぶと読み込み済みのモーションは全て破棄されます。


具体的な使用例は
MorphInfo_Createソリューションをご覧ください。

1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : baseid
  ベースを識別する番号を指定してください。
  E3DGetPartNoByNameなどでIDを取得して指定してください。

3. [IN] int : boneid
  ボーンを識別する番号を指定してください。
  E3DGetPartNoByNameなどでIDを取得して指定してください。
ver5.2.2.3
E3DAddMorphTarget モーフ E3DCreateMorphで作成したモーフにターゲットを追加します。

具体的な使用例は
MorphInfo_Createソリューションをご覧ください。


1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : baseid
  ベースを識別する番号を指定してください。
  E3DGetPartNoByNameなどでIDを取得して指定してください。

3. [IN] int : targetid
  ターゲットを識別する番号を指定してください。
  E3DGetPartNoByNameなどでIDを取得して指定してください。
ver5.2.2.3
E3DSetMorphKey モーフ モーフモーションのキーを作成します。
キーがすでにある場合は既存のキーに上書きします。

具体的な使用例は
MorphInfo_Createソリューションをご覧ください。


1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : boneid
  モーフモーション情報の格納先のボーンを識別する番号を指定してください。
  E3DGetMorphBaseInfoで取得したbaseinfoptr->bonenoを指定してください。

4. [IN] int : baseid
  モーフのベースを識別する番号を指定してください。
  E3DGetMorphBaseInfoで取得したbaseinfoptr->dispnoを指定してください。

5. [IN] int : targetid
  モーフのターゲットを識別する番号を指定してください。
  E3DGetMorphTargetInfoで取得したtargetinfoptr->dispnoを指定してください。

6. [IN] E3DMORPHMOTION* : motioninfoptr
  モーフモーション情報を指定します。要素数1。
  E3DMORPHMOTIONはusercoef.hで定義されています。
ver5.2.2.3
E3DDestroyMorphKey モーフ モーフモーションのキーを削除します。
モーフに含まれる全てのターゲットのキーが削除されます。

具体的な使用例は
MorphInfo_Createソリューションをご覧ください。


1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : boneid
  モーフモーション情報の格納先のボーンを識別する番号を指定してください。
  E3DGetMorphBaseInfoで取得したbaseinfoptr->bonenoを指定してください。

4. [IN] int : frameno
  削除したいキーが存在するフレーム番号を指定してください。

5. [IN] int : baseid
  モーフのベースを識別する番号を指定してください。
  E3DGetMorphBaseInfoで取得したbaseinfoptr->dispnoを指定してください。
ver5.2.2.3
E3DGetToon1Material マテリアル トゥーンマテリアルの情報をパーツごとに一括取得します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  E3DGetDispObjInfoで取得した表示オブジェクトのIDを指定してください。

3. [OUT] E3DTOON1MATERIAL* : toon1ptr
  トゥーンマテリアルの情報が代入されます。
  E3DTOON1MATERIALはusercoef.hで定義されています。
  E3DGetToon1MaterialNumで取得した数をmatnumとすると
  toon1ptr = (E3DTOON1MATERIAL*)malloc( sizeof( E3DTOON1MATERIAL ) * matnum );
  のように作成したメモリを渡してください。

4. [IN] int : arrayleng
  toon1ptrを作成したときの要素数を指定します。
  E3DGetToon1MaterialNumで取得できるmatnumと異なるとエラーになります。
ver5.2.2.5
E3DSetToon1Name マテリアル トゥーンマテリアルの名前を変更します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  E3DGetDispObjInfoで取得した表示オブジェクトのIDを指定してください。

3. [IN] char* : oldname
  名前を変えたいトゥーンマテリアルの元の名前

4. [IN] char* : newname
  トゥーンマテリアルの新しい名前。
  名前の長さは31バイトまでです。
ver5.2.2.5
E3DSetToon1Diffuse マテリアル トゥーンマテリアルのDiffuse色を設定します。
ライトが当たった明るい部分の色です。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  E3DGetDispObjInfoで取得した表示オブジェクトのIDを指定してください。

3. [IN] char* : matname
  トゥーンマテリアルの名前

4. [IN] RDBColor3f : diffuse
  diffuse色。
ver5.2.2.5
E3DSetToon1Specular マテリアル トゥーンマテリアルのSpecular色を設定します。
ハイライトの部分の色です。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  E3DGetDispObjInfoで取得した表示オブジェクトのIDを指定してください。

3. [IN] char* : matname
  トゥーンマテリアルの名前

4. [IN] RDBColor3f : specular
  specular色。
ver5.2.2.5
E3DSetToon1Ambient マテリアル トゥーンマテリアルのAmbient色を設定します。
ライトが当たらない暗い部分の色です。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  E3DGetDispObjInfoで取得した表示オブジェクトのIDを指定してください。

3. [IN] char* : matname
  トゥーンマテリアルの名前

4. [IN] RDBColor3f : ambient
  ambient色。
ver5.2.2.5
E3DSetToon1NL マテリアル トゥーン表示のdiffuse, specular, ambientの割合を決めるための係数を設定します。

色の割合は面の法線とライトの反転ベクトルとのなす角度(deg)で決定します。
暗い色の角度の閾値をdarkdeg, ハイライトの角度の閾値をbrightdegとします。
degがdarkdegより大きい角度の部分は暗い色(ambient)で塗ります。
degがbrightdegより小さい角度の場合はハイライト(specular)で塗ります。
それ以外の部分は明るい色(diffuse)で塗ります。
darkdeg >= brightdegでないといけません。
ピンとこない方はRokDeBone2で「トゥ」ボタンを押してdarkdegとbrightdegを設定するスライダーを動かしてみて理解してください。

RokDeBone2内部ではこれらの閾値は角度ではなくてcosの値で保持しています。
そのためこの命令に渡す値もcos( darkdeg * DEG2PAI )とcos( brightdeg * DEG2PAI )を渡してください。
DEG2PAIは「度」を「ラジアン」に変換するための定数です。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  E3DGetDispObjInfoで取得した表示オブジェクトのIDを指定してください。

3. [IN] char* : matname
  トゥーンマテリアルの名前

4. [IN] float : darknl
  cos( darkdeg * DEG2PAI )を指定してください。
  詳しくは前記をご覧ください。

5. [IN] float : brightnl
  cos( brightdeg * DEG2PAI )を指定してください。
  詳しくは前記をご覧ください。
ver5.2.2.5
E3DSetToon1Edge0 マテリアル トゥーンマテリアルのエッジ(輪郭線)のパラメータを設定します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  E3DGetDispObjInfoで取得した表示オブジェクトのIDを指定してください。

3. [IN] char* : matname
  トゥーンマテリアルの名前

4. [IN] RDBColor3f : col
  輪郭線の色。

5. [IN] int : validflag
  輪郭線を表示するときは1。しないときは0。

6. [IN] int : invflag
  輪郭線用の面の向きを反転するときは1。しないときは0。通常は0。
  両面オブジェクトの調整用。

7. [IN] float : width
  輪郭線の幅。
ver5.2.2.5
E3DLoadCameraFile カメラ RokDeBone2で作成したカメラファイル(*.cam)を読み込み
アニメ番号を取得します。
1. [IN] char* : filename
  カメラファイルのファイル名をフルパスで指定してください。

2. [OUT] int* : animnoptr
  読み込んだアニメを識別するアニメ番号が代入されます。
ver5.2.2.7
E3DDestroyCameraAnim カメラ カメラアニメを破棄します。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。
ver5.2.2.7
E3DSaveCameraFile カメラ カメラアニメをテキストファイルに保存します。
1. [IN] char* : filename
  カメラファイルのファイル名をフルパスで指定してください。

2. [IN] int : animno
  カメラアニメを識別する番号を指定してください。
ver5.2.2.7
E3DSetCameraAnimNo カメラ カレントのカメラアニメ番号をセットします。
フレーム番号は0に戻ります。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。
ver5.2.2.7
E3DGetCameraAnimNo カメラ カレントのカメラアニメ番号を取得します。
1. [OUT] int* : animnoptr
  カメラアニメを識別する番号が代入されます。
ver5.2.2.7
E3DSetCameraFrameNo カメラ 再生するカメラアニメのアニメ番号とカメラ番号とフレーム番号を設定します。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [IN] int : camerano
  カメラ番号を指定します(0から2)。
  カメラ番号に-1を指定するとカメラのスイッチキーに基づいてカメラを切り替え再生します。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [IN] int : isfirst
  この命令を呼んだ後にE3DSetNewCameraを呼び出す場合は1を、呼び出さない場合は0を指定します。
ver5.2.2.7
E3DGetCameraFrameNo カメラ 現在再生中のカメラアニメのアニメ番号、カメラ番号、フレーム番号を取得します。
1. [OUT] int* : animnoptr
  カメラアニメを識別する番号が代入されます。

2. [OUT] int* : cameranoptr
  カメラ番号が代入されます。

3. [OUT] int* : framenoptr
  フレーム番号が代入されます。
ver5.2.2.7
E3DSetNewCamera カメラ カメラのフレームをアニメタイプに従って進め、新しいカメラ情報をセットします。
1. [IN] int : camerano
  カメラ番号を指定します(0から2)。
  カメラ番号に-1を指定するとカメラのスイッチキーに基づいてカメラを切り替え再生します。
ver5.2.2.7
E3DSetNextCameraAnimFrameNo カメラ animnoで識別されるアニメがbefframenoのフレーム番号に達したらnextanimnoで識別されるアニメのnextframenoに切り替えることを予約します。
アニメの切り替えはE3DSetNewCameraで行われます。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [IN] int : nextanimno
  切り替え先のカメラアニメを識別する番号を指定してください。

3. [IN] int : nextframeno
  切り替え先のカメラアニメのフレーム番号を指定してください。

4. [IN] int : befframeno
  切り替え前のカメラアニメがbefframenoフレームまで達したらアニメの切り替えが起こります。
  -1を指定した場合は切り替え前のアニメが最終フレームに達したときにアニメが切り替わります。
ver5.2.2.7
E3DGetNextCameraAnimFrameNo カメラ E3DSetNextCameraAnimFrameNoで設定した情報を取得します。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [OUT] int* : nextanimnoptr
  切り替え先のカメラアニメを識別する番号が代入されます。

3. [OUT] int* : nextframenoptr
  切り替え先のカメラアニメのフレーム番号が代入されます。
ver5.2.2.7
E3DCreateNewCameraAnim カメラ カメラアニメを作成しアニメを識別する番号を取得します。
1. [IN] char* : animname
  アニメの名前を指定します。
  255バイトまでです。

2. [IN] int : animtype
  アニメの振る舞いを指定します。
  1を指定するとフレーム番号は進みません。
  2を指定すると最終フレーム番号に達したらその状態を維持します。
  3を指定するとループします。
  4を指定するとピンポン再生します。
  5を指定すると最終フレームに達した後RokDeBone2で指定したフレームにジャンプします。

3. [IN] int : framenum
  カメラアニメをのフレーム数を指定します。

4. [OUT] int* : animnoptr
  作成したアニメを識別する番号が代入されます。
ver5.2.2.7
E3DSetCameraFrameNum カメラ カメラアニメのフレーム長を設定します。
現在のフレーム長よりも小さい値を指定した場合は
範囲からはみ出たキーは削除されます。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [IN] int : framenum
  フレーム長を指定してください。
ver5.2.2.7
E3DGetCameraFrameNum カメラ カメラアニメのフレーム長を取得します。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [OUT] int* : framenumptr
  フレーム長が代入されます。
ver5.2.2.7
E3DSetCameraAnimName カメラ カメラアニメの名前を設定します。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [IN] char* : srcname
  カメラアニメの名前を指定します。
  255バイトまでです。
ver5.2.2.7
E3DGetCameraAnimName カメラ カメラアニメの名前を取得します。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [OUT] char* : dstname
  名前を格納する文字列の変数を指定します。

3. [IN] int : arrayleng
  dstnameの配列長を指定します。
ver5.2.2.7
E3DSetCameraAnimType カメラ カメラアニメのタイプを設定します。
タイプの詳細はE3DCreateNewCameraAnimのanimtype引数の説明をご覧ください。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [IN] int : type
  タイプを指定します。

ver5.2.2.7
E3DGetCameraAnimType カメラ カメラアニメのタイプを取得します。
タイプの詳細はE3DCreateNewCameraAnimのanimtype引数の説明をご覧ください。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [OUT] int* : typeptr
  タイプが代入されます。
ver5.2.2.7
E3DSetCameraKey カメラ カメラアニメのキーを設定します。
指定したフレーム番号にキーが存在しない場合は自動的に作成してから設定します。

E3DCAMERASTATEはusercoef.hで定義されています。

以下E3DCAMERASTATE構造体のメンバの説明。
looktypeは注視モードです。
現在注視なしモードしかサポートしていませんので
CAML_NORMALを指定してください。

hsidとbonenoは将来の拡張用のインデックスです。
-1を指定してください。

orthoも将来の拡張用のインデックスです。0を指定してください。

interpはキー間の補間方法へのインデックスです。
0を指定すると線形、1を指定するとスプライン補間になります。

pos
はカメラ位置のXYZ座標へのインデックスです。

target
はカメラの注視点のXYZ座標へのインデックスです。

up
はカメラの上方向ベクトルのXYZ成分へのインデックスです。

dist
はカメラと注視点の距離へのインデックスです。

nearz, farz
はプロジェクションの一番近い距離と一番遠い距離へのインデックスです。

fov
はプロジェクションの視野角へのインデックスです。

orthosize
は将来の拡張用のインデックスです。3000.0などの数値を入れておいてください。



具体的な使用例は
CameraAnimeソリューションをご覧ください。


ver5.2.2.8で正射影に対応しました。
orthoはパース表示のとき0、正射影表示のとき1を指定します。

orthosizeは正射影のときのビューのサイズを指定します。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [IN] int : camerano
  カメラ番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [IN] E3DCAMERASTATE : camstate
  カメラキーのメンバをセットします。
  詳しくは前記をご覧ください。

ver5.2.2.7
E3DGetCameraKey カメラ カメラアニメのキーの情報を取得します。
指定したフレーム番号にキーが無い場合は補間計算して情報を取得します。

E3DCAMERASTATEについてはE3DSetCameraKeyの説明をご覧ください。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [IN] int : camerano
  カメラ番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [OUT] E3DCAMERASTATE* : csptr
  カメラキーのメンバが代入されます。

5. [OUT] int* : exsitflag
  指定したフレーム番号にキーがあった場合は1が
  無かった場合には0が代入されます。
ver5.2.2.7
E3DDeleteCameraKey カメラ カメラアニメのキーを削除します。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [IN] int : camerano
  カメラ番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。
ver5.2.2.7
E3DGetCameraKeyframeNoRange カメラ startとendで指定したフレーム範囲のキーフレームの個数とフレーム番号を取得します。

arraylengに0を指定して呼び出すとframearray引数への代入を行わずにキーの個数のみを取得します。

E3DGetCameraKeyframeNoRange( animno, camno, start, end, 0, 0, &keynum );

framearray = (int*)malloc( sizeof( int ) * keynum );

E3DGetCameraKeyframeNoRange( animno, camno, start, end, framearray, keynum, &chknum );

のようにして使ってください。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [IN] int : camerano
  カメラ番号を指定してください。

3. [IN] int : start
4. [IN] int : end
  キーを調べたいフレーム番号の最初と最後の値を指定してください。

5. [OUT] int* : framearray
  フレーム番号がgetnum個だけ代入されます。
  arraylengが0の場合は代入されません。

6. [IN] int : arrayleng
  framearrayの配列長(要素数)を指定してください。
  0を指定するとキーの個数だけを調べます。

7. [OUT] int* : getnumptr
  取得したキーフレーム番号の個数が代入されます。
ver5.2.2.7
E3DSetCameraSWKey カメラ カメラアニメのスイッチキーをセットします。
指定したフレーム番号にキーが存在しない場合は自動的に作成してからセットします。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [IN] int : frameno
  フレーム番号を指定してください。

3. [IN] int : camerano
  カメラ番号を指定してください。
ver5.2.2.7
E3DGetCameraSWKey カメラ カメラアニメのスイッチキーの情報を取得します。
指定したフレーム番号にキーが存在しない場合は補間して情報を取得します。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [IN] int : frameno
  フレーム番号を指定してください。

3. [OUT] int* : cameranoptr
  カメラ番号が代入されます。

4. [OUT] int* : existflagptr
  指定したフレーム番号にキーがあった場合は1が
  無かった場合には0が代入されます。
ver5.2.2.7
E3DDeleteCameraSWKey カメラ カメラアニメのスイッチキーを削除します。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [IN] int : frameno
  フレーム番号を指定してください。
ver5.2.2.7
E3DGetCameraSWKeyframeNoRange カメラ startとendで指定したフレーム範囲のスイッチキーフレームの個数とフレーム番号を取得します。

arraylengに0を指定して呼び出すとframearray引数への代入を行わずにキーの個数のみを取得します。

E3DGetCameraSWKeyframeNoRange( animno, start, end, 0, 0, &keynum )

framearray = (int*)malloc( sizeof(int) * keynum );

E3DGetCameraSWKeyframeNoRange( animno, start, end, framearray, keynum, &chknum );

のようにして使ってください。
1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [IN] int : start
3. [IN] int : end
  キーを調べたいフレーム番号の最初と最後の値を指定してください。

4. [OUT] int* : framearray
  フレーム番号がgetnum個だけ代入されます。
  arraylengが0の場合は代入されません。

5. [IN] int : arrayleng
  framearrayの配列長(要素数)を指定してください。
  0を指定するとキーの個数だけを調べます。

6. [OUT] int* : getnumptr
  取得したキーフレーム番号の個数が代入されます。
ver5.2.2.7
E3DSetOrtho 描画パラメータ 正射影をオンにし、正射影のパラメータを設定します。
1. [IN] float : proj_near
  クリッピングの最小距離。
  実数。

2. [IN] float : proj_far
  クリッピングの最大距離。
  実数。

3. [IN] float : orthosize
  正射影のビューの大きさ。
  実数。
ver5.2.2.8
E3DLoadGPFile GPA RokDeBone2で作成したGPAファイル(*.gpa)を読み込み
アニメ番号を取得します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] char* : filename
  GPAファイルのファイル名をフルパスで指定してください。

3. [OUT] int* : animnoptr
  読み込んだアニメを識別するアニメ番号が代入されます。
ver5.2.2.9
E3DDestroyGPAnim GPA GPAを破棄します。 1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。
ver5.2.2.9
E3DSaveGPFile GPA GPアニメをテキストファイルに保存します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] char* : filename
  GPAファイルのファイル名をフルパスで指定してください。

3. [IN] int : animno
  GPアニメを識別する番号を指定してください。
ver5.2.2.9
E3DSetGPAnimNo GPA カレントのGPアニメ番号をセットします。
フレーム番号は0に戻ります。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。
ver5.2.2.9
E3DGetGPAnimNo GPA カレントのGPアニメ番号を取得します。 1. [IN] int : hsid
  形状データを識別するID

2. [OUT] int* : animnoptr
  GPアニメを識別する番号が代入されます。
ver5.2.2.9
E3DSetGPFrameNo GPA 再生するGPアニメのアニメ番号とフレーム番号を設定します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [IN] int : isfirst
  この命令を呼んだ後にE3DSetNewGPを呼び出す場合は1を、呼び出さない場合は0を指定します。
ver5.2.2.9
E3DGetGPFrameNo GPA 現在再生中のGPアニメのアニメ番号、フレーム番号を取得します。
1. [IN] int : hsid
  形状データを識別するID

2. [OUT] int* : animnoptr
  GPアニメを識別する番号が代入されます。

3. [OUT] int* : framenoptr
  フレーム番号が代入されます。
ver5.2.2.9
E3DSetNewGP GPA アニメのフレームをアニメタイプに従って進め、新しいGP情報をセットします。
1. [IN] int : hsid
  形状データを識別するID
ver5.2.2.9
E3DSetNextGPAnimFrameNo GPA animnoで識別されるアニメがbefframenoのフレーム番号に達したらnextanimnoで識別されるアニメのnextframenoに切り替えることを予約します。
アニメの切り替えはE3DSetNewGPで行われます。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [IN] int : nextanimno
  切り替え先のGPアニメを識別する番号を指定してください。

4. [IN] int : nextframeno
  切り替え先のGPアニメのフレーム番号を指定してください。

5. [IN] int : befframeno
  切り替え前のGPアニメがbefframenoフレームまで達したらアニメの切り替えが起こります。
  -1を指定した場合は切り替え前のアニメが最終フレームに達したときにアニメが切り替わります。
ver5.2.2.9
E3DGetNextGPAnimFrameNo GPA E3DSetNextGPAnimFrameNoで設定した情報を取得します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [OUT] int* : nextanimnoptr
  切り替え先のGPアニメを識別する番号が代入されます。

4. [OUT] int* : nextframenoptr
  切り替え先のGPアニメのフレーム番号が代入されます。
ver5.2.2.9
E3DCreateNewGPAnim GPA GPアニメを作成しアニメを識別する番号を取得します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] char* : animname
  アニメの名前を指定します。
  255バイトまでです。

3. [IN] int : animtype
  アニメの振る舞いを指定します。
  1を指定するとフレーム番号は進みません。
  2を指定すると最終フレーム番号に達したらその状態を維持します。
  3を指定するとループします。
  4を指定するとピンポン再生します。
  5を指定すると最終フレームに達した後RokDeBone2で指定したフレームにジャンプします。

4. [IN] int : framenum
  GPアニメをのフレーム数を指定します。

5. [OUT] int* : animnoptr
  作成したアニメを識別する番号が代入されます。
ver5.2.2.9
E3DSetGPFrameNum GPA GPアニメのフレーム長を設定します。
現在のフレーム長よりも小さい値を指定した場合は
範囲からはみ出たキーは削除されます。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [IN] int : framenum
  フレーム長を指定してください。
ver5.2.2.9
E3DGetGPFrameNum GPA GPアニメのフレーム長を取得します。 1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [OUT] int* : framenumptr
  フレーム長が代入されます。
ver5.2.2.9
E3DSetGPAnimName GPA GPアニメの名前を設定します。 1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [IN] char* : srcname
  GPアニメの名前を指定します。
  255バイトまでです。
ver5.2.2.9
E3DGetGPAnimName GPA GPアニメの名前を取得します。 1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [OUT] char* : dstname
  名前を格納する文字列の変数を指定します。

4. [IN] int : arrayleng
  dstnameの配列長を指定します。
ver5.2.2.9
E3DSetGPAnimType GPA GPアニメのタイプを設定します。
タイプの詳細はE3DCreateNewGPAnimのanimtype引数の説明をご覧ください。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [IN] int : type
  タイプを指定します。

ver5.2.2.9
E3DGetGPAnimType GPA GPアニメのタイプを取得します。
タイプの詳細はE3DCreateNewGPAnimのanimtype引数の説明をご覧ください。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [OUT] int* : typeptr
  タイプが代入されます。
ver5.2.2.9
E3DSetGPKey GPA GPアニメのキーを設定します。
指定したフレーム番号にキーが存在しない場合は自動的に作成してから設定します。

E3DGPSTATEはusercoef.hで定義されています。

以下E3DGPSTATE構造体のメンバの説明。
posは
キャラクターの位置座標です。
rotは
キャラクターの回転角度です。
Z,X,Yの順番に回転します。
ongmodeは
接地モードです。GROUND_NONEを指定したときは接地なし。GROUND_ONEを指定したときはキーの瞬間だけ接地。GROUND_ONを指定した場合は次のキーまでの間接地します。
GROUND_で始まる定数はusercoef.hで定義されています。
rayyは
接地用のレイの始点のY座標です。
raylengは
接地用のレイの長さです。
offsetyは
接地用の地面からの高さです。
interpは
キー間の補間方法へのインデックスです。
0を指定すると線形、1を指定するとスプライン補間になります。


E3DSetGPKeyを呼び出しても再生用のデータには反映されません。再生用のデータに反映したい場合はE3DCalcGPFullFrameを呼び出してください。
E3DCalcGPFullFrameは重い処理ですので全てのE3DSetGPKeyが終わってから最後に1度だけ呼び出すようにすると良いです。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [IN] E3DGPSTATE : gpstate
  GPキーのメンバをセットします。
  詳しくは前記をご覧ください。

ver5.2.2.9
E3DGetGPKey GPA GPアニメのキーの情報を取得します。
指定したフレーム番号にキーが無い場合は補間計算して情報を取得します。

E3DGPSTATEについてはE3DSetGPKeyの説明をご覧ください。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [OUT] E3DGPSTATE* : gsptr
  GPキーのメンバが代入されます。

5. [OUT] int* : exsitflag
  指定したフレーム番号にキーがあった場合は1が
  無かった場合には0が代入されます。
ver5.2.2.9
E3DDeleteGPKey GPA GPアニメのキーを削除します。

E3DDeleteGPKeyを呼び出しても再生用のデータには反映されません。再生用のデータに反映したい場合はE3DCalcGPFullFrameを呼び出してください。
E3DCalcGPFullFrameは重い処理ですので全てのE3DDeleteGPKeyが終わってから最後に1度だけ呼び出すようにすると良いです。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。
ver5.2.2.9
E3DGetGPKeyframeNoRange GPA startとendで指定したフレーム範囲のキーフレームの個数とフレーム番号を取得します。

arraylengに0を指定して呼び出すとframearray引数への代入を行わずにキーの個数のみを取得します。

E3DGetGPKeyframeNoRange( animno, start, end, 0, 0, &keynum );

framearray = (int*)malloc( sizeof( int ) * keynum );

E3DGetGPKeyframeNoRange( animno, start, end, framearray, keynum, &chknum );

のようにして使ってください。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [IN] int : start
4. [IN] int : end
  キーを調べたいフレーム番号の最初と最後の値を指定してください。

5. [OUT] int* : framearray
  フレーム番号がgetnum個だけ代入されます。
  arraylengが0の場合は代入されません。

6. [IN] int : arrayleng
  framearrayの配列長(要素数)を指定してください。
  0を指定するとキーの個数だけを調べます。

7. [OUT] int* : getnumptr
  取得したキーフレーム番号の個数が代入されます。
ver5.2.2.9
E3DCalcGPFullFrame GPA GPアニメのキー情報から全てのフレームの姿勢情報を計算します。
この結果はGPアニメの再生やE3DGetGPKeyなどに使われます。

重い処理ですのでなるべく呼び出し回数は少なくしてください。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。
ver5.2.2.9
E3DSetGPGroundHSID GPA GPアニメの接地用の地面のHSIDを指定します。 1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [IN] int : ghsid
  接地用の地面のモデルデータを識別するID。

ver5.2.2.9
E3DGetGPGroundHSID GPA GPアニメの接地用の地面のHSIDを取得します。 1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [OUT] int* : ghsidptr
  接地用の地面のモデルデータを識別するIDが代入されます。
ver5.2.2.9
E3DLoadMOEFile MOE RokDeBone2で作成したMOEファイル(*.moe)を読み込み
アニメ番号を取得します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] char* : filename
  MOEファイルのファイル名をフルパスで指定してください。

3. [OUT] int* : animnoptr
  読み込んだアニメを識別するアニメ番号が代入されます。
ver5.2.3.1
E3DDestroyMOEAnim MOE MOEアニメを破棄します。 1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。
ver5.2.3.1
E3DSaveMOEFile MOE MOEアニメをテキストファイルに保存します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] char* : filename
  MOEファイルのファイル名をフルパスで指定してください。

3. [IN] int : animno
  MOEアニメを識別する番号を指定してください。
ver5.2.3.1
E3DSetMOEAnimNo MOE カレントのMOEアニメ番号をセットします。
フレーム番号は0に戻ります。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。
ver5.2.3.1
E3DGetMOEAnimNo MOE カレントのGPアニメ番号を取得します。 1. [IN] int : hsid
  形状データを識別するID

2. [OUT] int* : animnoptr
  MOEアニメを識別する番号が代入されます。
ver5.2.3.1
E3DSetMOEFrameNo MOE 再生するMOEアニメのアニメ番号とフレーム番号を設定します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [IN] int : isfirst
  この命令を呼んだ後にE3DSetNewMOEを呼び出す場合は1を、呼び出さない場合は0を指定します。
ver5.2.3.1
E3DGetMOEFrameNo MOE 現在再生中のMOEアニメのアニメ番号、フレーム番号を取得します。
1. [IN] int : hsid
  形状データを識別するID

2. [OUT] int* : animnoptr
  MOEアニメを識別する番号が代入されます。

3. [OUT] int* : framenoptr
  フレーム番号が代入されます。
ver5.2.3.1
E3DSetNewMOE MOE アニメのフレームをアニメタイプに従って進め、新しいMOE情報をセットします。
1. [IN] int : hsid
  形状データを識別するID
ver5.2.3.1
E3DSetNextMOEAnimFrameNo MOE animnoで識別されるアニメがbefframenoのフレーム番号に達したらnextanimnoで識別されるアニメのnextframenoに切り替えることを予約します。
アニメの切り替えはE3DSetNewMOEで行われます。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [IN] int : nextanimno
  切り替え先のMOEアニメを識別する番号を指定してください。

4. [IN] int : nextframeno
  切り替え先のMOEアニメのフレーム番号を指定してください。

5. [IN] int : befframeno
  切り替え前のMOEアニメがbefframenoフレームまで達したらアニメの切り替えが起こります。
  -1を指定した場合は切り替え前のアニメが最終フレームに達したときにアニメが切り替わります。
ver5.2.3.1
E3DGetNextMOEAnimFrameNo MOE E3DSetNextMOEAnimFrameNoで設定した情報を取得します。 1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [OUT] int* : nextanimnoptr
  切り替え先のMOEアニメを識別する番号が代入されます。

4. [OUT] int* : nextframenoptr
  切り替え先のMOEアニメのフレーム番号が代入されます。
ver5.2.3.1
E3DCreateNewMOEAnim MOE MOEアニメを作成しアニメを識別する番号を取得します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] char* : animname
  アニメの名前を指定します。
  255バイトまでです。

3. [IN] int : animtype
  アニメの振る舞いを指定します。
  1を指定するとフレーム番号は進みません。
  2を指定すると最終フレーム番号に達したらその状態を維持します。
  3を指定するとループします。
  4を指定するとピンポン再生します。
  5を指定すると最終フレームに達した後RokDeBone2で指定したフレームにジャンプします。

4. [IN] int : framenum
  MOEアニメをのフレーム数を指定します。

5. [OUT] int* : animnoptr
  作成したアニメを識別する番号が代入されます。
ver5.2.3.1
E3DSetMOEFrameNum MOE MOEアニメのフレーム長を設定します。
現在のフレーム長よりも小さい値を指定した場合は
範囲からはみ出たキーは削除されます。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [IN] int : framenum
  フレーム長を指定してください。
ver5.2.3.1
E3DGetMOEFrameNum MOE MOEアニメのフレーム長を取得します。 1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [OUT] int* : framenumptr
  フレーム長が代入されます。
ver5.2.3.1
E3DSetMOEAnimName MOE MOEアニメの名前を設定します。 1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [IN] char* : srcname
  MOEアニメの名前を指定します。
  255バイトまでです。
ver5.2.3.1
E3DGetMOEAnimName MOE MOEアニメの名前を取得します。 1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [OUT] char* : dstname
  名前を格納する文字列の変数を指定します。

4. [IN] int : arrayleng
  dstnameの配列長を指定します。
ver5.2.3.1
E3DSetMOEAnimType MOE MOEアニメのタイプを設定します。
タイプの詳細はE3DCreateNewMOEAnimのanimtype引数の説明をご覧ください。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [IN] int : type
  タイプを指定します。
ver5.2.3.1
E3DGetMOEAnimType MOE MOEアニメのタイプを取得します。
タイプの詳細はE3DCreateNewMOEAnimのanimtype引数の説明をご覧ください。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  GPアニメを識別する番号を指定してください。

3. [OUT] int* : typeptr
  タイプが代入されます。
ver5.2.3.1
E3DGetMOEKeyframeNoRange MOE startとendで指定したフレーム範囲のキーフレームの個数とフレーム番号を取得します。

arraylengに0を指定して呼び出すとframearray引数への代入を行わずにキーの個数のみを取得します。

E3DGetMOEKeyframeNoRange( animno, start, end, 0, 0, &keynum );

framearray = (int*)malloc( sizeof( int ) * keynum );

E3DGetMOEKeyframeNoRange( animno, start, end, framearray, keynum, &chknum );

のようにして使ってください。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [IN] int : start
4. [IN] int : end
  キーを調べたいフレーム番号の最初と最後の値を指定してください。

5. [OUT] int* : framearray
  フレーム番号がgetnum個だけ代入されます。
  arraylengが0の場合は代入されません。

6. [IN] int : arrayleng
  framearrayの配列長(要素数)を指定してください。
  0を指定するとキーの個数だけを調べます。

7. [OUT] int* : getnumptr
  取得したキーフレーム番号の個数が代入されます。
ver5.2.3.1
E3DGetMOEElemNum MOE MOEアニメのキーに含まれるMOEELEMの数を取得します。
MOEELEMはusercoef.hで定義されています。
キーにはMOEELEM複数のMOEELEMとアイドリングモーションが含まれています。
MOEELEMが0個でアイドリングモーションだけのキーも存在するので注意してください。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [OUT] int* : moeenumptr
  キーに含まれるMOEELEMの数が代入されます。

5. [OUT] int* : existkeyptr
  指定したフレームにキーが存在するときは1、しないときは0が代入されます。

ver5.2.3.1
E3DGetMOEElem MOE キーに含まれるMOEELEMの情報を取得します。
MOEELEMはusercoef.hで定義されています。
moeeindexにはE3DGetMOEElemNumで取得したMOEELEMの個数をmoeenumとすると、
0から(moeenum - 1)までの数を指定してください。
MOELEMの構成要素の説明については
RokDeBone2のマニュアルの「moaイベントアニメとは」のページをご覧ください。

1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [IN] int : moeeindex
  0からmoeenum - 1までの数を指定してください。

5. [OUT] MOEELEM* : moeeptr
  MOEELEMの情報が代入されます。

ver5.2.3.1
E3DAddMOEElem MOE MOEアニメのキーにMOEELEMを追加します。
指定したフレームにキーが無い場合はキーを自動的にキーを作成した後にMOEELEMを追加します。

MOEELEMのlistの最初の要素list[0]にのみ負の値-1を指定することが出来ます。
-1は「全てのボーン」を意味します。

この命令を呼び出しても再生用のデータには反映されません。再生用のデータに反映したい場合はE3DCalcMOEFullFrameを呼び出してください。
E3DCalcMOEFullFrameは重い処理ですので全ての編集命令が終わってから最後に1度だけ呼び出すようにすると良いです。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [IN] MOEELEM : moee
  MOEELEMのを指定します。
ver5.2.3.1
E3DDeleteMOEElem MOE MOEアニメのキーからMOEELEMを削除します。
moeeindexに-1を指定するとキー中の全てのMOEELEMを削除します。
MOEELEMが0個になってもキーは削除されません。


この命令を呼び出しても再生用のデータには反映されません。再生用のデータに反映したい場合はE3DCalcMOEFullFrameを呼び出してください。
E3DCalcMOEFullFrameは重い処理ですので全ての編集命令が終わってから最後に1度だけ呼び出すようにすると良いです。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [IN] int : moeeindex
  通常0からmoeenum - 1までの数を指定してください。-1を指定すると全てのMOEELEMを削除します。
ver5.2.3.1
E3DSetMOEKeyIdling MOE MOEアニメのキーのアイドリングモーション情報を設定します。

この命令を呼び出しても再生用のデータには反映されません。再生用のデータに反映したい場合はE3DCalcMOEFullFrameを呼び出してください。
E3DCalcMOEFullFrameは重い処理ですので全ての編集命令が終わってから最後に1度だけ呼び出すようにすると良いです。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [IN] int : motid
  アイドリングモーションのIDを指定してください。
ver5.2.3.1
E3DGetMOEKeyIdling MOE MOEアニメのキーのアイドリングモーション情報を取得します。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [IN] int* : motidptr
  アイドリングモーションのIDが代入されます。
ver5.2.3.1
E3DDeleteMOEKey MOE MOEアニメのキーを削除します。

E3DDeleteMOEKeyを呼び出しても再生用のデータには反映されません。再生用のデータに反映したい場合はE3DCalcMOEFullFrameを呼び出してください。
E3DCalcMOEFullFrameは重い処理ですので全てのE3DDeleteMOEKeyが終わってから最後に1度だけ呼び出すようにすると良いです。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。
ver5.2.3.1
E3DCalcMOEFullFrame MOE MOEアニメのキー情報から全てのフレームの姿勢情報を計算します。
この結果はMOEアニメの再生に使われます。

重い処理ですのでなるべく呼び出し回数は少なくしてください。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : animno
  MOEアニメを識別する番号を指定してください。
ver5.2.3.1
E3DCreateAndSaveTempMaterial マテリアル 現在表示している頂点マテリアルの情報を一時メモリに退避します。 1. [IN] int : hsid
  形状データを識別するID

ver5.2.3.3
E3DRestoreAndDestroyTempMaterial マテリアル E3DCreateAndSaveTempMaterialで退避した頂点マテリアルを現在の頂点マテリアルに適用し、退避していたメモリを削除します。 1. [IN] int : hsid
  形状データを識別するID

ver5.2.3.3
E3DSetMaterialFromInfElem マテリアル 頂点マテリアルの色を影響度の計算方法情報の種類に応じて設定します。
infcolarrayを省略したときはRokDeBone2の「影3」での頂点ペイント時の配色と同じです。
1. [IN] int : hsid
  形状データを識別するID

2. [IN] int : jointno
  ここで指定したジョイントの影響度の色がセットされます。
  -1を指定すると対称ペイントの部分のみの色が表示されます。

3. [IN] int : partno
  パーツを識別するID。
  -1を指定すると全てのパーツにセットします。

4. [IN] int : vertno
  頂点の番号。
  -1を指定すると全ての頂点に設定します。

5. [IN] E3DCOLOR3UC* : infcolarray
  影響度の各計算モードの色を指定します。
  E3DCOLOR3UC infcolarray[ CALCMODE_MAX ];で確保した配列を指定してください。
  CALCMODE_で始まる定数はusercoef.hで定義されています。
  各モードの説明はE3DGetInfElemの説明をご覧ください。
  この引数を省略した場合はRokDeBone2と同じ色になります。
  この引数を指定した場合はモデルを読み込んでいる間だけ配色情報が保存されます。
(sigには保存されません。)

ver5.2.3.3
ver5.2.3.4で拡張
E3DUpdateSound サウンド 音の更新処理をします。
同じ音の多重再生のための情報更新や3Dサウンドパラメータの反映などが主な動作です。

毎フレーム呼び出してください。
なし ver5.3.0.0
E3DGetSoundSamplesPlayed サウンド 音の現在の再生位置を取得します。
サンプル(周波数)単位の値です。
1. [IN] int : soundid
  音データを識別するID

2. [OUT] double* : smpptr
  再生位置が代入されます。

ver5.3.0.0
E3DSetSoundFrequency サウンド 音の周波数を設定します。 1. [IN] int : soundid
  設定したい音を識別する番号
  -1を指定すると読み込み済みの全てのサウンドに対して処理します。

2. [IN] float : freq
  ソース周波数との比率を指定します。
ver5.3.0.1
ver5.3.4.1で拡張
E3DGetSoundFrequency サウンド 現在の周波数を取得します。
1. [IN] int : soundid
  音を識別する番号

2. [OUT] float* : freqptr
  ソース周波数との比率が代入されます。
ver5.3.0.1
E3DSet3DSoundEmiDist サウンド 3Dサウンドの音の届く距離を指定します。
E3DUpdateSoundで適用されます。
1. [IN] int : soundid
  音データを識別するID

2. [IN] float : dist
  音の届く最大距離。
ver5.3.0.3
E3DFadeSound サウンド フェード処理をします。
E3DPlaySoundよりも後で呼びます。
1. [IN] int : soundid
  音データを識別するID

2. [IN] int : msc
3. [IN] float : startgain
4. [IN] float : endgain
  mscミリセカンドの間に音のゲインをstartgainからendgainに変化させます。
  gainは実数。1.0が等倍。
ver5.3.0.5
E3DGlobalToLocalParBone 算術 グローバル座標系の座標値とクォータニオンを
指定したボーンの親のボーンのローカル座標系に変換します。

つまり親の影響を除いた値を取得できます。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [IN] int : boneno
  ボーンを識別する番号を指定してください。

5. [IN] int : flag
  フラグに1をセットするとクォータニオンのみを変換します。2をセットすると座標値のみを変換します。3をセットするとクォータニオンと座標値の両方を変換します。

6. [IN] int : srcqid
  変換前の情報が入っているクォータニオンのID。

7. [IN, OUT] int : dstqid
  変換後のクォータニオン情報を格納するクォータニオンのID。
  E3DCreateQで作成したクォータニオンのIDを指定してください。

8. [IN] D3DXVECTOR3* : srcvecptr
  変換前の座標値を指定します。

9. [OUT] D3DXVECTOR3* : dstvecptr
  変換後の座標値が代入されます。

ver5.3.0.7
E3DLocalToGlobalParBone 算術 ローカル座標系の座標値とクォータニオンを
指定したボーンの親のボーンの影響を考慮したグローバル座標系に変換します。

E3DGlobalToLocalParBoneの逆変換です。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定してください。

4. [IN] int : boneno
  ボーンを識別する番号を指定してください。

5. [IN] int : flag
  フラグに1をセットするとクォータニオンのみを変換します。2をセットすると座標値のみを変換します。3をセットするとクォータニオンと座標値の両方を変換します。

6. [IN] int : srcqid
  変換前の情報が入っているクォータニオンのID。

7. [IN, OUT] int : dstqid
  変換後のクォータニオン情報を格納するクォータニオンのID。

  E3DCreateQで作成したクォータニオンのIDを指定してください。


8. [IN] D3DXVECTOR3* : srcvecptr
  変換前の座標値を指定します。

9. [OUT] D3DXVECTOR3* : dstvecptr
  変換後の座標値が代入されます。

ver5.3.0.7
E3DGetInfElemSymParams ボーン影響 CALCMODE_SYMで頂点ペイントした頂点の対称軸と対称距離を取得します。

対称軸はusercoef.hで定義されている
SYMAXIS_ で始まる定数を使います。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [IN] int : vertno
  頂点の番号を指定してください。

4. [OUT] int* : symaxisptr
  対称軸が代入されます。
  usercoef.hで定義されている
  SYMAXIS_*を参照してください。

5. [OUT] float* : distptr
  対称距離が代入されます。
  対称距離とは、完全な対称な位置からどれくらいの距離にあるものを対称とみなすかを決める値です。

ver5.3.1.1
E3DDestroyMotion モーション モーションを1つだけ削除します。
モーションを削除すると読み込み済みの全てのモーションのIDが変化します。
それを取得するためにIDCHANGE構造体を使います。
IDCHANGEはusercoef.hで定義されています。
befidに削除前のIDを代入しておいてください。
newidに削除後の新しいIDが代入されます。
読み込み済みの全てのモーション分IDCHANGEの配列を作成してください。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  削除するモーションのID。

3. [IN, OUT] IDCHANGE* : idchgptr
  削除後の新しいIDを受け取る構造体の配列へのポインタ。
  befidにはあらかじめ値をセットしてください。

4. [IN] int : idnum
  IDCHANGE引数に渡した配列の要素数。

ver5.3.1.3
E3DGetIKTargetPos モデル情報 IKターゲットの位置を取得します。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : bone
  ボーンを識別する番号を指定してください。

3. [OUT] D3DXVECTOR3* : posptr
  位置が代入されます。

ver5.3.1.3
E3DGetIKTargetState モデル情報 IKターゲットの状態を取得します。
0のときは削除されている状態。
1のときは有効になっている状態。
2のときは作成されてはいるが無効になっている状態。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : bone
  ボーンを識別する番号を指定してください。

3. [OUT] int* : stateptr
  状態が代入されます。
ver5.3.1.3
E3DGetIKTargetCnt モデル情報 IKターゲットの計算回数を取得します。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : bone
  ボーンを識別する番号を指定してください。

3. [OUT] int* : cntptr
  回数が代入されます。
ver5.3.1.3
E3DGetIKTargetLevel モデル情報 IKターゲットの階層数を取得します。
階層数分親までさかのぼってIK計算されます。
ただし途中でIK伝達禁止フラグがあった場合は
IK計算はそこでストップします。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : bone
  ボーンを識別する番号を指定してください。

3. [OUT] int* : levelptr
  階層数が代入されます。
ver5.3.1.3
E3DGetIKLevel モデル情報 通常のIK計算時の計算階層数を取得します。
階層数分親までさかのぼってIK計算されます。
ただし途中でIK伝達禁止フラグがあった場合は
IK計算はそこでストップします。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : bone
  ボーンを識別する番号を指定してください。

3. [OUT] int* : levelptr
  階層数が代入されます。
ver5.3.1.3
E3DSetIKTargetPos モデル情報 IKターゲットの位置をセットします。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : bone
  ボーンを識別する番号を指定してください。

3. [IN] D3DXVECTOR3 : srcpos
  位置を指定します。
ver5.3.1.3
E3DSetIKTargetState モデル情報 IKターゲットの状態をセットします。
0のときは削除されている状態。
1のときは有効になっている状態。
2のときは作成されてはいるが無効になっている状態。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : bone
  ボーンを識別する番号を指定してください。

3. [IN] int : srcstate
  状態を指定します。
ver5.3.1.3
E3DSetIKTargetCnt モデル情報 IKターゲットの計算回数をセットします。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : bone
  ボーンを識別する番号を指定してください。

3. [IN] int : srccnt
  回数を指定します。
ver5.3.1.3
E3DSetIKTargetLevel モデル情報 IKターゲットの階層数をセットします。
階層数分親までさかのぼってIK計算されます。
ただし途中でIK伝達禁止フラグがあった場合は
IK計算はそこでストップします。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : bone
  ボーンを識別する番号を指定してください。

3. [IN] int : srclevel
  階層数を指定します。
ver5.3.1.3
E3DSetIKLevel モデル情報 通常のIK計算時の計算階層数をセットします。
階層数分親までさかのぼってIK計算されます。
ただし途中でIK伝達禁止フラグがあった場合は
IK計算はそこでストップします。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : bone
  ボーンを識別する番号を指定してください。

3. [IN] int : srclevel
  階層数を指定します。
ver5.3.1.3
E3DGetQVal 算術 クォータニオンの値を取得します。
E3DQ構造体はusercoef.hで定義されています。
1. [IN] int : qid
  クォータニオンを識別するIDを指定してください。

2. [OUT] E3DQ* : qptr
  クォータニオンの値が代入されます。

ver5.3.1.3
E3DSetQVal 算術 クォータニオンの値をセットします。
E3DQ構造体はusercoef.hで定義されています。
1. [IN] int : qid
  クォータニオンを識別するIDを指定してください。

2. [IN] E3DQ : srcq
  クォータニオンの値を指定します。
ver5.3.1.3
E3DMultQArray 算術 クォータニオンの掛け算をします。
qnum個のクォータニオンをqidarrayで指定した先頭のクォータニオンから順番に掛け算します。
1. [IN] int* : qidarray
  クォータニオンを識別するIDの配列を指定してください。
 
2. [IN] int : qnum
  qidarrayで指定した配列の要素数を指定します。

3. [IN, OUT] int : resultqid
  結果を格納するクォータニオンのIDを指定します。

ver5.3.1.3
E3DEulerZXY2Q 算術 オイラー回転角度をクォータニオンに変換します。
回転の順番はZ、X、Yです。
1. [IN, OUT] int : qid
  結果を格納するクォータニオンのIDを指定してください。

2. [IN] D3DXVECTOR3 : srceul
  オイラー角度を指定します。

ver5.3.1.3
E3DGetEulerLimit モデル情報 IKの制限角度情報を取得します。
EULERLIMIT構造体はusercoef.hで定義されています。
ignoreflagは1のとき制限角度を無視します。
lim0とlim1は制限角度の両端のオイラー角を示します。
回転の順序はZ,X,Yです。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : bone
  ボーンを識別する番号を指定してください。

3. [OUT] EULERLIMIT* : elptr
  制限角度情報が代入されます。

ver5.3.1.3
E3DSetEulerLimit モデル情報 IKの制限角度情報をセットします。
EULERLIMIT構造体はusercoef.hで定義されています。
ignoreflagは1のとき制限角度を無視します。
lim0とlim1は制限角度の両端のオイラー角を示します。
回転の順序はZ,X,Yです。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : bone
  ボーンを識別する番号を指定してください。

3. [IN] EULERLIMIT : srcel
  制限角度情報を指定します。
ver5.3.1.3
E3DCalcEuler モーション 指定モーションの全てのボーンの全てのモーションポイントのオイラー角を計算します。

zakindには座標系を指定します。
usercoef.hで定義されているZA_*を使ってください。
RokDeBone2の「座1」から「座4」に対応しています。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : zakind
  座標系を指定します。


ver5.3.1.3
E3DGetBoneEuler モーション ボーンごとにモーションポイントのオイラー角度を取得します。
モーションポイントが存在しないときは補間計算してオイラー角を求めます。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  モーションのフレーム番号を指定してください。

5. [OUT] D3DXVECTOR3* : eulptr
  オイラー角が代入されます。
ver5.3.1.3
E3DGetZa4Elem モデル情報 RokDeBone2の「座4」のパラメータを取得します。
ZA4ELEM構造体はusercoef.hで定義されています。
zatypeにはZA_*を指定します。
rotaxisにはROTAXIS_*を指定します。
za4qには追加の姿勢情報を指定します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [OUT] ZA4ELEM* : z4eptr
  座4パラメータが代入されます。

ver5.3.1.3
E3DSetZa4Elem モデル情報 RokDeBone2の「座4」のパラメータをセットします。
ZA4ELEM構造体はusercoef.hで定義されています。
zatypeにはZA_*を指定します。
rotaxisにはROTAXIS_*を指定します。
za4qには追加の姿勢情報を指定します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] ZA4ELEM : srcz4e
  座4パラメータを指定します。
ver5.3.1.3
E3DCalcZa4LocalQ モデル情報 座4での姿勢を表すクォータニオンを計算します。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : frameno
  モーションのフレーム番号を指定してください。

ver5.3.1.3
E3DGetZa4LocalQ モデル情報 E3DCalcZaLocalQでの計算結果をボーンごとに取得します。
E3DQ構造体はusercoef.hで定義されています。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [OUT] E3DQ* : dstq
  クォータニオンが代入されます。
ver5.3.1.3
E3DGetZa3IniQ モデル情報 座3の初期状態の座標系を表すクォータニオンを取得します。
E3DQ構造体はusercoef.hで定義されています。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [OUT] E3DQ* : dstq
  クォータニオンが代入されます。
ver5.3.1.3
E3DSetBoneAxisQ モデル情報 ボーンの座標系を表すクォータニオンを計算します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  モーションのフレーム番号を指定してください。

5. [IN] int : zakind
  座標系を指定します。
  usercoef.hで定義されているZA_*を使います。

ver5.3.1.3
E3DGetBoneAxisQ モデル情報 E3DSetBoneAxisQで計算した結果を取得します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [OUT] E3DQ* : dstq
  クォータニオンが代入されます。
ver5.3.1.3
E3DGetBoneTra モーション ボーンの移動成分を取得します。
モーションポイントが存在しない場合は補間計算して情報を取得します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  フレーム番号を指定してください。

5. [OUT] D3DXVECTOR3* : vecptr
  移動成分が代入されます。

6. [OUT] int* : existptr
  指定したフレームにモーションポイントが存在する場合は1が、しない場合は0が代入されます。

ver5.3.1.4
E3DGetBoneScale モーション ボーンの拡大縮小成分を取得します。
モーションポイントが存在しない場合は補間計算して情報を取得します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  フレーム番号を指定してください。

5. [OUT] D3DXVECTOR3* : vecptr
  拡大縮小成分が代入されます。

6. [OUT] int* : existptr
  指定したフレームにモーションポイントが存在する場合は1が、しない場合は0が代入されます。
ver5.3.1.4
E3DSetBoneTra モーション ボーンの移動成分を設定します。
モーションポイントが存在しない場合はエラーになります。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  フレーム番号を指定してください。

5. [IN] D3DXVECTOR3 : srcvec
  移動成分を指定します。
ver5.3.1.4
E3DSetBoneScale モーション ボーンの拡大縮小成分を取得します。
モーションポイントが存在しない場合はエラーになります。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  フレーム番号を指定してください。

5. [IN] D3DXVECTOR3 : srcvec
  拡大縮小成分を指定します。
ver5.3.1.4
E3DGetBoneMatrix モーション ボーンの変換行列を取得します。
モーションポイントが存在しなくても取得できます。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  フレーム番号を指定してください。

5. [IN] int : kind
  親の変換行列を掛けた行列を取得したい場合は1を、親の影響を受けていない行列を取得したい場合は0を指定します。

6. [OUT] D3DXMATRIX* : matptr
  変換行列が代入されます。
ver5.3.1.4
E3DCreateMotionPoint モーション モーションポイントを作成します。
前後のモーションポイントを調べて補間計算したモーション情報をセットします。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  フレーム番号を指定してください。
ver5.3.1.4
E3DTransform 描画準備 表示オブジェクトとボーンに表示用の変換マトリックスをセットします。

この命令はE3DRenderの内部で呼ばれますので通常は必要ありません。

変換マトリックスセットと表示処理とを分けたいときに使ってください。

この命令を呼んだときはE3DRenderのtransskip引数に1をセットしてE3DRenderでのマトリックスセットをスキップすることを想定しています。

1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneonly
  ボーンのマトリックスのみをセットしたいときに1を設定します。
  全てのマトリックスをセットしたいときは0を設定します。
ver5.3.1.5
E3DGetIKSkip モデル情報 ボーンのIKスキップのフラグを取得します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [OUT] int* : flagptr
  IKスキップフラグが代入されます。
ver5.3.1.7
E3DSetIKSkip モデル情報 ボーンのIKスキップのフラグを設定します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] int : flag
  IKスキップフラグを指定します。
ver5.3.1.7
E3DGetMaterialTexParams マテリアル 面マテリアルのテクスチャに関するパラメータを取得します。

パラメータの取得にはMATERIALTEXというusercoef.hで定義されている構造体を使います。

以下、MATERIALTEXのメンバーの説明。

texは1枚目のテクスチャのファイル名です。
テクスチャが無い場合はtex[0]が0です。

bumpはバンプマップテクスチャ名です。
バンプを使わないときはbump[0]が0です。
バンプを使う場合はbumpだけでなくtexにもテクスチャが指定されていなければなりません。

exttexnumは拡張テクスチャの枚数です。MAXEXTTEXNUM(現在は100)枚までテクスチャを指定できます。

exttexは拡張テクスチャのファイル名です。
使わない場合は0初期化します。

exttexmodeはテクスチャモードです。
EXTTEXMODE_で始まるusercoef.hで定義されている定数を使います。
EXTTEXMODE_NORMALはテクスチャを1枚だけ指定するモードです。
EXTTEXMODE_ANIMはテクスチャアニメを使用するモードです。
EXTTEXMODE_GLOWは不透明グローを使用するモードです。
EXTTEXMODE_GLOWALPHAは半透明グローを使用するモードです。

transparentは透過モードです。
0は不透明。1は黒透過。2はテクスチャのアルファによる半透明。

uanim, vanimはUVアニメの毎フレームの移動量です。

texruleはテクスチャの貼り方です。
usercoef.hで定義されているTEXRULE_で始まる定数を使います。
TEXRULE_X, TEXRULE_Y, TEXRULE_ZはそれぞれX,Y,Z軸投影。
TEXRULE_CYLINDERは円筒貼り付け。
TEXRULE_SPHEREは球貼り付け。
TEXRULE_MQはメタセコイア(mqoファイル)のUV値による貼り付け。

texanimtypeはUVアニメのタイプです。
TEXANIM_WRAPは0から1でラップします。
TEXANIM_NOLIMITはラップしない無制限モードです。


1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : materialno
  マテリアルを識別する番号を指定してください。

3. [OUT] MATERIALTEX* : dstparams
  パラメータを受け取る構造体へのポインタを指定してください。


ver5.3.2.0
E3DSetMaterialTexParams マテリアル 面マテリアルのテクスチャのパラメータを設定します。

パラメータの指定にはusercoef.hで定義されているMATERIALTEX構造体を使用します。
MATERIALTEX構造体のメンバーの説明はE3DGetMaterialTexParamsの説明をお読みください。

exttexmodeがEXTTEXMODE_GLOWのときはtrasparentは0に、EXTTEXMODE_GLOWALPHAのときはtranspaerntが2に強制的にセットされます。

テクスチャの複数指定の際には1枚目をtexに
2枚目以降をexttexにセットしてください。
exttexnumはexttexだけの(texを勘定しない)枚数です。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : materialno
  マテリアルを識別する番号を指定してください。

3. [IN] MATERIALTEX* : srcparams
  パラメータを指定する構造体へのポインタを指定してください。
ver5.3.2.0
E3DCreateTexKey テクスチャアニメ テクスチャアニメのキーを作成します。
キーは複数のTEXCHANGEから構成されます。
TEXCHANGE構造体はusercoef.hで定義されています。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  テクスチャアニメ情報を格納するボーンを識別する番号を指定します。

3. [IN] int : motid
  モーションのIDを指定します。

4. [IN] int : frameno
  モーションのフレーム番号を指定します。



ver5.3.2.0
E3DDelTexKey テクスチャアニメ テクスチャアニメのキーを削除します。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  テクスチャアニメ情報を格納するボーンを識別する番号を指定します。

3. [IN] int : motid
  モーションのIDを指定します。

4. [IN] int : frameno
  モーションのフレーム番号を指定します。
ver5.3.2.0
E3DAddTexChange テクスチャアニメ テクスチャアニメのキーにTEXCHANGEを追加します。TEXCHANGEはusercoef.hで定義されています。テクスチャ変更のトリガーです。
TEXCHANGEのtexnameに指定するテクスチャ名は面マテリアルにすでに追加されている必要があります。面マテリアルへのテクスチャの追加はE3DSetMaterialTexParamsで行います。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  テクスチャアニメ情報を格納するボーンを識別する番号を指定します。

3. [IN] int : motid
  モーションのIDを指定します。

4. [IN] int : frameno
  モーションのフレーム番号を指定します。

5. [IN] TEXCHANGE : srctc
  テクスチャの変更情報を指定します。
ver5.3.2.0
E3DDelTexChange テクスチャアニメ テクスチャアニメのキーからTEXCHANGEを削除します。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  テクスチャアニメ情報を格納するボーンを識別する番号を指定します。

3. [IN] int : motid
  モーションのIDを指定します。

4. [IN] int : frameno
  モーションのフレーム番号を指定します。

5. [IN] int : materialno
  面マテリアルを識別する番号を指定してください。

ver5.3.2.0
E3DGetTexChangeNum テクスチャアニメ テクスチャアニメのキーの中に何個TEXCHANGEが存在するかを取得します。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  テクスチャアニメ情報を格納するボーンを識別する番号を指定します。

3. [IN] int : motid
  モーションのIDを指定します。

4. [IN] int : frameno
  モーションのフレーム番号を指定します。

5. [OUT] int* : tcnumptr
  TEXCHANGEの数が代入されます。
ver5.3.2.0
E3DGetTexChange テクスチャアニメ テクスチャアニメのキーの中のTEXCHANGEを取得します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  テクスチャアニメ情報を格納するボーンを識別する番号を指定します。

3. [IN] int : motid
  モーションのIDを指定します。

4. [IN] int : frameno
  モーションのフレーム番号を指定します。

5. [IN] int : tcindex
  TEXCHANGEのインデックスを指定します。
  E3DGetTexChangeNumで取得した数をtcnumとすると、この引数には0から(tcnum - 1)までの数値を指定します。

6. [OUT] TEXCHANGE* : dsttc
  情報を受け取る構造体へのポインタを指定してください。

ver5.3.2.0
E3DGetTexAnimKeyframeNoRange テクスチャアニメ startとendで指定したフレーム範囲のキーフレームの個数とフレーム番号を取得します。

arraylengに0を指定して呼び出すとframearray引数への代入を行わずにキーの個数のみを取得します。

E3DGetTexAnimKeyframeNoRange( hsid, boneno, motid, start, end, 0, 0, &keynum );

framearray = (int*)malloc( sizeof( int ) * keynum );

E3DGetTexAnimKeyframeNoRange( hsid, boneno, motid, start, end, framearray, keynum, &chknum );

のようにして使ってください。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  テクスチャアニメ情報を格納するボーンを識別する番号を指定します。

3. [IN] int : motid
  モーションのIDを指定します。

4. [IN] int : start
5. [IN] int : end
  キーを調べたいフレーム番号の最初と最後の値を指定してください。

6. [OUT] int* : framearray
  フレーム番号がgetnum個だけ代入されます。
  arraylengが0の場合は代入されません。

7. [IN] int : arrayleng
  framearrayの配列長(要素数)を指定してください。
  0を指定するとキーの個数だけを調べます。

8. [OUT] int* : getnumptr
  取得したキーフレーム番号の個数が代入されます。

ver5.3.2.0
E3DCreateDSKey ディスプレイスイッチ DispSwitchアニメのキーを作成します。
キーは複数のDSCHANGEから構成されます。
DSCHANGE構造体はusercoef.hで定義されています。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  DispSwitchアニメ情報を格納するボーンを識別する番号を指定します。

3. [IN] int : motid
  モーションのIDを指定します。

4. [IN] int : frameno
  モーションのフレーム番号を指定します。
ver5.3.2.0
E3DDelDSKey ディスプレイスイッチ DispSwitchアニメのキーを削除します。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  DispSwitch情報を格納するボーンを識別する番号を指定します。

3. [IN] int : motid
  モーションのIDを指定します。

4. [IN] int : frameno
  モーションのフレーム番号を指定します。
ver5.3.2.0
E3DAddDSChange ディスプレイスイッチ DispSwitchアニメのキーにDSCHANGEを追加します。DSCHANGEはusercoef.hで定義されています。DispSwitch変更のトリガーです。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  DispSwitch情報を格納するボーンを識別する番号を指定します。

3. [IN] int : motid
  モーションのIDを指定します。

4. [IN] int : frameno
  モーションのフレーム番号を指定します。

5. [IN] DSCHANGE : srcdsc
  DispSwitch変更情報の構造体を指定します。
ver5.3.2.0
E3DDelDSChange ディスプレイスイッチ DispSwitchアニメのキーからDSCHANGEを削除します。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  DispSwitch情報を格納するボーンを識別する番号を指定します。

3. [IN] int : motid
  モーションのIDを指定します。

4. [IN] int : frameno
  モーションのフレーム番号を指定します。

5. [IN] int : switchno
  DispSwitchのスイッチ番号を指定します。

ver5.3.2.0
E3DGetDSChangeNum ディスプレイスイッチ DispSwitchアニメのキーの中に何個DSCHANGEが存在するかを取得します。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  DispSwitch情報を格納するボーンを識別する番号を指定します。

3. [IN] int : motid
  モーションのIDを指定します。

4. [IN] int : frameno
  モーションのフレーム番号を指定します。

5. [OUT] int* : dscnumptr
  DSCHANGEの個数が代入されます。
ver5.3.2.0
E3DGetDSChange ディスプレイスイッチ DispSwitchアニメのキーの中のDSCHANGEを取得します。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  DispSwitchアニメ情報を格納するボーンを識別する番号を指定します。

3. [IN] int : motid
  モーションのIDを指定します。

4. [IN] int : frameno
  モーションのフレーム番号を指定します。

5. [IN] int : dscindex
  DSCHANGEのインデックスを指定します。
  E3DGetDSChangeNumで取得した数をdscnumとすると、この引数には0から(dscnum - 1)までの数値を指定します。

6. [OUT] DSCHANGE* : dstdsc
  情報を受け取る構造体へのポインタを指定してください。

ver5.3.2.0
E3DGetDSAnimKeyframeNoRange ディスプレイスイッチ startとendで指定したフレーム範囲のキーフレームの個数とフレーム番号を取得します。

arraylengに0を指定して呼び出すとframearray引数への代入を行わずにキーの個数のみを取得します。

E3DGetDSAnimKeyframeNoRange( hsid, boneno, motid, start, end, 0, 0, &keynum );

framearray = (int*)malloc( sizeof( int ) * keynum );

E3DGetDSAnimKeyframeNoRange( hsid, boneno, motid, start, end, framearray, keynum, &chknum );

のようにして使ってください。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  テクスチャアニメ情報を格納するボーンを識別する番号を指定します。

3. [IN] int : motid
  モーションのIDを指定します。

4. [IN] int : start
5. [IN] int : end
  キーを調べたいフレーム番号の最初と最後の値を指定してください。

6. [OUT] int* : framearray
  フレーム番号がgetnum個だけ代入されます。
  arraylengが0の場合は代入されません。

7. [IN] int : arrayleng
  framearrayの配列長(要素数)を指定してください。
  0を指定するとキーの個数だけを調べます。

8. [OUT] int* : getnumptr
  取得したキーフレーム番号の個数が代入されます。
ver5.3.2.0
E3DGetMaterialAlphaTest マテリアル マテリアルのアルファテストの情報を取得します。 1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : matno
  マテリアル番号。
  E3DGetMaterialNoByNameで取得した番号、
  もしくは
  RokDeBone2の「面マテリアル」メニューで
  表示されている「マテリアル番号」

3. [OUT] int* : test0ptr
  不透明を描画時にアルファテストする場合は1が
  しない場合は0が代入されます。

4. [OUT] int* : val0ptr
  不透明時のアルファテストのアルファの閾値が代入されます。
  (0から255)

5. [OUT] int* : test1ptr
  半透明を描画時にアルファテストする場合は1が
  しない場合は0が代入されます。

6. [OUT] int* : val1ptr
  半透明時のアルファテストのアルファの閾値が代入されます。
  (0から255)
ver5.3.2.1
E3DGetMaterialTexParams1DIM マテリアル マテリアルのテクスチャ情報を取得します。
MATERIALTEX構造体がMATERIALTEX1DIMになっていること以外はE3DGetMaterialTexParamsと同じです。
E3DGetMaterialTexParamsの説明をお読みください。

変更箇所はexttexが1次元になったことです。
exttexnum個分のテクスチャ名が'\n'終端で連結されて代入されます。
exttexの一番最後の要素の最後にも'\n'が付きます。

1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : materialno
  マテリアルを識別する番号を指定してください。

3. [OUT] MATERIALTEX1DIM* : dstparams
  パラメータを受け取る構造体へのポインタを指定してください。
ver5.3.2.1
E3DSetMaterialTexParams1DIM マテリアル マテリアルのテクスチャ情報を設定します。
MATERIALTEX構造体がMATERIALTEX1DIMになっていること以外はE3DSetMaterialTexParamsと同じです。
E3DSetMaterialTexParamsの説明をお読みください。

変更箇所はexttexが1次元になったことです。

exttexには各テクスチャ名を'\n'終端で連結して指定します。
exttexの一番最後の要素の終端にも'\n'が必要です。
テクスチャ名は255バイトまでです。

1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : materialno
  マテリアルを識別する番号を指定してください。

3. [IN] MATERIALTEX1DIM* : srcparams
  パラメータを指定する構造体へのポインタを指定してください。
ver5.3.2.1
E3DSet3DSoundDopplerScaler サウンド ドップラー効果の係数を設定します。
値が大きいほどドップラー効果が大きくなります。

ドップラー効果は音源やリスナーの速度によって生じます。

音源の速度は
E3DSet3DSoundMovementで指定する速度です。

リスナーの速度は
E3DSet3DSoundListenerMovementで指定したキャラクターまたはカメラの現在の位置から1回前の呼び出し時の位置を引いたものとなります。
1. [IN] int : soundid
  音を識別する番号を、指定します。
  -1を指定すると読み込み済みの全ての音に対して処理をします。

2. [IN] float : srcdp
  ドップラー効果の係数を指定します。
  0以上の数値を指定します。

ver5.3.2.2
E3DGet3DSoundDopplerScaler サウンド ドップラー効果の係数を取得します。 1. [IN] int : soundid
  音を識別する番号を、指定します。

2. [OUT] float* : dpptr
  ドップラー効果の係数が代入されます。

ver5.3.2.2
E3DLoadMQOFileAsChara モデルデータ mqoファイルをキャラクターとして読み込みます。
ツール用の命令です。
ゲームなどではRokDeBone2でmqoを読み込みsigで保存して、E3DSigLoadで読み込んでください。

sigの読み込みのほうが高速です。
1. [IN] char* : filename
  読み込む、mqo ファイル名。

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

3. [IN] int : adjustuvflag
  UV座標を正規化したいときは1を、
  そうでないときは、0を指定してください。
  2を指定すると0.0から1.0の間にクランプします。

4. [IN] int : bonetype
  mqoにボーンが含まれている場合は
  ボーンのタイプを指定します。
  BONETYPE_RDB2を指定するとRokDeBone2形式の
  線分をボーンと認識するタイプになります。
  BONETYPE_MIKOを指定すると
  mikoto形式のタイプになります。
  これらの定数はusercoef.hで定義されています。

5. [OUT] int* : hsidptr
  作成したキャラクターを識別するhsidが代入されます。
ver5.3.2.2
E3DGetPartPropName モデル情報 パーツの名前を取得します。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [OUT] char* : nameptr
  名前を取得するための配列へのポインタを指定してください。

4. [IN] int : arrayleng
  nameptrの配列の長さを指定してください。
  名前の最大長は255バイトなので配列は256バイトあれば十分です。


ver5.3.2.3
E3DSetPartPropName モデル情報 パーツの名前を設定します。 1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [IN] char* : srcname
  名前のセットしてある配列へのポインタ。名前は最大255バイトまで。 
ver5.3.2.3
E3DGetPartPropDS モデル情報 パーツのディスプレイスイッチ番号を取得します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [OUT] int* : dsptr
  ディスプレイスイッチ番号が代入されます。
  ディスプレイスイッチは0から(DISPSWITCHNUM - 1)までの数値です。DISPSWITCHNUMはusercoef.hで定義されています。
ver5.3.2.3
E3DSetPartPropDS モデル情報 パーツにディスプレイスイッチ番号を設定します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [IN] int : srcds
  ディスプレイスイッチ番号を指定します。
  ディスプレイスイッチは0から(DISPSWITCHNUM - 1)までの数値です。DISPSWITCHNUMはusercoef.hで定義されています。
ver5.3.2.3
E3DGetPartPropNotUse モデル情報 パーツの無効化フラグを取得します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [OUT] int* : flagptr
  notuseが代入されます。
  notuseが0のときパーツは有効になっています。notuseが1のときパーツは無効となります。
ver5.3.2.3
E3DSetPartPropNotUse モデル情報 パーツに無効化フラグを設定します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [IN] int : srcflag
  notuseを指定します。
  0のときパーツは有効になっています。1のときパーツは無効となります。
  ジョイントの有効無効を切り替えた場合はE3DJointRemakeを呼び出す必要があります。
ver5.3.2.3
E3DLoadSSF 音セット 音セットファイル*.ssfを読み込みます。
1. [IN] char* : filename
  ssfファイルのパスを指定します。
ver5.3.2.5
E3DDestroyAllSoundSet 音セット 読み込み済みの全ての音セットを破棄します。
なし ver5.3.2.5
E3DGetSoundSetNum 音セット 読み込み済みの音セットの数を取得します。
1. [OUT] int* : numptr
  音セットの数が代入されます。
ver5.3.2.5
E3DGetSoundSetInfo 音セット 音セットの情報を取得します。
音セットごとに呼び出します。
ssindexには0からE3DGetSoundSetNumで取得したnum - 1までの数値を指定します。
1. [IN] int : ssindex
  音セットのインデックス。
  音セットのIDではありません。

2. [OUT] E3DSSINFO* : infoptr
  音セットの情報が代入されます。
  E3DSSINFOはusercoef.hで定義されています。

ver5.3.2.5
E3DGetSoundSetBGM 音セット 音セットに関連付けられているBGMのサウンドIDを取得します。
1. [IN] int : setid
  音セットのIDを指定します。
  音セットのインデックスではありません。

2. [OUT] int* : bgmidptr
  BGMのサウンドIDが代入されます。

ver5.3.2.5
E3DLoadSAF 音アニメ 音アニメファイル*.safを読み込みアニメを識別するIDを取得します。
1. [IN] char* : filename
  safファイルのパスを指定します。

2. [OUT] int* : animnoptr
  読み込んだアニメを識別するIDが代入されます。

ver5.3.2.5
E3DDestroyAllSndAnim 音アニメ 読み込み済みの全ての音アニメを破棄します。
なし
ver5.3.2.5
E3DGetSndAnimFrameNum 音アニメ 音アニメのフレーム長を取得します。
1. [IN] int : animno
  アニメを識別する番号を指定します。

2. [OUT] int* : numptr
  アニメのフレーム長が代入されます。

ver5.3.2.5
E3DGetSndAnimBGM 音アニメ 音アニメに関連付けられているBGMのサウンドIDを取得します。
1. [IN] int : animno
  アニメを識別する番号を指定します。

2. [OUT] int* : bgmidptr
  BGMのサウンドIDが代入されます。

ver5.3.2.5
E3DGetSndAnimFPS 音アニメ 音アニメのFPSを取得します。
1. [IN] int : animno
  アニメを識別する番号を指定します。

2. [OUT] int* : fpsptr
  FPSが代入されます。

ver5.3.2.5
E3DGetSndAnimMode 音アニメ 音アニメの繰り返しモードを取得します。
1. [IN] int : animno
  アニメを識別する番号を指定します。

2. [OUT] int* : modeptr
  繰り返しなしの場合は1が繰り返し再生の場合は255が代入されます。

ver5.3.2.5
E3DStartSndAnim 音アニメ 音アニメの再生を開始します。
1. [IN] int : animno
  アニメを識別する番号を指定します。

2. [IN] int : startframe
  再生を開始する際のスタートフレーム番号を指定します。

ver5.3.2.5
E3DSetSndAnimFrameNo 音アニメ 再生する音アニメのフレーム番号を指定します。
この命令は音アニメで設定されている効果音用のものです。
BGMには影響を与えません。
1. [IN] int : animno
  アニメを識別する番号を指定します。

2. [IN] int : frameno
  再生するフレーム番号を指定します。

ver5.3.2.5
E3DStopSndAnim 音アニメ 音アニメの再生を停止します。
1. [IN] int : animno
  アニメを識別する番号を指定します。
ver5.3.2.5
E3DGetSoundTotalTime サウンド 音のトータルタイムを取得します。
1. [IN] int : soundid
  音を識別するIDを指定します。

2. [OUT] double* : timeptr
  トータルタイムが代入されます。

ver5.3.2.5
E3DConvSoundSampleToFrame サウンド 音のサンプル数をフレーム番号に変換します。
現在再生中の位置(サンプル数)は
E3DGetSoundSamplesPlayedで取得できます。
1. [IN] int : soundid
  音を識別するIDを指定します。

2. [IN] int : srcfps
  音アニメのFPSを指定します。

3. [IN] double : srcsample
  サンプル数を指定します。

4. [OUT] int* : frameptr
  フレーム番号が代入されます。

ver5.3.2.5
E3DGetSoundStartCnt サウンド 音のstartcntを取得します。
startcntは0から始まり、音の再生が実際に開始されたときに1ずつ増えます。
音の再生命令を呼び出しても実際に再生されるまでには少し時間がかかります。
このstartcntの値を監視することで
実際に再生が開始された時を把握できます。
1. [IN] int : soundid
  音を識別するIDを指定します。

2. [OUT] int* : cntptr
  startcntが代入されます。

ver5.3.2.5
E3DGetSoundEndCnt サウンド 音のendcntを取得します。
endcntは0から始まり、音の再生が実際に終了したときに1ずつ増えます。
音の停止命令を呼ばない場合でも再生が最後まで達し終了すればカウントが増えるので
実際に再生が終了したときを把握できます。
1. [IN] int : soundid
  音を識別するIDを指定します。

2. [OUT] int* : cntptr
  endcntが代入されます。
ver5.3.2.5
E3DPCWait 同期 指定したFPSに近くなるように待機します。
E3DWaitByFPSよりも高精度ですがCPUを消費します。
音の同期の際には正確なタイミングが必要になるのでこの命令を使ってください。
1. [IN] int : srcfps
  目標のFPSを指定します。

2. [OUT] double* : dstfps
  実際のFPSが代入されます。
ver5.3.2.5
E3DCloneDispObj モデル情報 表示用オブジェクトを複製します。
ボーンには使えません。
モーフターゲットの複製などに使ってください。
この命令を実行すると読み込み済みの全てのモーションが破棄されます。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : partno
  複製したい表示オブジェクトのパーツID。

3. [IN] char* : newname
  新しいパーツの名前。
  255バイトまで。0終端。

4. [OUT] int* : seriptr
  作成した表示オブジェクトを識別するID。



ver5.3.2.5_2
E3DGetJointNotSel モデル情報 ジョイントの選択禁止フラグを取得します。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : boneno
  ボーン(ジョイント)を識別する番号。

3. [OUT] int* : notselptr
  選択禁止フラグが代入されます。
  0か1です。

ver5.3.3.0
E3DSetJointNotSel モデル情報 ジョイントの選択禁止フラグを設定します。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : boneno
  ボーン(ジョイント)を識別する番号。

3. [IN] int : notsel
  選択禁止フラグを指定します。
  0か1を指定してください。
ver5.3.3.0
E3DDestroyMorph モデル情報 モーフオブジェクトを削除します。
モーフのベースとターゲットは削除されずに通常の表示用オブジェクトとしてシリアル番号1の子供になります。

モーフをまとめるオブジェクトが削除されます。
今の仕様では削除してもどうしてもごみが残るので多用するのはお勧めしません。

読み込み済みのモーションは削除されます。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : baseno
  モーフのベースを識別する番号。
ver5.3.3.0
E3DDestroyDispObj モデル情報 表示用オブジェクトを削除します。
モーフのベースには使えません。
(モーフのベースを削除したい場合はまずE3DDestroyMorphを実行し、モーフの外に出してから削除します)
モーフのターゲットには使えます。

今の仕様では削除してもどうしてもごみが残るので多用するのはお勧めしません。

読み込み済みのモーションは削除されます。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : partno
  表示オブジェクトを識別する番号。
ver5.3.3.0
E3DSetCameraOffset カメラ カメラのオフセットを設定します。
詳しくはマニュアルのe3d_CameraOffset.htmをご覧ください。
具体的な使用例は
CameraOffsetソリューションをご覧ください。
1. [IN] D3DXVECTOR3 : camoffbef
  回転前の移動成分を指定してください。

2. [IN] int : camqid
  回転を表すクォータニオンのIDを指定してください。

3. [IN] D3DXVECTOR3 : camoffaft
  回転後の移動成分を指定してください。

ver5.3.3.3
E3DAllClearInfElem ボーン影響 ボーンの影響度を全て削除しまっさらな状態にします。

ボーンの影響度が1つも定義されていない状態で
E3DCreateSkinMatや描画命令を呼び出すとエラーになります。

この命令を呼び出した場合は
必ず少なくとも1つはボーンの影響度を設定し
影響度の設定が全部終わったら
E3DCreateSkinMatを呼び出さなければなりません。


1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : partno
  表示オブジェクトを識別する番号。
  -1を指定すると全てのパーツに対して処理します。

3. [IN] int : vertno
  頂点の番号。
  -1を指定すると全ての頂点に処理します。
  partnoに-1を指定した場合は
  自動的に内部でvertnoに-1がセットされます。

ver5.3.3.7
E3DSetGPOffset GPA GPAの再生開始位置と向きを指定します。

この命令を呼ぶ前に
E3DSetGPGroundHSIDを呼び、
この命令を呼んだ後に
E3DCalcGPFullFrameを呼ばないとオフセットはアニメに反映されません。

具体的な使用例は
GPOffsetソリューションをご覧ください。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] D3DXVECTOR3 : tra
  GPAを開始する位置。

3. [IN] int : qid
  GPAを開始する向きを表すクォータニオンのID。

ver5.3.4.5
E3DSelectLightType ライト この命令をltype引数に1を入れて
E3DInitより前に呼び出すと
平行光源とスポットライトを合計3個まで使うことが出来るようになります。

この命令を呼び出さなかったりltypeに0を入れて呼び出すと平行光源とポイントライトを合計3個まで使うことが出来ます。

呼び出す場合は必ずE3DInitより前で呼び出します。
一度E3DInitを呼び出したら途中で変更することは出来ません。


ポイントライトやスポットライトは
シェーダータイプによってかなり見栄えが変わります。
デフォルトのCOL_PHONGだと頂点単位で計算されるのでかなりポリゴンが細かくないときれいに効果が出ません。
COL_PPHONGだとピクセル単位で計算されるため
粗いポリゴンでもきれいに効果が出ます。
一般にポリゴンを細かくするよりもCOL_PPHONGを使ったほうが実行速度が速いです。

シェーダータイプはE3DSetShaderTypeで設定します。

1. [IN] int : ltype
  1を指定すると平行光源とスポットライトを使用できます。
  0を指定すると平行光源とポイントライトを使用できます。
ver5.3.4.6
E3DSetSpotLight ライト E3DCreateLightで作成したライトに
スポットライトのパラメータをセットする。
1. [IN] int : lightID
  光源を識別するid

2. [IN] D3DXVECTOR3 : pos
  スポットライトの位置を
  (pos.x, pos.y, pos.z)に設定する。

3. [IN] D3DXVECTOR3 : dir
  スポットライトの向きを設定する。

4. [IN] float : dist
  スポットライトの光が届く距離を設定します。

5. [IN] float : angle
  スポットライトのコーンの角度を設定します。

6. [IN] E3DCOLOR4UC : col
  スポットライトの色を
  (col.r, col.g, col.b)に設定する。
  col.aは無視される。
ver5.3.4.6
E3DRenderZandN 描画 モデルのZ情報と法線情報を書き出します。
通常のスワップチェインやレンダーターゲットテクスチャに対して処理を行えます。

Z出力,法線出力、Z入力のサーフェスの大きさは同じでなければならない。
オブジェクトがない部分はアルファが0。

Z出力はr, g, b3成分に*1、*256、256*256スケール(小数部)で
分割出力しています。

使用するときは
depth = r + g / 256.0f + b / (256.0f * 256.0f)
のようにして使います。

1. [IN, OUT] int : outzscid
  Z情報を出力するscid

2. [IN, OUT] int : outnscid
  法線情報を出力するscid

3. [IN] int : inzscid
  出力の際に使用するZバッファのscid

4. [IN] int : hsid
  形状データを識別するID

5. [IN] int : skipflag
  処理のスキップフラグ。
  1を足すとZ出力スキップ。
  2を足すと法線出力スキップ。
  4を足すとZバッファー初期化スキップ。
  8を足すとモーションの姿勢計算スキップ。
  16を足すとBeginScene, EndSceneをスキップ。

6. [IN] int : renderflag
  レンダーフラグ。
  1を足すとZ情報を出力。
  2を足すと法線情報を出力。
  4を足すとカメラ座標系の法線を出力。ただし2と組み合わせないと無効。
ver5.3.4.7
E3DCreateInfScope ボーン影響2 影響度2用の影響範囲形状を作成します。

影響範囲形状はボーンの番号と表示オブジェクトの番号の組み合わせごとに1つだけ作成できます。

この命令で得られるisindexの値は恒久的なものではありません。

編集作業で
影響範囲形状を削除したりした場合はE3DExistInfScopeでisindexを再取得しなければなりません。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : boneno
  ボーンのパーツ番号。

3. [IN] int : dispno
  表示オブジェクトのパーツ番号。

4. [OUT] int* : isindexptr
  影響範囲形状操作用のインデックスが代入されます。

ver5.3.4.8
E3DDestroyInfScope ボーン影響2 影響範囲形状を削除します。

この命令で得られるisindexの値は恒久的なものではありません。

編集作業で
影響範囲形状を削除したりした場合はE3DExistInfScopeでisindexを再取得しなければなりません。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : isindex
  削除する影響範囲形状のインデックス。

ver5.3.4.8
E3DExistInfScope ボーン影響2 影響範囲形状が存在する場合はそのインデックスを取得し、存在しないときは-1を取得します。

mikoto形式のデータを読み込むと
アンカーが影響範囲形状に自動的に変換されるので、E3DCreateInfScopeを呼び出さなくても影響範囲形状が存在する場合があります。

1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : boneno
  ボーンのパーツ番号。

3. [IN] int : dispno
  表示オブジェクトのパーツ番号。

4. [OUT] int* : isindexptr
  影響範囲形状操作用のインデックスが代入されます。
影響範囲形状が存在しないときは-1が代入されます。

ver5.3.4.8
E3DGetInfScopeNum ボーン影響2 影響範囲形状の個数を取得します。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [OUT] int* : numptr
  影響範囲形状の総数が代入されます。

ver5.3.4.8
E3DGetInfScopeInfo ボーン影響2 影響範囲形状の情報を取得します。
ISINFO構造体はusercoef.hで定義されています。

E3DGetInfScopeNumで取得した総数をisnumとすると、isiptrにはisnum個以上の要素を持つ配列のポインタを渡してください。

1. [IN] int : hsid
  モデルデータを識別するID。

2. [OUT] ISINFO* : isiptr
  影響範囲形状の情報が代入されます。

3. [IN] int : arrayleng
  isiptrの配列要素数を指定します。

4. [OUT] int* : getnumptr
  isiptrに格納した要素数が代入されます。

ver5.3.4.8
E3DSetInfScopeVert ボーン影響2 影響範囲形状の頂点位置を設定します。
ISVERT構造体はusercoef.hで定義されています。

ローカル座標系の位置を渡してください。

1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] ISVERT : srcisv
  頂点情報。

ver5.3.4.8
E3DGetInfScopeVert ボーン影響2 影響範囲形状の頂点位置を取得します。

ISVERT構造体はusercoef.hで定義されています。

isv.isid、isv.vertnoに取得したい形状のインデックスと頂点番号をセットして呼び出します。

ローカル座標系の位置です。

1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN, OUT] ISVERT* : isvptr
  頂点情報が代入されます。
isidメンバには自分で値を設定してから渡してください。
ver5.3.4.8
E3DGetInfScopeVertNum ボーン影響2 影響範囲形状の頂点数を取得します。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : isindex
  影響範囲形状のインデックス。

3. [OUT] int* : numptr
  頂点数が代入されます。


ver5.3.4.8
E3DPickInfScopeVert ボーン影響2 スクリーン座標に近い、影響範囲形状の頂点情報を取得します。

モーションやキャラクターの位置と向きは初期化した状態で使用してください。

1. [IN] int : scid
  スワップチェインID。

2. [IN] int : hsid
  モデルデータを識別するID。

3. [IN] POINT : scpos
  スクリーン(2D)座標。

4. [IN] POINT : range
  scposからrangeだけずれていてもピックします。

5. [IN] int : isindex
  影響範囲形状のインデックス。
  -1指定は出来ません。

6. [OUT] ISVERT* : isvptr
  頂点情報が代入されます。
  arrayleng要素数のISVERT構造体の配列へのポインタを渡します。

7. [IN] int : arrayleng
  isvptrの配列の要素数。

8. [OUT] int* : getnumptr
  isvptrにセットした要素数が代入されます。

ver5.3.4.8
E3DGetInfScopeAxis ボーン影響2 影響範囲形状に関連付けられているボーンの座標軸(直交する3軸)を取得します。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : isindex
  影響範囲形状のインデックス。

3. [OUT] D3DXVECTOR3* : dstvec3x3ptr
  3軸が代入されます。
  
  例えばD3DXVECTOR3 vec3[3];
  と宣言しvec3と指定します。

ver5.3.4.8
E3DSetInfScopeColor ボーン影響2 影響範囲形状の色を設定します。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : isindex
  影響範囲形状のインデックス。

3. [IN] E3DCOLOR4UC : srccol
  形状の色。

ver5.3.4.8
E3DGetInfScopeColor ボーン影響2 影響範囲形状の色を取得します。 1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : isindex
  影響範囲形状のインデックス。

3. [OUT] E3DCOLOR4UC* : colptr
  形状の色が代入されます。
ver5.3.4.8
E3DSetInfScopeDispFlag ボーン影響2 影響範囲形状を表示するかどうかのフラグを設定します。
形状を作成してもこの命令でflagを1に設定しないと表示されません。

1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : isindex
  影響範囲形状のインデックス。
  -1指定で全ての影響範囲形状に設定。

3. [IN] int : dispflag
  表示したいとき1、しないとき0。

4. [IN] int : exclusiveflag
  isindexに-1以外を指定したときのみ有効。
  1を指定するとisindexにdispflagを設定し、isindex以外の形状に!dispflagを設定します。
  0を指定するとisindexのみに処理を行います。

ver5.3.4.8
E3DGetInfScopeDispFlag ボーン影響2 影響範囲形状を表示するかどうかのフラグを取得します。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : isindex
  影響範囲形状のインデックス。

3. [OUT] int* : flagptr
  表示するかどうかのフラグが代入されます。

ver5.3.4.8
E3DImportMQOAsInfScope ボーン影響2 mqoファイルを読み込み、それを影響範囲形状に変換します。

現在のバージョンでは形状は1立体のみで
凸型である必要があります。

直方体である必要はありません。

1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] char* : mqoname
  mqoファイルのフルパス。

3. [IN] float : mult
  読み込み倍率。

4. [IN] int : boneno
  対応つけるボーンのパーツ番号。

5. [IN] int : dispno
  対応つける表示オブジェクトのパーツ番号。

6. [OUT] int* : isindexptr
  作成した影響範囲形状のインデックスが代入されます。

ver5.3.4.8
E3DGetMOELocalMotionFrameNo MOE モーション(qua)のモーション番号とフレーム番号を取得します。

moeanimno, moeframenoは
E3DGetMOEFrameNo hsid, moeanimno, moeframeno
で取得した値を指定します。

1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : moeanimno
  MOEのアニメの番号を指定します。
  quaのアニメ番号ではありません。

3. [IN] int : moeframeno
  MOEのフレーム番号を指定します。
  quaのフレーム番号ではありません。

4. [OUT] int* : localanimno
  MOEの指定フレームに対応するquaのアニメ番号が代入されます。

5. [OUT] int* : localframeno
  MOEの指定フレームに対応するquaのフレーム番号が代入されます。
ver5.3.4.8
E3DGetMOELocalNextMotionFrameNo MOE 次に再生が予約されているモーションの番号とフレーム番号を取得します。

moeanimno, moeframenoは
E3DGetMOEFrameNo hsid, moeanimno, moeframeno
で取得した値を指定します。

E3DGetMOELocalMotionFrameNo hsid, moeanimno, moeframeno, localanimno, localframeno
で取得したlocalanimnoが0のときにこの命令は意味を持ちます
(localnextanimnoに0以上の値が代入されます。)

localnextframenoには補間が終わったときのジャンプ先のフレーム番号が入ります。
つまり補間フレーム長が5のときは、いつも(localnextanimnoが0以上のときはいつも)
5が入ります。

ですのでlocalanimnoが0だったときは
現在再生中のモーションは
モーションID=localnextanimno
フレーム番号=localframeno
となります。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : moeanimno
  MOEのアニメの番号を指定します。
  quaのアニメ番号ではありません。

3. [IN] int : moeframeno
  MOEのフレーム番号を指定します。
  quaのフレーム番号ではありません。

4. [OUT] int* : localnextanimno
  MOEの指定フレームに再生中のquaの次に再生が予約されているアニメの番号が代入されます。

5. [OUT] int* : localnextframeno
  MOEの指定フレームに再生中のquaの次に再生が予約されているアニメの開始フレーム番号が代入されます。
ver5.3.4.8
E3DSetMotionBlurMaxAlpha エフェクト モーションブラーの一番濃い部分の透明度の係数を指定します。
マテリアルのアルファにこの命令で指定した係数を掛け算したものを、透明度として設定します。

E3DSetMotionBlurMinAlphaは透明度の値を指定するのに対し、この命令は係数を指定する点に注意してください。
1. [IN] int : hsid
  形状データを識別するID。

2. [IN] int : partno
  設定したいパーツの番号。
  -1を指定すると全てのパーツに設定します。

3. [IN] float : maxAlpha
  0.0から1.0までのfloat。
  ブラーの最大透明度の係数を指定します。
ver5.4.0.5
E3DGetMOEKeyGoOnFlag MOE MOEのイベント継続フラグを取得します。

指定したフレームにキーが無い場合はエラーになります。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : animno
  MOEのアニメ番号を指定します。

3. [IN] int : frameno
  MOEアニメのフレーム番号。

4. [OUT] int* : flagptr
  フラグが代入されます。
  継続のときは1。単発のときは0。
ver5.4.0.6
E3DSetMOEKeyGoOnFlag MOE MOEのイベント継続フラグを設定します。

指定したフレームにキーが無い場合はエラーになります。

E3DCalcMOEFullFrame命令を呼び出すとこの設定が反映されます。
1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : animno
  MOEのアニメ番号を指定します。

3. [IN] int : frameno
  MOEアニメのフレーム番号。

4. [IN] int : flag
  フラグを指定します。
  継続のときは1。単発のときは0。
ver5.4.0.6
E3DSetMOATrunkNotComID モーション moaの共通分岐禁止IDの個数とIDを設定します。

1. [IN] int : hsid
  形状データを識別するid

2. [IN] int : motid
  Trunkのモーションを識別するid

3. [IN] int* : arrayelng
  notcomid引数に指定する配列の要素数。

4. [IN] int : notcomid
  IDを格納した配列。

ver5.4.0.7
E3DGetMOELocalMotionFrameNoML MOE MOEのアニメ番号とフレーム番号に対応するquaのモーションの情報をボーンごとに取得します。

1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : moeanimno
  MOEのアニメの番号を指定します。
  quaのアニメ番号ではありません。

3. [IN] int : moeframeno
  MOEのフレーム番号を指定します。
  quaのフレーム番号ではありません。

4. [IN] int : boneno
  ボーンを識別する番号を指定してください。

5. [OUT] int* : localanimno
  MOEの指定フレームに対応するquaのアニメ番号が代入されます。

6. [OUT] int* : localframeno
  MOEの指定フレームに対応するquaのフレーム番号が代入されます。
ver5.4.1.0
E3DGetMOELocalNextMotionFrameNoML MOE MOEのアニメ番号とフレーム番号に対応するquaの次のモーションの情報をボーンごとに取得します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : moeanimno
  MOEのアニメの番号を指定します。
  quaのアニメ番号ではありません。

3. [IN] int : moeframeno
  MOEのフレーム番号を指定します。
  quaのフレーム番号ではありません。

4. [IN] int : boneno
  ボーンを識別する番号を指定してください。

5. [OUT] int* : localnextanimno
  MOEの指定フレームに再生中のquaの次に再生が予約されているアニメの番号が代入されます。

6. [OUT] int* : localnextframeno
  MOEの指定フレームに再生中のquaの次に再生が予約されているアニメの開始フレーム番号が代入されます。
ver5.4.1.0
E3DSetDefaultGP GPA GPアニメのデフォルトのパラメータを設定します。

gpstateの詳細はE3DSetGPKeyの説明をご覧ください。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] E3DGPSTATE : gpstate
  設定するパラメータ。

ver5.4.1.1
E3DSetDefaultCamera カメラ カメラアニメのデフォルトのパラメータを
カメラ番号ごとに設定します。

camstateの詳細はE3DSetCameraKeyの説明をご覧ください。
1. [IN] int : camno
  カメラの番号(0から2)。
  -1は禁止。

2. [IN] E3DCAMERASTATE : camstate
  設定するパラメータ。


ver5.4.1.1
E3DValidHsid 描画パラメータ hsidが使用可能かどうかをチェックします。
例えばE3DDestroyHandlerSetを呼び出した後のhsidに対して呼び出すと無効のフラグが返されます。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [OUT] int* : flagptr
  hsidが有効のときは1、無効のときは0が代入されます。

ver5.4.1.4
E3DKinectLoadLib Kinect Kinect操作用のライブラリをロードします。
OpenNIがインストールされていてOpenNIのサンプルが動く状態にマシンがないといけません。
1. [OUT] int* : validflagptr
  正常にライブラリがロードできたら1が代入されます。失敗すると0が代入されます。
ver5.5.0.0
E3DKinectSetChara Kinect KinectのキャプチャとEasy3Dのキャラクターの関連付けをします。

kstファイルはRokDeBone2で作成します。

1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] char* : kstname
  kstファイルのファイル名を指定します。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : capmode
  CAPMODE_ALLを指定するとmotidで指定したモーションの最初のフレームから最後のフレームまでキャプチャをします。最後のフレームに達したら自動的にキャプチャは終了します。
  CAPMODE_ONEを指定するとmotidで指定したモーションの最初の1フレーム(フレーム番号0)にキャプチャします。このモードではE3DKinectEndCaptureを呼ぶまでキャプチャーが続きます。

ver5.5.0.0
E3DKinectStartCapture Kinect Kinectのモーションキャプチャを開始します。
10秒ほど時間が掛かります。
ver5.5.0.0
3DKinectEndCapture Kinect Kinectのモーションキャプチャを終了します。
ver5.5.0.0
E3DKinectIsTracking Kinect Kinectのモーションキャプチャがトラッキング状態にあるかどうかを調べます。
トラッキング状態とはKinectが動作し、初期姿勢を認識して位置情報を送信し始めた状態です。
初期姿勢はMedia/KinectSampleフォルダの中のsigファイルの姿勢と同じです。
Kinectが動作し始めてからカメラに全身が入るように2,3m離れ、正面を向いて初期姿勢を取ることでトラッキングが開始されます。
この初期姿勢がいい加減だとモーションが乱れます。真面目にしっかり初期姿勢を取りましょう。
1. [OUT] int* : flagptr
  トラッキング状態のときに1、そうでないときに0が代入されます。

2. [OUT] int* : capcntptr
  トラッキングが開始されてから何回E3DKinectSetSkelPosを呼び出したかを代入します。


ver5.5.0.0
E3DKinectGetSkelPos Kinect Kinectでキャプチャしたボーンの位置を取得します。
ボーンの名前はusercoef.hにSKEL_*で定義されています。

posptrには
D3DXVECTOR3 pos[SKEL_MAX];
で定義したposを指定してください。

位置はトラッキングが開始されていないと取得できません。
1. [OUT] D3DXVECTOR3* : posptrd
  位置を格納する配列を指定してください。詳しくは前記をご覧ください。

2. [OUT] int* : getflagptr
  位置が取得できたら1が出来なかったら0が代入されます。
トラッキング状態でないと位置は取得できません。

ver5.5.0.0
E3DKinectSetSkelPos Kinect E3DKinectGetSkelPosで取得したボーンの位置を
ボーンの姿勢情報に変換してからキャラクターに適応します。

Kinectといっしょに使わない方法もあります。
bulletなどで計算したボーンの位置をキャラクターに適用する場合はkinectflagに0を指定してください。その場合はこの命令を呼ぶ前に1回E3DKinectSetCharaを呼ぶ必要があります。

1. [IN] int : kinectflag
  Kinectといっしょに使う場合は1を、Kinect以外で使う場合は0を指定してください。

2. [IN] int : posmode
  全体移動の姿勢をどう処理するかを指定します。
  POSMODE_TOPOFJOINTを指定すると全体移動を一番親のボーンの姿勢に格納します。
  POSMODE_GLOBALを指定すると全体移動をキャラクターのグローバルの位置情報に格納します。つまりE3DGetPosでこの情報を取得できます。
  POSMODE_ZEROを指定すると全体移動をキャンセルします。

3. [IN] D3DXVECTOR3* : posptr
  ボーンの位置情報を指定します。
  D3DXVECTOR3 pos[SKEL_MAX};のposを指定します。

4. [OUT] int* : framenoptr
  再生されるフレーム番号が代入されます。


ver5.5.0.0
E3DKinectRenderSilhouette Kinect Kinectでキャプチャしているプレイヤーのシルエットを2D描画する命令です。

E3DBeginSceneとE3DEndSceneの間に記述します。
1. [IN] int : withalpha
  半透明で描画するときは1、不透明で描画するときは0を指定します。

2. [IN] TPOS* : tposptr
  描画するエリア(四角)の四隅の値を指定します。
  画面の中心が0です。
  横は左が-1.0f右が+1.0f
  上下は上が1.0f下が-1.0fです。
  TPOS構造体はusercoef.hで定義されています。

ver5.5.0.0
E3DGetInViewFlag モデル情報 E3DChkInViewの後で呼び出します。
E3DChkInViewの結果(視野内にあるかどうか)をパーツごとに取得できます。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [OUT] int* : flagptr
  視野内にある場合は1が、視野内にない場合は0が代入されます。

ver5.5.0.5
E3DWriteBmpFromSurface 出力 画面をBMPファイルに出力します。
アンチエイリアスを有効にしていても使用できます。
1. [IN] char* : filename
  出力ファイルのフルパスを指定してください。

2. [IN] int : scid
  出力したい画面のスワップチェインIDを指定してください。

ver5.5.0.5
E3DGetMotionJumpFrame モーション モーションジャンプ設定を取得します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [OUT] int* : jumpframeptr
  ジャンプするフレーム番号が代入されます。

ver5.5.0.5
E3DSetMotionJumpFrame モーション モーションジャンプ設定を設定します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : jumpframe
  ジャンプするフレーム番号を指定します。
ver5.5.0.5
E3DCopyTexAnimFrame テクスチャアニメ テクスチャアニメをフレームコピーします。
キーが無くても計算してコピーします。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : srcmotid
  コピー元のモーションを識別する番号を指定してください。

3. [IN] int : srcframe
  コピー元のフレーム番号を指定します。

4. [IN] int : dstmotid
  コピー先のモーションを識別する番号を指定します。。

5. [IN] int : dstframe
  コピー先のフレーム番号を指定します。

ver5.5.0.5
E3DDestroyTexAnimFrame テクスチャアニメ テクスチャアニメのフレームを削除します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : frameno
  フレーム番号を指定します。

ver5.5.0.5
E3DGetMaterialExtTextureNum マテリアル マテリアルの拡張テクスチャがいくつ設定されているかを取得します。
拡張テクスチャはテクスチャアニメで使用されます。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : matno
  マテリアルを識別する番号を指定してください。

3. [OUT] int* : numptr
  拡張テクスチャの数が代入されます。

ver5.5.0.5
E3DGetMaterialExtTexture マテリアル マテリアルの拡張テクスチャの名前を取得します。
extnoには
0からE3DGetMaterialExtTextureNumで取得した数字から1引いた数までの間の数値を指定します。

nameptrには長さ256バイトのcharの配列のポインタを指定します。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : matno
  マテリアルを識別する番号を指定してください。

3. [IN] int : extno
  拡張番号。
  0から(exttexnum - 1)の値を指定。

4. [OUT] char* : nameptr
  拡張テクスチャの名前が代入されます。

ver5.5.0.5
E3DLoadMQOFileAsGroundFromBuf 地面 mqoファイルをバッファから読み込みます。
地面として読み込みます。
1. [IN] char* : dirname
  テクスチャの存在するフォルダへのパスを指定します。

2. [IN] char* : bufptr
  mqoをメモリに展開したバッファのポインタを指定します。

3. [IN] int : bufsize
  読み込むバッファの長さを指定します。

4. [OUT] int* : hsidptr
  モデルを識別する番号が代入されます。

5. [IN] int : adjustuvflag
  UVの正規化をするかどうかのフラグ。
  通常0。

6. [IN] float : mult
  読み込み倍率を指定します。

ver5.5.0.5
E3DChgMaterial1stTexFromBuf マテリアル マテリアルの1個目のテクスチャを変更します。
削除と作成を行うので重い処理です。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : matno
  マテリアルを識別する番号を指定してください。

3. [IN] char* : bufptr
  テクスチャをメモリに展開したバッファのポインタを指定します。

4. [IN] int : bufsize
  読み込むバッファのサイズを指定します。

5. [OUT] int* : texidptr
  テクスチャを識別する番号が代入されます。

ver5.5.0.5
E3DChgMaterialExtTexFromBuf マテリアル マテリアルの拡張テクスチャを変更します。
削除と作成を行うので重い処理です。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : matno
  マテリアルを識別する番号を指定してください。

3. [IN] int : extno
  拡張番号を指定してください。

4. [IN] char* : bufptr
  テクスチャをメモリに展開したバッファのポインタを指定します。

5. [IN] int : bufsize
  読み込むバッファのサイズを指定します。

6. [OUT] int* : texidptr
  テクスチャを識別する番号が代入されます。
ver5.5.0.5
E3DChgMaterial1stTexFromID マテリアル マテリアルの1つめのテクスチャの内容を
指定したIDのテクスチャに変更します。

内部ではテクスチャのコピーは行わず、テクスチャのリンクを行います。

この命令を呼ぶと一番最初のオリジナルのテクスチャ内容は破棄されます。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : matno
  マテリアルを識別する番号を指定してください。

3. [IN] int : texid
  テクスチャIDを指定します。

ver5.5.0.6
E3DChgMaterialExtTexFromID マテリアル マテリアルの拡張テクスチャ(テクスチャアニメ用)の内容を
指定したIDのテクスチャに変更します。

内部ではテクスチャのコピーは行わず、テクスチャのリンクを行います。

この命令を呼ぶと一番最初のオリジナルのテクスチャ内容は破棄されます。
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : matno
  マテリアルを識別する番号を指定してください。

3. [IN] int : extno
  拡張番号を指定してください。

4. [IN] int : texid
  テクスチャIDを指定します。
ver5.5.0.6
E3DSetCameraAnimeTargetHsidAll カメラ camファイルの注視点となるモデルのhsidを設定します。
注視点のボーンやlooktypeも設定しないと機能しません。
これらはRokDeBone2のカメラタブで設定します。

RokDeBone2のカメラタブで注視ボーンの設定をすると、注視hsidは値「1」が設定されます。

この数値を変更するのがこの命令の目的です。

1. [IN] int : animno
  カメラアニメを識別する番号を指定してください。

2. [IN] int : hsid
  モデルを識別する番号を指定してください。
ver5.5.0.7
E3DSetDispSwitchForce モデル情報 DispSwitchをプログラムから強制的に設定します。
この命令で設定すると、アニメーションに設定されているDispSwitchを無視して、設定内容が反映されます。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : swid
  スイッチのID。
  0から99。

3. [IN] int : state
  スイッチの状態。
  0はオフ。1はオン。2はモーションの設定を反映。


ver5.5.1.1
 E3DSetWindowRgn 描画  不定形リージョンをメインウインドウ(scid1)に設定します。
scid2はレンダーターゲットテクスチャを想定します。
scid2のアルファが0以外の部分がウインドウ領域になります。
具体的な使い方は
DesktopM_Rgnソリューション
をご覧ください。
1. [IN] int : scid1
  メインウインドウのスワップチェインID。

2. [IN] int : scid2
  レンダーターゲットテクスチャのスワップチェインID。

 ver5.5.1.3
 E3DDestroyDispPart  モデル情報  表示用のパーツを削除します。
使用しないパーツを削除することで
メモリを節約できます。
一度削除するともとには戻せません。
一時的に無効にする場合は
E3DSetValidFlagを使用してください。
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : partno
  パーツを識別する番号。

 ver5.5.1.5
 E3DPlayMovie  描画 wmv, mpegなどの拡張子のムービーを
再生します。
この命令は動画の再生が終わるまで
ブロックします。
つまり再生が終わるまで次のプログラム行に制御が戻りません。
1. [IN] int : scid
  スワップチェインを識別するID。

2. [IN] const char* : filename
  ムービーのファイル名。

 ver5.5.1.6