RokDeBone2 Plugin SDK から呼び出せる関数


関数名 種類 説明、引数 バージョン
RDBGetVersion version RokDeBone2のバージョンを取得します。

引数:
 int* verptr
    [OUT] バージョン番号がセットされます。
RDBGetCurrentHSID ID RokDeBone2で、現在操作対象になっている、モデルデータを識別するためのIDを取得します。
モデルデータを読み込んでいない場合は、-1が取得されます。

プラグインの関数の最初で、必ず、チェックするようにしてください。

引数:
 int* hsidptr
   [OUT] モデルデータを識別するためのIDがセットされます。

ver1.0.7.6で新規
RDBGetCurrentMotID ID RokDeBone2で、現在、操作対象になっているモーションを識別するためのIDを取得します。
モーションが存在しない場合は、-1が取得されます。

引数:
 int hsid
   [IN] モデルデータを識別するためのID
 int* motidptr
   [OUT] モーションデータを識別するためのIDがセットされます。

ver1.0.7.6で新規
RDBGetSelectedJoint ID RokDeBone2で現在操作対象になっているジョイントを識別するためのIDを取得します。
マニピュレータの表示されているジョイントのIDです。
存在しない場合は0以下の値が取得されます。

引数:
 int* hsidptr
    [OUT] カレントのモデルデータを識別するID。
 int* jointnoptr
    [OUT] 操作対象のジョイントを識別するためのIDがセットされます。
ver5.2.1.4
RDBSelectJoint ID ジョイントを選択状態にします。
選択状態のジョイントは3Dウインドウにマニピュレータが表示され
階層エディタで対応する名前が選択された状態になります。

引数:
 int hsid
   [IN] モデルデータを識別するためのID
 int jointno
   [IN] 選択したいジョイントを識別するID。

ver5.5.0.5
RDBGetParent 階層 親のシリアル番号を取得します。
親は1個しかありません。

引数:
 int hsid
   [IN] モデルデータを識別するためのID
 int partno
   [IN] パーツを識別するID、シリアル番号
 int* parentnoptr
   [OUT] 親のシリアル番号、親がないときは、-1がセットされる。

ver1.0.7.6で新規
RDBGetChild 階層 子供のシリアル番号を取得します。
子供は、複数ある場合もあります。

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
  子供ジョイントの数が、代入されます。

ver1.0.7.6で新規
RDBGetName 名前 シリアル番号から、名前を取得します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : parentno
  シリアル番号を指定してください。

3. [OUT] char* : nameptr
  名前が代入されます。

4. [IN] int : strleng
  nameptrに渡した配列の長さを指定します。
ver1.0.7.6で新規
RDBGetPartNoByName 名前 パーツ、ジョイントの名前から、
シリアル番号を取得します。

同じ名前のパーツが、複数ある場合、
常に、一番最初に、見つかったパーツの番号が、取得されることに、注意してください。
ただし、表示オブジェクトと、ジョイントは、区別して、検索します。


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

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

3. [IN] int : isjoint
  表示オブジェクトを探すときは0,ジョイントを探すときは1を指定してください。

3. [OUT] int* : partno
  名前がpartnameである、パーツの番号が代入されます。

ver1.0.7.6で新規
RDBGetDispObjNum 表示オブジェクト情報 表示用オブジェクトの総数を取得します。
RDBGetDispObjInfoで詳細情報を取得する際の、
配列データの大きさの決定などに、
使用してください。

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

2. [OUT] int* : dispobjnumptr
  表示オブジェクトの総数が、代入されます。
ver1.0.7.6で新規
RDBGetDispObjInfo 表示オブジェクト情報 表示オブジェクトの詳細情報を、一括取得します。

この関数を使用するには、
データ取得用の配列を、malloc命令を使って、
作成する必要があります。
(データによって、表示オブジェクトの総数が変化するので、ユーザーさん側で、データ長を調整する必要があります。)


まず、dispobjmaxnum変数に、
RDBGetDispObjInfo関数で、
表示オブジェクトの総数を取得してください。


dispobjname引数は、
dispobjname = (char*)malloc( sizeof(char) * 256 * dispobjmaxnum );
で作成してください。

dnoを0からdispobjmaxnum - 1とすると、
任意の表示オブジェクトの名前のポインターは、
dispobjname + 256 * jno
でアクセスできます。


dispobjinfo引数は、
dispobjinfo = (int*)malloc( sizeof(int) * DOI_MAX * dispobjmaxnum );
で作成してください。

DOI_* は、coef_r.h
で定義されている定数です。

#define global DOI_SERIAL 0
#define global DOI_NOTUSE 1
#define global DOI_DISPSWITCH 2
#define global DOI_INVISIBLE 3
#define global DOI_MAX 4

のように、定義されています。
配列のインデックスとして、使用してください。

DOI_SERIALインデックスは、
表示オブジェクトのシリアル番号にアクセスするときに、
使用します。
表示オブジェクトのシリアル番号とは、
RDBGetPartNoByName 
で取得できる番号と同じものです。

DOI_NOTUSEインデックスは、
表示オブジェクトが無効になっているかどうかの
フラグにアクセスするときに、使用します。
無効なときに1が、有効なときに0が代入されています。

DOI_DISPSWITCHインデックスは、
表示オブジェクトのディスプレイスイッチの番号
にアクセスするときに使用します。
ディスプレイスイッチは、
RokDeBone2で、パーツごとに設定可能です。
詳しくは、RokDeBone2のマニュアルをご覧ください。


DOI_INVISIBLEインデックスは、
表示オブジェクトが表示されているかどうかのフラグにアクセスするときに使用します。


DOI_MAXは、
DOI_ で始まる定数の個数を定義しています。
dispobjinfoをmallocするときに使用します。


dnoを0からdispobjmaxnum - 1とすると、
任意の表示オブジェクト情報のシリアル番号には、
*( dispobjinfo + DOI_MAX * dno + DOI_SERIAL )
でアクセスできます。

同様に、ディスプレイスイッチは、
*( dispobjinfo + DOI_MAX * dno + DOI_DISPSWITCH )
でアクセスできます。

mallocしたポインタは、用事が済んだら、
freeすることをお忘れなく。



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

2. [IN] int : dispobjmaxnum
  データ取得用配列の大きさ(表示オブジェクトの数)を指定します。

3. [OUT] char* : dispobjname
  名前情報を取得するための配列を渡してください。
  上に書いた方法で、mallocしたポインタを渡してください。

4. [OUT] int* : dispobjinfo
  シリアル番号などを取得するための配列変数を渡してください。
  上に書いた方法で、mallocしたポインタを渡してください。

5. [OUT] int* : dispobjgetnum
  何個lの表示オブジェクトの情報を出力したかが、代入されます。
  通常は、dispobjmaxnumと同じ値が取得されます。

ver1.0.7.6で新規
RDBGetClockwise 表示オブジェクト情報 表面、裏面、両面のどの表示モードになっているかを取得します。


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

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

3. [OUT] int* : clockwiseptr
  表面の時は2
  裏面の時は1
  両面の時は3が代入されます。
  
ver1.0.7.6で新規
RDBGetJointNum ジョイント情報 ジョイントの総数を取得します。

RDBGetJointInfoで詳細情報を取得する際の、
配列データの大きさの決定などに、
使用してください。

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

2. [OUT] int* : jointnumptr
  ジョイントの総数が、代入されます。
ver1.0.7.6で新規
RDBGetJointInfo ジョイント情報 ジョイントの詳細情報を、一括取得します。

この関数を使用するには、
データ取得用の配列を、malloc命令などを使って、
作成する必要があります。
(データによって、ジョイントの総数が変化するので、ユーザーさん側で、データ長を調整する必要があります。)


まず、jointmaxnum変数に、
RDBGetJointInfo関数で、
ジョイントの総数を取得してください。

jointname引数は、
jointname = (char*)malloc( sizeof(char) * 256 * jointmaxnum );
で作成してください。
mallocが嫌な方は、
char jointname[maxnum][256];
のように、jointmaxnumより大きい値maxnumで配列を確保してください。

jno を0からjointmaxnum - 1としたとき、
任意のジョイントの名前へのポインタは、
jointname + 256 * jno
でアクセスできます。


jointinfo引数は、
jointinfo = (int*)malloc( sizeof(int) * JI_MAX * jointmaxnum );
で作成してください。
mallocが嫌な方は、
int jointinfo[maxnum][JI_MAX];
のように、jointmaxnumより大きい値maxnumで配列を確保してください。


JI_* は、coef_v.hの
最初の方で定義されている定数です。

#define global JI_SERIAL 0
#define global JI_NOTUSE 1
#define global JI_PARENT 2
#define global JI_CHILD 3
#define global JI_BROTHER 4
#define global JI_SISTER 5
#define global JI_MAX 6

のように、定義されています。
配列のインデックスとして、使用してください。

JI_SERIALインデックスは、
ジョイントのシリアル番号にアクセスするときに、
使用します。

JI_NOTUSEインデックスは、
ジョイントが無効になっているかどうかの
フラグにアクセスするときに、使用します。
無効なときに1が、有効なときに0が代入されています。

JI_PARENT, JI_CHILD,
JI_BROTHER, JI_SISTER
インデックスは、
ジョイントの階層構造にアクセスするときに
使用します。
詳しくは、
ジョイントの階層構造のページ
をご覧ください。

JI_MAXは、
JI_ で始まる定数の個数を定義しています。
jointinfoをmallocするときに使用します。


jnoを0からjointmaxnum - 1 としたとき、
任意のジョイントのシリアル番号は、
*( jointinfo + JI_MAX * jno + JI_SERIAL )
でアクセスできます。

同様に、親の番号は、
*( jointinfo + JI_MAX * jno + JI_PARENT )
でアクセスできます。

mallocしたポインターは、用が済んだら
freeすることをお忘れなく。


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

2. [IN] int : jointmaxnum
  データ取得用配列の大きさ(ジョイントの数)を指定します。

3. [OUT] char* : jointname
  名前情報を取得するための配列を渡してください。
  上に書いた方法で、mallocしたポインタを渡してください。

4. [OUT] int* : jointinfo
  シリアル番号や、階層構造などを取得するための配列変数を渡してください。
  上に書いた方法で、mallocしたポインタを渡してください。

5. [OUT] int* : jointgetnum
  何個lのジョイントの情報を出力したかが、代入されます。
  通常は、jointmaxnumと同じ値が取得されます。

ver1.0.7.6で新規
RDBIsJoint ジョイント情報 指定したパーツが、ジョイントかどうかを判定します。

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

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

3. [OUT] int* : isjoint
  ジョイントだった場合は 1 が、
  ジョイントではない場合は 0 が、セットされます。

RDBCreateBone ジョイント情報 ボーンを新規に作成します。
読み込み済みのモーションは全て破棄されます。
影響度の再計算はしません。
ボーンの位置はRDBSetJointInitialPosで設定してください。

仕様上ボーンを破棄するとゴミデータが残ります。
ゴミデータはあまり多くなると描画速度に影響します。
RDBCreateBoneにはゴミデータが存在すればそれを再利用するような仕組みがあります。
ですのでまず不要なボーンをRDBDestroyBoneした後にRDBCreateBoneするとゴミが少なくて済みます。
ゴミの掃除の仕方は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.4
RDBDestroyBone ジョイント情報 ボーンを破棄します。
読み込み済みのモーションは全て破棄されます。
影響度の再計算は強制的に行われます。

RDBCreateBoneの説明もお読みください。

引数:
1. [IN] int : hsid
  モデルデータを識別するID。

2. [IN] int : boneno
  削除したいボーンを識別するID。
ver5.2.1.4
RDBSetJointInitialPos ジョイント情報 ジョイント(ボーン)の初期位置をローカル座標系で設定します。

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

2. [IN] int : jointno
  ジョイントを識別するパーツのid

3. [IN] RDBPoint : pos
  ジョイントの位置をローカル座標系で指定します。

4. [IN] int : calcflag
  頂点の影響度の再計算をするときは1を、しないときは0を指定します。

5. [IN] int : excludeflag
  calcflagに1を指定したときのみ意味を持ちます。
  1を指定すると無効にしているパーツの影響度は再計算しません。
  0を指定すると無効にしているパーツも全て再計算の対象になります。

ver5.2.1.4
RDBGetVertNumOfPart 頂点位置 partnoで識別されるパーツに、
いくつの頂点が含まれるかを取得します。


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

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

3. [OUT] int* : vertnum
  パーツに含まれる頂点数が代入されます。
ver1.0.7.6で新規
RDBGetVertPos 頂点位置 partnoで識別されるパーツ内の、頂点番号vertnoの、頂点の座標を取得します。

ボーン変形や、カメラ移動などの影響を受けていない
ローカルな座標値が、返されます。

ボーン変形を考慮した座標を取得したい場合は、
RDBGetVertPos2を使用してください。

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

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

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

4. [OUT] RDBPoint* : vertpos
  頂点の座標が代入されます。
ver1.0.7.6で新規
RDBGetVertPos2 頂点位置 partnoで識別されるパーツ内の、頂点番号vertnoの、頂点の座標を取得します。
ボーン変形後の座標を取得できます。

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

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

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

4. [IN] int : motid
  モーションを識別するID

5. [IN] int : frameno
  モーションのフレーム番号

6. [OUT] RDBPoint* : vertpos
  頂点の座標が代入されます。

ver1.0.7.6で新規
RDBGetVertNoOfFace 頂点位置 facenoで指定した面に含まれる頂点の番号を
3つ取得します。(3角形の頂点です)

RDBGetSamePosVertの説明も
お読みください。


引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [IN] int : faceno
  面を識別する番号を指定してください。

4. [OUT] int* : vertnoptr1
5. [OUT] int* : vertnoptr2
6. [OUT] int* : vertnoptr3
  3角形の面を構成する3つの頂点の番号が
  代入されます。
ver1.0.7.6で新規
RDBGetSamePosVert 頂点位置 モデルデータ中には、同じ頂点座標で、
UV座標だけ違う頂点が存在します。

同じ位置の頂点の番号を取得する関数です。
RDBGetVertNoOfFaceと組み合わせて
使うことを想定しています。

samevertno には、見つかった頂点数分の
頂点番号が代入されます。


int samevertno[5];
などで、長さ5くらいの配列を用意してください。


引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [IN] int : vertno
  頂点を識別する番号を指定してください。

4. [OUT] int* : samevertno
  dim samevertno, arraylengで作成した配列を指定してください。
  見つかった頂点の番号が代入されます。

5. [IN] int : arrayleng
  samevertno配列を作成したときの大きさを指定してください。

6. [OUT] int* : samenum
  見つかった頂点の数が代入されます。
  つまり、maxindex = samenum - 1とすると
  samevertno[0] から samevertno[maxindex]
  まで、見つかった頂点の番号が、代入されていることになります。

ver1.0.7.6で新規
RDBGetNormal 頂点位置 表示用オブジェクトの、法線を取得します。

オブジェクトの頂点の数分の法線を、一括で、取得します。

モーションを適用した法線を取得したい場合は、motidにRDBGetCurrentMotIDで取得したIDを渡し、
モーションを適用していない、初期状態の法線を取得したい場合は、motid に -1 を渡します。

法線取得用のメモリは、プラグイン作成者が、作成、破棄してください。

具体的な使用例は、ShapeExporter.cppにありますので、ご覧ください。


引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別するIDを指定してください。
  初期状態の法線を取得したい場合は、-1を指定してください。

4. [IN] int : frameno
  モーションのフレーム番号を指定してください。
  motidに-1以外を指定したときに、参照されます。

5. [OUT] RDBPoint* : normalptr
  頂点の数分の法線が、代入されます。
  RDBGetVertNumOfPart( hsid, partno, &vertnum );
  normalptr = (RDBPoint*)malloc( sizeof( RDBPoint ) * vertnum );
  などで、取得用のメモリを作成してください。

6. [IN] int : arrayleng
  normalptrに渡した、メモリの要素数を指定してください。
  normalptr = (RDBPoint*)malloc( sizeof( RDBPoint ) * vertnum );
  で作成した場合は、vertnumを指定してください。

ver1.0.7.7で追加
RDBGetOrgVertNo 頂点情報 mqoファイル内での頂点番号を取得する。

パーツ内の頂点の数は、RDBGetVertNumOfPartのvertnumで取得されます。

プラグインの関数では、頂点の番号に、0から(vertnum - 1)の頂点の番号を使用できます。

この頂点の番号は、表示用の最適化をした後の、頂点の番号で、
rok, mqoファイル内での頂点の番号と異なる場合があります。

この関数は、最適化後の頂点番号に対応する、rok,mqoファイル内での頂点の番号を取得します。

mqoの場合は、
mqoファイル中の、パーツごとの頂点の出現順番を返します。(0から始まる数字)

rokの場合は、
rokファイル中の、1から始まる頂点のインデックスを返します。
rokの場合は、パーツごとの番号ではなくて、
頂点全体を通しての番号ですので
注意してください。


指定した頂点と同じ座標を持つ頂点の番号が代入されるので、場合によっては、複数取得されます。


この関数を使う前に、
RDBChkIM2Status関数で、引数に
1が返されることを確認してください。

0が返された場合は、sigファイルを新しい形式にコンバートする必要があります。

orgarraylengに、取得できる情報の数をセットして、
int* orgnoarray = (int*)malloc( sizeof( int ) * orgarrayleng );
で、メモリを確保してください。
または、単に、int orgnoarray[ orgarrayleng ]; でもいいです。


引数:
1. [IN] int : hsid
  モデルを識別するID

2. [IN] int : partno
  取得したいパーツの番号を指定します。
  RDBGetPartNoByNameで取得した番号を渡してください。

3. [IN] int : vertno
  調べたい頂点の番号を指定してください。

4. [OUT] int* : orgnoarray
  この配列に、元データの頂点の番号が代入されます。
  maxindex = getnum - 1とすると
  *orgnoarray から、*(orgnoarray + maxindex)までに
  頂点の番号が代入されます。

5. [IN] int : arrayleng
  orgnoarrayをmallocしたときの、配列の大きさ(要素数)を指定してください。


6. [OUT] int* : getnum
  この関数が、orgnoarrayに代入した情報の数を取得できます。


ver1.1.1.5で新規
RDBGetInfElemNum 影響度 頂点毎のボーンの影響数を取得します。

2と取得された場合、
その頂点は、2個のボーンの影響を受けることを意味します。


引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [IN] int : vertno
  頂点を識別する番号を指定してください。

4. [OUT] int* : numptr
  ボーンの影響数がセットされます。

ver1.0.7.6で新規
RDBGetInfElem 影響度 頂点毎のボーンの影響度を取得します。


引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [IN] int : vertno
  頂点を識別する番号を指定してください。

4. [IN] int : infno
  要素の番号
  RDBGetInfElemNum で取得した数をnumとすると、
  この引数には、0から(num - 1)までの値を指定してください。

5. [OUT] int* : bonenoptr
  影響を受けるボーンのシリアル番号
  -1がセットされたときは、無効なデータを意味します。

6. [OUT] float* : rateptr
  *bonenoptrにセットされたボーンからの影響度が、代入されます。


ver1.0.7.6で新規
RDBSetInfElem 影響度 頂点にボーン影響度を設定します。

paintmodeの意味
paintmodeは、影響度の設定方法を表します。
coef_r.h内で、PAINT_で始まる定数で、
enum {
PAINT_NOR,
PAINT_EXC,
PAINT_ADD,
PAINT_SUB,
PAINT_ERA,
PAINT_MAX
};

NORは、
すでに設定してある影響度情報に、影響度データを追加します。
同じボーンの情報が既にある場合は、上書きします。
EXCは、すでに設定してある影響度情報を、破棄してから、影響度データを設定します。
ADDは、すでに設定してある影響度の比重に、指定した比重を足し算します。
SUBは、すでに設定してある影響度の比重から、指定した比重を引き算します。
ERAは、指定したボーンの影響度データを削除します。


calcmodeの意味
calcmodeは、影響度の計算方法を表します。
coef_r.h中で定義されているCALCMODE_で始まる定数を使用します。
以下のように定義されています。
enum{
CALCMODE_NOSKIN0,
CALCMODE_ONESKIN0,
CALCMODE_ONESKIN1,
CALCMODE_DIRECT0,
CALCMODE_SYM,
CALCMODE_MAX
};

NOSKIN0は、スキニング無し。
ONESKIN0は、距離と角度によりスキニング。
ONESKIN1は、距離のみによりスキニング。
DIRECT0は、直接数値指定。
SYMは、対称コピーによる指定。
を表します。


calcmodeとpaintmodeの依存関係
CALCMODE_NOSKIN0のときは、PAINT_EXCを設定してください。
CALCMODE_DIRECT0のときは、PAINT_NORまたは、PAINT_EXCを設定してください。


Easy3D内部での影響度の計算方法
影響度を算出する際には、
orginf, dispinf, userrate, normalizeflagを使います。
orginfは、calcmodeで指定した方法で、算出した影響度。
userrateは、比重。
normalizeflagは、正規化(一つの頂点の影響度の合計が1になるようにする)をするかどうかのフラグ。
dispinfが、最終的な、影響度。
まず、InfElemごとに、以下の計算をします。
orginf * userrate / 100
normalizeflagが0のときは、この値がそのまま、dispinfになります。
normalizeflagが1のときは、
全部のInfElemの影響度(dispinf)の合計が1になるように、正規化します。


directvalは、CALCMODE_DIRECT0のときのみ意味を持ちます。この値をorginfとして設定します。
正の小数を指定してください。


スムージング角度の関係などで、同じ位置に複数の頂点が存在する場合があります。
これらの頂点を同時に同じように設定しないと、ボーン変形が、乱れることがあるので、注意してください。


childjointnoは、ボーンの線分の内の子供のジョイントの番号です。
childjointnoには、必ず親が存在するジョイントの番号を指定してください。
一番親のジョイントは、childjointには、指定できません。



引数:
1. [IN] int : hsid
  モデルを識別するID

2. [IN] int : partno
  パーツの番号を指定します。
  RDBGetPartNoByNameで取得した番号を渡してください。

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

4. [IN] int : childjointno
  影響を受けるボーンの指定。
  ボーンの線分の内、子供の方のジョイントの番号を
  指定します。

5. [IN] int : calcmode
  影響度の計算方法を指定します。

6. [IN] int : paintmode
  影響度の設定方法を指定します。

7. [IN] int : normalizeflag
  正規化をするときは1、
  しないときは0を指定します。

8. [IN] float : userrate
  比重%の値を指定します。
  100%の時は、100.0を指定します。

9. [IN] float : directval
  直接数値指定の数値を指定します。


ver1.1.1.5で新規
RDBChkIM2Status 影響度 影響マップ情報(im2)が、利用可能かどうかを調べます。

status引数に1が返された場合は、
利用可能。
0が返された場合は、
利用不可能です。

0が返された場合は、sigファイルを新しい形式にコンバートする必要があります。


RDBGetOrgVertNoを使用する前に、
このRDBChkIM2Status関数で、
影響マップファイルの機能が使えるかどうかを
調べてください。


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

2. [OUT] int* : status
  影響マップ情報が、利用可能かどうかが代入されます。
ver1.1.1.5で新規
RDBGetFaceNum 表示オブジェクトの面の数を取得します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [OUT] int* : numptr
  面の数が代入されます。

ver1.0.7.6で新規
RDBGetTriIndices 表示用パーツの、TRIANGLELISTを取得します。
一つの3角形に付き、3つの頂点番号が取得されます。

取得に必要なバッファの長さを取得するためには、
wordnum引数に0をセットします。

バッファ長を取得した後、バッファをアロケートし、
そのバッファに情報を代入するために、もう一度、この関数を呼んでください。


具体的には、以下のようになります。
WORD* buf = 0;
int wordnum, setwordnum, revflag;
RDBGetTriIndices( hsid, partno, buf, 0, &setwordnum, &revflag );

buf = (WORD*)malloc( sizeof( WORD ) * setwordnum );

wordnum = setwordnum;
RDBGetTriIndices( hsid, partno, buf, wordnum, &setwordnum, &revflag );


free( buf );

bufはint*ではなくて、WORD*なので、注意してください。


引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [OUT] WORD* : buf
  インデックスが代入されるバッファを指定してください。

4. [IN] int : wordnum
  bufの要素数を指定してください。
  バッファ長が、sizeof( WORD ) * wordnumとRDBが解釈します。
  必要なバッファ長を調べたいだけのときは、0を指定してください。

5. [OUT] int* : setwordnumptr
  wordnumに0を指定したときには、必要なバッファの要素数を、
  それ以外の時は、bufに代入したWORDの要素数を代入します。

6. [OUT] int* : revflagptr
  表示パーツが両面表示の時に1がセットされます。
  bufには、片面の情報のみしか代入されません。

ver1.0.7.6で新規
RDBGetTriIndicesInt 表示用パーツの、TRIANGLELISTを取得します。RDBGetTriIndicesの32ビット版です。
一つの3角形に付き、3つの頂点番号が取得されます。

取得に必要なバッファの長さを取得するためには、
intnum引数に0をセットします。

バッファ長を取得した後、バッファをアロケートし、
そのバッファに情報を代入するために、もう一度、この関数を呼んでください。


具体的には、以下のようになります。
int* buf = 0;
int intnum, setintnum, revflag;
RDBGetTriIndicesInt( hsid, partno, buf, 0, &setintnum, &revflag );

buf = (int*)malloc( sizeof( int ) * setintnum );

intnum = setintnum;
RDBGetTriIndicesInt( hsid, partno, buf, intnum, &setintnum, &revflag );


free( buf );


引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [OUT] int* : buf
  インデックスが代入されるバッファを指定してください。

4. [IN] int : intnum
  bufの要素数を指定してください。
  バッファ長が、sizeof( int ) * intnumとRDBが解釈します。
  必要なバッファ長を調べたいだけのときは、0を指定してください。

5. [OUT] int* : setintnumptr
  intnumに0を指定したときには、必要なバッファの要素数を、
  それ以外の時は、bufに代入したintの要素数を代入します。

6. [OUT] int* : revflagptr
  表示パーツが両面表示の時に1がセットされます。
  bufには、片面の情報のみしか代入されません。
RDBGetAlpha パーツの透明度を取得します。

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

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

3. [IN] int : vertno
  この引数は、現在、使用されません。
  適当な数字を入れてください。

4. [OUT] int* : alpha
  指定したパーツの透明度が、0〜255の値で代入されます。

ver1.0.7.6で新規
RDBGetDiffuse パーツの任意の頂点のdiffuse色を取得します。

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

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

3. [IN] int : vertno
  色を取得したい頂点の番号を指定します。

4. [OUT] int* : r
5. [OUT] int* : g
6. [OUT] int* : b
   指定した頂点のdiffuse色が、
   RGB = ( r, g, b )に代入されます。
   r, g, bそれぞれ、0から255の値が代入されます。
ver1.0.7.6で新規
RDBGetAmbient パーツの任意の頂点のambient色を取得します。

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

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

3. [IN] int : vertno
  色を取得したい頂点の番号を指定します。

4. [OUT] int* : r
5. [OUT] int* : g
6. [OUT] int* : b
   指定した頂点のambient色が、
   RGB = ( r, g, b )に代入されます。
   r, g, bそれぞれ、0から255の値が代入されます。
ver1.0.7.6で新規
RDBGetSpecular パーツの任意の頂点のspecular色を取得します。

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

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

3. [IN] int : vertno
  色を取得したい頂点の番号を指定します。

4. [OUT] int* : r
5. [OUT] int* : g
6. [OUT] int* : b
   指定した頂点のspecular色が、
   RGB = ( r, g, b )に代入されます。
   r, g, bそれぞれ、0から255の値が代入されます。
ver1.0.7.6で新規
RDBGetEmissive パーツの任意の頂点のemissive色を取得します。

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

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

3. [IN] int : vertno
  色を取得したい頂点の番号を指定します。

4. [OUT] int* : r
5. [OUT] int* : g
6. [OUT] int* : b
   指定した頂点のspecular色が、
   RGB = ( r, g, b )に代入されます。
   r, g, bそれぞれ、0から255の値が代入されます。
ver1.0.7.9で新規
RDBGetSpecularPower パーツの任意の頂点のスペキュラーPowerの値を取得します。

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

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

3. [IN] int : vertno
  色を取得したい頂点の番号を指定します。

4. [OUT] float* : powerptr
  指定した頂点のpowerが代入されます。


ver1.0.7.9で新規
RDBGetShaderType モデルデータのシェーダーのタイプを取得します。

シェーダーのタイプと、色のオーバーフロー処理の2つを取得できます。
シェーダーのタイプは、SDKのCoef_r.hの
COL_ で始まるenumで定義されています。

COL_OLD
  従来のRokDeBone2の計算法
  emissiveは、無効。スペキュラーは、形だけの実装。
COL_PHONG
  Lambertのディフーズ
  Phongのスペキュラー
  emissive有り
COL_BLINN
  Lambertのディフーズ
  Blinnのスペキュラー
  emissive有り
COL_SCHLICK
  Lambertのディフーズ
  Schlickのスペキュラー
  emissive有り
COL_MQCLASSIC
  メタセコイアのマテリアルでClassicを指定したときのモード
  emissive有り

色のオーバーフロー処理は、SDKのCoef_r.hの
OVERFLOW_ で始まるenumで定義されています。

OVERFLOW_CLAMP
  クランプ。自己照明がきついと、色が破綻する。
  一番高速。
OVERFLOW_SCALE
  スケール。色は破綻しないが、暗くなる。
OVERFLOW_ORG
  オリジナル。明るさを保つ。


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

2. [OUT] int* : shaderptr
3. [OUT] int* : overflowptr
  シェーダータイプと、オーバーフロー処理が代入されます。
  値の意味は、上記を参照。

ver1.0.7.9で新規
RDBGetTextureInfo テクスチャ 表示用のパーツに設定されている、テクスチャーの情報を取得します。
nameptr引数には、256長のバッファのポインタを指定してください。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [OUT] char* : nameptr
  テクスチャーファイル名を代入します。
  char texname[256]などで、確保した配列のポインタなどを渡してください。
  テクスチャーが設定されていない場合には、
  *nameptr = 0 とします。

4. [OUT] int* : repuptr
5. [OUT] int* : repvptr
  テクスチャーの繰り返し数が代入されます。
  U方向、V方向の繰り返しがそれぞれ、
  *revuptrと*repvptrに代入されます。

6. [OUT] float* : animuptr
7. [OUT] float* : animvptr
  テクスチャーのUVの移動値がセットされます。
  1フレームごとに、テクスチャーのUV値に足される値です。


8. [OUT] int* : transparentptr
  テクスチャーの透過モードがセットされます。
  不透明の時0
  黒を透過色とするとき1
  テクスチャデータのアルファで透過するとき2
  がセットされます。

ver1.0.7.6で新規
RDBGetExtTextureInfo テクスチャ テクスチャーの拡張情報を取得します。
テクスチャーのパラパラアニメや、
マルチテクスチャ(現在非対応)のための情報です。

最大100枚までのテクスチャ情報が取得されます。
extnameptrには、100×256長のバッファのポインタを渡してください。


合計25枚のテクスチャーパラパラアニメをRokDeBone2で
指定した場合、
1枚目のテクスチャファイル名は、RDBGetTextureInfoで、
2枚目から25枚目までのファイル名は、RDBGetExtTextureInfoで
取得されます。

4番目の引数に代入されるテクスチャーの数は、
RDBGetExtTextureInfoで取得されるテクスチャーの数です。
(RDBGetTextureInfoで取得される枚数(1枚分)は、カウントしません。)


引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [OUT] char* : extnameptr
  拡張テクスチャーファイル名を代入します。
  char extname[100][256] などで確保したバッファを
  (char*)extname などとキャストして渡してください。

  256長ごとに、ファイル名がコピーされます。
  テクスチャーが存在しない場合には0が代入されます。

4. [OUT] int* : texnumptr
  拡張テクスチャーの数が代入されます。
  この数分、extnameptrにファイル名がコピーされます。
  
5. [OUT] int* : texmodeptr
  拡張モードがセットされます。
  通常モード(拡張テクスチャー無し)のとき0
  パラパラアニメモードのとき1
  マルチテクスチャモード(現在非対応)のとき2
  がセットされます。

6. [OUT] int* : repflagptr
  パラパラアニメの繰り返しモードがセットされます。
  パラパラアニメしないとき0
  最大フレーム数に達したときに、そこで停止する場合1
  最大フレームの後、先頭フレームに戻る場合2
  がセットされます。

7. [OUT] int* : stepptr
  パラパラアニメにおいて、
  何フレームごとにテクスチャーが変化するかが代入されます。
  例えば、3がセットされていた場合、
  3フレームに1枚の速さで、パラパラアニメします。
ver1.0.7.6で新規
RDBGetUV テクスチャ テクスチャの、UV情報を、取得します。

テクスチャを貼っていないオブジェクトでも、
デフォルト状態で、X軸投影でテクスチャを貼り付けるときのUV座標が、セットされています。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。

3. [IN] int : vertno
  頂点を識別する番号を指定してください。

4. [OUT] float* : uptr
5. [OUT] float* : vptr
  テクスチャのUV座標が、セットされます。

ver1.0.7.7で追加
RDBGetMotionNum ボーン、モーション hsidで識別される形状データがいくつのモーションを読み込んでいるかを取得します。

この関数で取得したモーションの数をmotnumとすると、
モーション関数のmotidに渡すことの出来る有効な値は、0から(motnum - 1)までの数です。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [OUT] int* : motnumptr
  何個のモーションを読み込んでいるかがセットされます。

ver3.0.4.0で追加
RDBGetMotionName ボーン、モーション モーションのIDからモーションの名前を取得します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [OUT] char* : motnameptr
  モーションの名前がセットされます。
  motnameptrには長さが256以上の配列のポインタを渡してください。
  例えば、char motname[256];で宣言し、motnameを引数に渡してください。

ver3.0.4.0で追加
RDBGetBonePos ボーン、モーション ボーンの位置情報を取得します。

poskind == 0のときは、ローカル座標
poskind == 1のときは、グローバル座標
が取得できます。

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


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

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

3. [IN] int : poskind
  ローカル座標と、グローバル座標の
  どちらを取得するかを指定します。

4. [IN] int : motid
  モーションを識別するID
  
  -1を指定すると、初期状態の位置を取得します。
  (-1を指定した場合は、ローカル座標のみ)

5. [IN] int : frameno
  モーションのフレーム番号を指定してください。

6. [OUT] RDBPoint* : posptr
  (posptr->x, posptr->y, posptr->z)に、
  ボーンの座標が代入されます。

ver1.0.7.6で新規
RDBGetBoneMatrix ボーン、モーション ボーンの姿勢情報を表すマトリクスを取得します。
マトリックスには、スケール、回転、移動の操作が反映されています

modeに0を指定すると、親の姿勢が掛かっていないマトリックスを、
modeに1を指定すると、親の姿勢が掛かっているマトリックスを取得できます。


引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  モーションのフレーム番号を指定してください。

5. [IN] int : mode
  親の姿勢が掛かっていない情報を取得したい場合は0を、
  親の姿勢が掛かっている情報を取得したい場合は1を指定してください。

6. [OUT] RDBMatrix* : bonematptr
  マトリクスが代入されます。
ver1.0.7.6で新規
RDBGetBoneQuaternion ボーン、モーション ボーンの回転情報のクォータニオンを取得します。

modeに0を指定すると、親の姿勢が掛かっていないクォータニオンを、
modeに1を指定すると、親の姿勢が掛かっているクォータニオンを取得できます。


引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  モーションのフレーム番号を指定してください。

5. [IN] int : mode
  親の姿勢が掛かっていない情報を取得したい場合は0を、
  親の姿勢が掛かっている情報を取得したい場合は1を指定してください。

6. [OUT] RDBQuaternion* : qptr
  クォータニオンが代入されます。

ver1.0.7.6で新規
RDBGetFrameLeng ボーン、モーション モーションのフレーム長を取得します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [OUT] int* : lengptr
  モーションの長さが代入されます。
ver1.0.7.6で新規
RDBGetKeyFrameNo ボーン、モーション 指定したジョイントのキーフレームの番号(フレーム番号)を取得します。

framearrayに、キーフレームの番号が代入されます。
RDBGetFrameLengで取得した値をlengとすると。

framearrayは、
framearray = (int*)malloc( sizeof( int ) * leng );
でアロケートしてください。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンパーツを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [OUT] int* : framearray
  この配列に、フレーム番号が、代入されます。
  アロケートの仕方は、上記をご覧ください。

5. [IN] int : arrayleng
  framearrayをアロケートしたときの要素数を指定してください。
  上記の例ですと、 (framemax + 1)を指定することになります。

6. [OUT] int* : framenumptr
  framearrayに格納した要素の数が代入されます。
  キーフレームの数です。
ver1.0.7.6で新規
RDBGetKeyFrameSRT ボーン、モーション 指定したキーフレームの姿勢情報を、SRTに分けて取得します。
RDBGetOffsetMatrixとセットで使うことを想定しています。
DX9SDKのSkinnedMeshサンプルと同じ形式のSRTを取得します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンパーツを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  RDBGetKeyFrameNoで取得したフレーム番号の1つを指定してください。

6. [OUT] RDBPoint* : pscale
  姿勢情報の拡大を表すベクトルが代入されます。

7. [OUT] RDBQuaternion* : prot
  姿勢情報の回転を表すクォータニオンが代入されます。

8. [OUT] RDBPoint* : ptra
  姿勢情報の移動を表すベクトルが代入されます。
ver1.0.7.6で新規
RDBGetKeyFrameSRT2 ボーン、モーション 指定したキーフレームの姿勢情報を、SRTに分けて取得します。
RokDeBone2が内部で保持している形式のままのSRTを取得します。
内部ではOffsetMatrixを使用しないので、RDBGetKeyFrameSRTの結果とはTが異なります。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンパーツを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  RDBGetKeyFrameNoで取得したフレーム番号の1つを指定してください。

6. [OUT] RDBPoint* : pscale
  姿勢情報の拡大を表すベクトルが代入されます。

7. [OUT] RDBQuaternion* : prot
  姿勢情報の回転を表すクォータニオンが代入されます。

8. [OUT] RDBPoint* : ptra
  姿勢情報の移動を表すベクトルが代入されます。
ver3.0.4.0で追加
RDBGetOffsetMatrix ボーン、モーション DX9のSetBoneOffsetMatrixに渡すマトリックスを取得します。

モーション番号、フレーム番号にかかわらず、同じ値が取得されます。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンパーツを識別する番号を指定してください。

3. [OUT] RDBMatrix* : offsetmatptr
  マトリクスが代入されます。
ver1.0.7.6で新規
RDBGetCurrentFrameNo ボーン、モーション RokDeBone2のモーションダイアログの、現在のフレーム番号を取得します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [OUT] int* : framenoptr
  現在のフレーム番号が代入されます。

ver1.0.7.6で新規
RDBSetMotionFrameNo ボーン、モーション モーションのIDとフレーム番号をセットします。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : frameno
  モーションのフレーム番号。
  RDBGetFrameLengで取得したフレーム長をframelengとすると
  この引数に指定する数字は0から(frameleng - 1)までの数字でないといけません。

ver5.2.1.7で新規
RDBDbgOut デバッグ出力 RokDeBone2で作成する、dbg.txtに、文字列を出力します。

printfの要領で、使ってください。
一度の命令で出力できる文字は、4097バイトまでです。


RDBDbgOut( char* lpFormat, ... );


ver1.0.7.6で新規
RDBSaveSigFile ファイル出力 形状データ、影響度の入った、sigファイルを、出力します。


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

2. [IN] char* : filename
  保存ファイル名(パス)を指定してください。
ver1.1.1.5で新規
RDBCreateProgressBar プログレスバー RokDeBone2のメインウインドウの下部に、プログレスバーを作成します。

引数:
なし
ver1.1.1.7で新規
RDBSetProgressBar プログレスバー 作業の達成率などを、
プログレスバーに表示させます。

pos は、0から100の間の数を、
セットしてください。


引数:
1. [IN] int : pos
  達成率(0から100)

ver1.1.1.7で新規
RDBDestroyProgressBar プログレスバー RDBCreateProgressBarで作成したプログレスバーを、削除します。

引数:
なし
ver1.1.1.7で新規
RDBGetMaterialNum マテリアル マテリアルの総数を取得します。

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

2. [OUT] int* : matnumptr
  マテリアルの総数が代入されます。
RDBGetMaterial マテリアル マテリアルを取得します。

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

2. [IN] int : matno
  マテリアル番号
  RDBGetMaterialNumで取得した数をmatnumとすると、0から(matnum - 1)の値を指定してください。

3. [OUT] RDBMaterialt* : matptr
  マテリアルが代入されます。

RDBGetMaterialNo マテリアル 表示オブジェクトの指定した面にどのマテリアルが貼られているかを取得します。

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

2. [IN] int : partno
  表示オブジェクトのシリアル番号を指定してください。

3. [IN] int : faceno
  面の番号を指定してください。0から(面の総数-1)までの値。

4. [OUT] intt* : matnoptr
  マテリアル番号が代入されます。

RDBGetMorphBaseNum モーフ モーフのベースの数を取得します。
それぞれのモーフにはベースは1個だけしか含まれないので
この数はモーフの数と一致します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [OUT] int* : basenumptr
  ベースの数が代入されます。

ver5.2.1.7で新規
RDBGetMorphBaseInfo モーフ モーフのベースの情報を一括で取得します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [OUT] RDBMORPHBASE* : baseinfoptr
  ベースの情報が代入されます。
  RDBMORPHBASEはRDBPlugin.hで定義されています。
  
  RDBGetMorphBaseNum( hsid, &basenum );
  baseinfo = (RDBMORPHBASE*)malloc( sizeof( RDBMORPHBASE ) * basenum );
  のようにして作成したメモリを指定してください。

3. [IN] int : arrayleng
  baseinfoの要素数を指定してください。
  RDBGetMorphBaseNumで取得したbasenum個じゃないとエラーになります。

ver5.2.1.7で新規
RDBGetMorphTargetInfo モーフ モーフのターゲットの情報をモーフごと(ベースごと)に取得します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : baseid
  モーフのベースを識別する番号を指定してください。
  E3DGetMorphBaseInfoで取得したbaseinfoptr->dispnoを指定してください。

3. [OUT] RDBMORPHTARGET* : targetinfoptr
  ターゲットの情報が代入されます。
  RDBMORPHTARGETはRDBPlugin.hで定義されています。
 
  ベースに含まれるターゲット数分の要素数のメモリを渡してください。
  targetinfo = (RDBTARGETINFO*)malloc( sizeof( RDBTARGETINFO ) * (baseinfo + baseno)->targetnum );
  のようにして作成してください。

4. [IN] int : arrayleng
  targetinfoの要素数を指定してください。
  ベースに含まれるターゲット数と異なる場合にはエラーになります。
ver5.2.1.7で新規
RDBGetMorphKeyNum モーフ モーフモーションのキーの数を取得します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : boneid
  モーフモーション情報の格納先のボーンを識別する番号を指定してください。
  RDBGetMorphBaseInfoで取得したbaseinfoptr->bonenoを指定してください。

4. [IN] int : baseid
  モーフのベースを識別する番号を指定してください。
  RDBGetMorphBaseInfoで取得したbaseinfoptr->dispnoを指定してください。

5. [IN] int : targetid
  モーフのターゲットを識別する番号を指定してください。
  RDBGetMorphTargetInfoで取得したtargetinfoptr->dispnoを指定してください。

6. [OUT] int* : keynumptr
  キーの数が代入されます。

ver5.2.1.7で新規
RDBGetMorphKey モーフ モーフモーションの情報をキーの数分取得します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : boneid
  モーフモーション情報の格納先のボーンを識別する番号を指定してください。
  RDBGetMorphBaseInfoで取得したbaseinfoptr->bonenoを指定してください。

4. [IN] int : baseid
  モーフのベースを識別する番号を指定してください。
  RDBGetMorphBaseInfoで取得したbaseinfoptr->dispnoを指定してください。

5. [IN] int : targetid
  モーフのターゲットを識別する番号を指定してください。
  RDBGetMorphTargetInfoで取得したtargetinfoptr->dispnoを指定してください。

6. [OUT] RDBMORPHMOTION* : motioninfoptr
  モーション情報が代入されます。
  RDBMORPHMOTIONはRDBPlugin.hで定義されています。

  RDBGetMorphKeyNum( hsid, motid, baseid, targetid, &keynum );
  motioninfo = (RDBMORPHMOTION*)malloc( sizeof( RDBMORPHMOTION ) * keynum );
  のようにしてメモリを作成してください。

7. [IN] int : arrayleng
  motioninfoptrの要素数を指定してください。
  RDBGetMorphKeyNumで取得したkeynum個じゃないとエラーになります。

ver5.2.1.7で新規
RDBGetCurMorphInfo モーフ 任意のフレーム番号の補間済みのモーフモーション情報を取得します。
この命令では現在編集中のモーションID、フレーム番号についての情報を取得します。
任意のモーション、フレーム番号の情報を取得したい場合は
RDBSetMotionFrameNoと組み合わせて使ってください。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneid
  モーフモーション情報の格納先のボーンを識別する番号を指定してください。
  RDBGetMorphBaseInfoで取得したbaseinfoptr->bonenoを指定してください。

3. [IN] int : baseid
  モーフのベースを識別する番号を指定してください。
  RDBGetMorphBaseInfoで取得したbaseinfoptr->dispnoを指定してください。

4. [IN] int : targetid
  モーフのターゲットを識別する番号を指定してください。
  RDBGetMorphTargetInfoで取得したtargetinfoptr->dispnoを指定してください。

5. [OUT] RDBMORPHMOTION* : motioninfoptr
  モーション情報が代入されます。
  RDBMORPHMOTIONはRDBPlugin.hで定義されています。

  要素数は1。

ver5.2.1.7で新規
RDBCreateMorph モーフ モーフを作成します。
ベースのIDとボーンのIDを指定します。
ここで指定したボーンに作成したモーフのモーション情報が格納されます。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : baseid
  ベースを識別する番号を指定してください。
  RDBGetPartNoByNameなどでIDを取得して指定してください。

3. [IN] int : boneid
  ボーンを識別する番号を指定してください。
  RDBGetPartNoByNameなどでIDを取得して指定してください。

ver5.2.1.7で新規
RDBAddMorphTarget モーフ RDBCreateMorphで作成したモーフにターゲットを追加します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : baseid
  ベースを識別する番号を指定してください。
  RDBGetPartNoByNameなどでIDを取得して指定してください。

3. [IN] int : targetid
  ターゲットを識別する番号を指定してください。
  RDBGetPartNoByNameなどでIDを取得して指定してください。

ver5.2.1.7で新規
RDBSetMorphKey モーフ モーフモーションのキーを作成します。
キーがすでにある場合は既存のキーに上書きします。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : boneid
  モーフモーション情報の格納先のボーンを識別する番号を指定してください。
  RDBGetMorphBaseInfoで取得したbaseinfoptr->bonenoを指定してください。

4. [IN] int : baseid
  モーフのベースを識別する番号を指定してください。
  RDBGetMorphBaseInfoで取得したbaseinfoptr->dispnoを指定してください。

5. [IN] int : targetid
  モーフのターゲットを識別する番号を指定してください。
  RDBGetMorphTargetInfoで取得したtargetinfoptr->dispnoを指定してください。

6. [IN] RDBMORPHMOTION* : motioninfoptr
  モーフモーション情報を指定します。要素数1。
  RDBMORPHMOTIONはRDBPlugin.hで定義されています。

ver5.2.1.7で新規
RDBDestroyMorphKey モーフ モーフモーションのキーを削除します。
モーフに含まれる全てのターゲットのキーが削除されます。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : boneid
  モーフモーション情報の格納先のボーンを識別する番号を指定してください。
  RDBGetMorphBaseInfoで取得したbaseinfoptr->bonenoを指定してください。

4. [IN] int : frameno
  削除したいキーが存在するフレーム番号を指定してください。

5. [IN] int : baseid
  モーフのベースを識別する番号を指定してください。
  RDBGetMorphBaseInfoで取得したbaseinfoptr->dispnoを指定してください。

ver5.2.1.7で新規
RDBGetToon1MaterialNum トゥーン トゥーンマテリアルの数を取得します。
トゥーンマテリアルとは通常のマテリアルとは異なります。
RokDeBone2の「トゥ」ボタンを押したときに出てくるダイアログに表示されているマテリアルのことです。
一回もトゥーン表示したことが無い状態でこの命令を呼ぶと、マテリアル数には0が返ってきます。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  RDBGetDispObjInfoで取得した表示オブジェクトのIDを指定してください。

3. [OUT] int* : matnumptr
  トゥーンマテリアルの数が代入されます。

ver5.2.2.0で新規
RDBGetToon1Material トゥーン トゥーンマテリアルの情報をパーツごとに一括取得します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  RDBGetDispObjInfoで取得した表示オブジェクトのIDを指定してください。

3. [OUT] E3DTOON1MATERIAL* : toon1ptr
  トゥーンマテリアルの情報が代入されます。
  E3DTOON1MATERIALはRDBPlugin.hで定義されています。
  E3DGetToon1MaterialNumで取得した数をmatnumとすると
  toon1ptr = (E3DTOON1MATERIAL*)malloc( sizeof( E3DTOON1MATERIAL ) * matnum );
  のように作成したメモリを渡してください。

4. [IN] int : arrayleng
  toon1ptrを作成したときの要素数を指定します。
  E3DGetToon1MaterialNumで取得できるmatnumと異なるとエラーになります。
ver5.2.2.0で新規
RDBSetToon1Name トゥーン トゥーンマテリアルの名前を変更します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  RDBGetDispObjInfoで取得した表示オブジェクトのIDを指定してください。

3. [IN] char* : oldname
  名前を変えたいトゥーンマテリアルの元の名前

4. [IN] char* : newname
  トゥーンマテリアルの新しい名前。
  名前の長さは31バイトまでです。
ver5.2.2.0で新規
RDBSetToon1Diffuse トゥーン トゥーンマテリアルのDiffuse色を設定します。
ライトが当たった明るい部分の色です。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  RDBGetDispObjInfoで取得した表示オブジェクトのIDを指定してください。

3. [IN] char* : matname
  トゥーンマテリアルの名前

4. [IN] RDBColor3f : diffuse
  diffuse色。

ver5.2.2.0で新規
RDBSetToon1Specular トゥーン トゥーンマテリアルのSpecular色を設定します。
ハイライトの部分の色です。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  RDBGetDispObjInfoで取得した表示オブジェクトのIDを指定してください。

3. [IN] char* : matname
  トゥーンマテリアルの名前

4. [IN] RDBColor3f : specular
  specular色。
ver5.2.2.0で新規
RDBSetToon1Ambient トゥーン トゥーンマテリアルのAmbient色を設定します。
ライトが当たらない暗い部分の色です。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  RDBGetDispObjInfoで取得した表示オブジェクトのIDを指定してください。

3. [IN] char* : matname
  トゥーンマテリアルの名前

4. [IN] RDBColor3f : ambient
  ambient色。
ver5.2.2.0で新規
RDBSetToon1NL トゥーン トゥーン表示の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はcoef_r.hで定義されています。「度」を「ラジアン」に変換するための定数です。


引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  RDBGetDispObjInfoで取得した表示オブジェクトのIDを指定してください。

3. [IN] char* : matname
  トゥーンマテリアルの名前

4. [IN] float : darknl
  cos( darkdeg * DEG2PAI )を指定してください。
  詳しくは前記をご覧ください。

5. [IN] float : brightnl
  cos( brightdeg * DEG2PAI )を指定してください。
  詳しくは前記をご覧ください。

ver5.2.2.0で新規
RDBSetToon1Edge0 トゥーン トゥーンマテリアルのエッジ(輪郭線)のパラメータを設定します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : partno
  パーツを識別する番号を指定してください。
  RDBGetDispObjInfoで取得した表示オブジェクトの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.0で新規
RDBSetKeyFrameSRT2 ボーン、モーション キーフレームのSRTを設定します。
OffsetMatrixを使用しないRokDeBone2形式のSRTです。

この命令を呼んだだけではモーションに姿勢は反映されません。
モーションに反映させるにはRDBFillUpMotionを呼んでください。
RDBFillUpMotionは重い処理なので、全ての姿勢の操作が終わってから1回だけ呼ぶようにしてください。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  モーションのフレーム番号。
  RDBGetFrameLengで取得したフレーム長をframelengとすると
  この引数に指定する数字は0から(frameleng - 1)までの数字でないといけません。

5. [IN] RDBPoint* : scaleptr
  拡大率を指定します。
  
6. [IN] RDBQuaternion* : rotptr
  回転姿勢を指定します。

7. [IN] RDBPoint* : traptr
  移動量を指定します。
  

ver5.5.0.5
RDBFillUpMotion ボーン、モーション キーフレームの情報から指定フレームの姿勢情報を計算します。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : motid
  モーションを識別する番号を指定してください。

3. [IN] int : topboneno
  ボーンを識別する番号を指定してください。
  ここで指定したボーンとその子供全部の姿勢を再帰的に計算します。
  -1を指定すると全てのボーンの姿勢を計算します。

4. [IN] int : startframe
  計算を開始するフレーム番号。
  RDBGetFrameLengで取得したフレーム長をframelengとすると
  この引数に指定する数字は0から(frameleng - 1)までの数字でないといけません。

5. [IN] int : endframe
  計算を終了するフレーム番号。
  RDBGetFrameLengで取得したフレーム長をframelengとすると
  この引数に指定する数字は0から(frameleng - 1)までの数字でないといけません。

ver5.5.0.5
RDBGetSplineParams ボーン、モーション キーフレームのスプライン補間のパラメータを取得します。

データタイプを以下に示します。
typedef struct tag_rdbspctrl
{
float spt;//制御点の横方向の係数
float spdist;//制御点の縦方向の係数
float distmax;//縦方向の係数の最大値(編集用のスライダーの最大値)
float sppoint[2];//制御点の画面上の座標
float tmin;//横方向係数の最小値
float tmax;//横方向係数の最大値
int reserved[2];//未使用
}RDBSPCTRL;

typedef struct tag_spparam
{
RDBSPCTRL ctrlS[INDMAX];//前半制御点。X,Y,Zそれぞれに。
RDBSPCTRL ctrlE[INDMAX];//後半制御点
int syncflag;
int lockflag;
int reserved[3];
}RDBSPPARAM;

typedef struct tag_rdbspparamset
{
RDBSPPARAM m_rotparam;//回転のパラメータ
RDBSPPARAM m_mvparam;//移動のパラメータ
RDBSPPARAM m_scparam;//スケールのパラメータ
int reserved[4];
} RDBSPPARAMSET;


引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  モーションのフレーム番号。
  RDBGetFrameLengで取得したフレーム長をframelengとすると
  この引数に指定する数字は0から(frameleng - 1)までの数字でないといけません。

5. [OUT] RDBSPPARAMSET* : sppptr
  パラメータを取得するデータのポインタを指定します。
  

ver5.5.0.5
RDBSetSplineParams ボーン、モーション キーフレームのスプライン補間のパラメータを設定します。

RDBSPCTRLのsppointメンバはRDBCalcSplineParamsで計算されるので特に指定しなくていいです。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

4. [IN] int : frameno
  モーションのフレーム番号。
  RDBGetFrameLengで取得したフレーム長をframelengとすると
  この引数に指定する数字は0から(frameleng - 1)までの数字でないといけません。

5. [IN] int : setflag
  setflagに1を足すとrotparamを設定します。
  setflagに2を足すとmvparamを設定します。
  setflagに4を足すとscparamを設定します。

6. [IN] RDBSPPARAMSET* : sppptr
  パラメータを指定します。
ver5.5.0.5
RDBCalcSplineParams ボーン、モーション スプラインパラメータを計算し、表示できるようにします。

引数:
1. [IN] int : hsid
  モデルを識別する番号を指定してください。

2. [IN] int : boneno
  ボーンを識別する番号を指定してください。
  -1を指定すると全てのボーンの計算をします。

3. [IN] int : motid
  モーションを識別する番号を指定してください。

ver5.5.0.5


トップページに戻る