com.docomostar.opt.ui.eruption
クラス TransformTree

Object
  上位を拡張 com.docomostar.opt.ui.eruption.Object3D
      上位を拡張 com.docomostar.opt.ui.eruption.Animatable
          上位を拡張 com.docomostar.opt.ui.eruption.TransformTree

public final class TransformTree
extends Animatable

TransformTree は Figure と対になり、シーングラフを構成します。

TransformTree はその中でも座標変換とシーングラフの構造を規定します。また、Figure に BoneDeformer が関連付けられている場合には、 同じ TransformTree がボーン階層の表現にも用いられます。 TransformTree の内部表現は一次元配列のようなフラットな構造であり、各ノードはインデックス経由で参照されます。 ノード間の親子関係は子ノードが親ノードのインデックスを保持することで実現しています。

端末によって、本クラスはサポートされていない場合があります。未サポートの場合、メソッドが呼び出された時点で UnsupportedOperationException が発生します。


フィールドの概要
static int MCE_SCALE_TYPE_LOCAL
          スケールが子ノードに掛からないように階層計算を行う TransformTree を生成します(=2)。
static int MCE_SCALE_TYPE_NORMAL
          通常のSRTの順に Transform の階層計算を行う TransformTree を生成します(=0)。
static int MCE_SCALE_TYPE_POST
          スケールが各 Transform の座標系に掛かるように階層計算を行う TransformTree を生成します(=1)。
static int MCE_TRANSFORMTREE_ROOT
          TransformTree のルートを表します(=-1)。
 
クラス com.docomostar.opt.ui.eruption.Animatable から継承されたフィールド
MCE_MAX_ACTION_NUM
 
クラス com.docomostar.opt.ui.eruption.Object3D から継承されたフィールド
MCE_CLASS_TYPE_ACTION, MCE_CLASS_TYPE_ACTIONCONTROLLER, MCE_CLASS_TYPE_ACTIONTABLE, MCE_CLASS_TYPE_APPEARANCE, MCE_CLASS_TYPE_BONE, MCE_CLASS_TYPE_BONEDEFORMER, MCE_CLASS_TYPE_CAMERA, MCE_CLASS_TYPE_EFFECTSOURCE, MCE_CLASS_TYPE_FIGURE, MCE_CLASS_TYPE_GEOMETRICSHAPE, MCE_CLASS_TYPE_GRAPHICS3D, MCE_CLASS_TYPE_INDEXBUFFER, MCE_CLASS_TYPE_INTERSECTIONATTRIBUTES, MCE_CLASS_TYPE_LIGHT, MCE_CLASS_TYPE_MORPHDEFORMER, MCE_CLASS_TYPE_NODEDEFORMER, MCE_CLASS_TYPE_OBJECT3D, MCE_CLASS_TYPE_PARTICLE, MCE_CLASS_TYPE_TEXTURE, MCE_CLASS_TYPE_TEXTURETABLE, MCE_CLASS_TYPE_TRACKBALL, MCE_CLASS_TYPE_TRANSFORMTREE, MCE_CLASS_TYPE_VERTEXBUFFER
 
コンストラクタの概要
TransformTree(int num, int func)
          TransformTree を生成します。
 
メソッドの概要
 int getNumTransform()
          要素数を取得します。
 int getParent(int index)
          親インデックスを取得します。
 void getToWorldTransform(int index, Transform dst)
          ワールド座標への変換行列を取得します。
 void getTransform(int index, Transform dst)
          変換行列を取得します。
 boolean loopCheck()
          親子関係の循環を検査します。
 void mulScale(int index, Vector3D v)
          変換行列にスケーリング成分を乗算します。
 void relatedMultiply()
          親子関係にもとづき TransformTree を更新します。
 void reset()
          TransformTree の変換行列を初期状態に戻します。
 void reset(int index)
           指定された Transform をリセットします。
 void setDampingAngle(int index, float angle)
          ダンピング角を設定します。
 void setIdentity(int index)
          恒等変換行列を設定します。
 void setParent(int index, int parentIndex)
          親子関係を設定します。
 void setRestrictionAngle(int index, Vector3D min, Vector3D max)
          IK 計算時の制限角を設定します。
 void setRotateEuler(int index, int type, Vector3D v)
          回転成分を設定(オイラー指定)します。
 void setTransform(int index, Transform src)
          変換行列を設定します。
 void setTranslate(int index, Vector3D v)
          平行移動成分を設定します。
 boolean solveIK(int endIdx, int traceBackNum, Vector3D goalPos, boolean isDamping, int loopNum)
          IK を計算します。
 
クラス com.docomostar.opt.ui.eruption.Animatable から継承されたメソッド
getAction, getAction, getActionController, getFrame, getRefGid, getRefGid, setAction, setAction, setActionController, setFrame, setRefGid, setRefGid, setUseActionControllerNum, updatePosture
 
クラス com.docomostar.opt.ui.eruption.Object3D から継承されたメソッド
dispose, equals, findObject3D, findObject3D, getClassType, getUserId, hashCode, isDisposed, isRenderEnable, setRenderEnable, setUserId
 
クラス Object から継承されたメソッド
getClass, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

MCE_SCALE_TYPE_NORMAL

public static final int MCE_SCALE_TYPE_NORMAL
通常のSRTの順に Transform の階層計算を行う TransformTree を生成します(=0)。

関連項目:
定数フィールド値

MCE_SCALE_TYPE_POST

public static final int MCE_SCALE_TYPE_POST
スケールが各 Transform の座標系に掛かるように階層計算を行う TransformTree を生成します(=1)。(XSI のデフォルト)

関連項目:
定数フィールド値

MCE_SCALE_TYPE_LOCAL

public static final int MCE_SCALE_TYPE_LOCAL
スケールが子ノードに掛からないように階層計算を行う TransformTree を生成します(=2)。(Maya のデフォルト)

関連項目:
定数フィールド値

MCE_TRANSFORMTREE_ROOT

public static final int MCE_TRANSFORMTREE_ROOT
TransformTree のルートを表します(=-1)。

関連項目:
定数フィールド値
コンストラクタの詳細

TransformTree

public TransformTree(int num,
                     int func)
TransformTree を生成します。

初期値は以下の通りです。

パラメータ:
num - 要素数を指定します。
func - ポストスケールを使用しない場合は MCE_SCALE_TYPE_NORMAL を指定します。使用する場合は MCE_SCALE_TYPE_POST もしくは MCE_SCALE_TYPE_LOCAL を指定します。 ポストスケールについてはシーングラフを用いた場合のオブジェクト関連を参照してください。
例外:
IllegalArgumentException -
num が [1, 32767] 以外の場合に発生します。
IllegalArgumentException -
func が MCE_SCALE_TYPE_NORMAL、MCE_SCALE_TYPE_POST、MCE_SCALE_TYPE_LOCAL以外の場合に発生します。
メソッドの詳細

setParent

public final void setParent(int index,
                            int parentIndex)
親子関係を設定します。

パラメータ:
index - parentIndex を親とする要素(子)のインデックスを指定します。
parentIndex - 親インデックスを指定します。カレントの TransformTree オブジェクトをルートとする場合は、(MCE_TRANSFORMTREE_ROOT)を指定します。
例外:
IndexOutOfBoundsException -
index が [0, 要素数 - 1] 以外の場合に発生します。
IndexOutOfBoundsException -
parentIndex が 0 未満、または parentIndex が要素数以上の場合に発生します。ただし、parentIndex が ルート(MCE_TRANSFORMTREE_ROOT)の場合を除きます。

getParent

public final int getParent(int index)
親インデックスを取得します。

パラメータ:
index - 子のインデックスを指定します。
戻り値:
親インデックスを返します。親がない場合 -1 を返します。
例外:
IndexOutOfBoundsException -
index が [0, 要素数 - 1] 以外の場合に発生します。

getNumTransform

public final int getNumTransform()
要素数を取得します。

戻り値:
要素数を返します。

setIdentity

public final void setIdentity(int index)
恒等変換行列を設定します。

パラメータ:
index - 設定する要素のインデックスを指定します。
例外:
IndexOutOfBoundsException -
index が [0, 要素数 - 1] 以外の場合に発生します。

setTransform

public final void setTransform(int index,
                               Transform src)
変換行列を設定します。

パラメータ:
index - 設定する要素のインデックスを指定します。
src - 設定する変換行列を表す Transform を指定します。
例外:
NullPointerException -
src が null の場合に発生します。
IndexOutOfBoundsException -
index が [0, 要素数 - 1] 以外の場合に発生します。

getTransform

public final void getTransform(int index,
                               Transform dst)
変換行列を取得します。

パラメータ:
index - 変換行列を取得する要素のインデックスを指定します。
dst - 変換行列を渡す Transform を指定します。
例外:
NullPointerException -
dst が null の場合に発生します。
IndexOutOfBoundsException -
index が [0, 要素数 - 1] 以外の場合に発生します。

setTranslate

public final void setTranslate(int index,
                               Vector3D v)
平行移動成分を設定します。

パラメータ:
index - 設定する要素のインデックスを指定します。
v - 平行移動成分を表すVector3D を指定します。
例外:
NullPointerException -
v が null の場合に発生します。
IndexOutOfBoundsException -
index が [0, 要素数 - 1] 以外の場合に発生します。

setRotateEuler

public final void setRotateEuler(int index,
                                 int type,
                                 Vector3D v)
回転成分を設定(オイラー指定)します。

パラメータ:
index - 設定する要素のインデックスを指定します。
type - 回転順を指定します。指定できる値は、以下の通りです。
v - 各軸の回転成分を表す Vector3D(1.0=360度)を返す。
例外:
NullPointerException -
v が null の場合に発生します。
IndexOutOfBoundsException -
index が [0, 要素数 - 1] 以外の場合に発生します。
IllegalArgumentException -
type が不正な場合に発生します。

mulScale

public final void mulScale(int index,
                           Vector3D v)
変換行列にスケーリング成分を乗算します。

パラメータ:
index - 設定する要素のインデックスを指定します。
v - 乗算するスケーリング成分を表す Vector3D を指定します。
例外:
NullPointerException -
v が null の場合に発生します。
IndexOutOfBoundsException -
index が [0, 要素数 - 1] 以外の場合に発生します。

reset

public final void reset()
TransformTree の変換行列を初期状態に戻します。

データを Loader でロードした場合は、ロード直後の状態に戻し、TransformTree のコンストラクタで生成した場合は、 すべての行列を恒等変換行列にします。
設定された親子関係は保持されます。

例外:
com.docomostar.lang.IllegalStateException -
This が保持する要素が循環している場合に発生します。

reset

public final void reset(int index)

指定された Transform をリセットします。

パラメータ:
index - リセットする Transform のインデックスを指定します。
例外:
IndexOutOfBoundsException -
指定したインデックスが不正である場合に発生します。

getToWorldTransform

public final void getToWorldTransform(int index,
                                      Transform dst)
ワールド座標への変換行列を取得します。

ワールド座標への変換行列は Figure.updatePosture(Transform)、または relatedMultiply() が呼ばれたときに更新されます。
そのため、最新の変換行列が必要なときには、This の属する Figure が持つ TransformTree に対して relatedMultiply() を呼ぶか、 This の属する Figure に対して Figure.updatePosture(Transform)、または内部的に同 API を呼んで更新処理を行います。
API(Collision3D.isHit(Vector3D, Vector3D, Figure, Transform, GeometricShape[], int[], int),
Collision3D.isHit(GeometricShape, Figure, Transform, Transform, GeometricShape[], int[], int),
Collision3D.isHit(Vector3D, Vector3D, Vector3D, Figure, Transform, GeometricShape[], int[], int),
Collision3D.isInViewVolume(Figure, Transform, Camera, Transform, IndexBuffer[], int[], int),
Collision3D.isInViewVolume(Figure, Transform, Camera, Vector3D, Vector3D, Vector3D, IndexBuffer[], int[], int),
Figure.pick(Vector3D, Vector3D, IntersectionAttributes, int, boolean, Transform),
Graphics3D.drawFigure(Figure, Transform, int),
Graphics3D.addDrawQueueFigure(Figure, Transform))
を事前に呼んでおいた場合、最新の変換行列の情報が dst に反映されるようになります。

パラメータ:
index - 取得する要素のインデックスを指定します。
dst - 変換行列を渡す Transform を指定します。
例外:
NullPointerException -
dst が null の場合に発生します。
IndexOutOfBoundsException -
index が [0, 要素数 - 1] 以外の場合に発生します。

relatedMultiply

public final void relatedMultiply()
親子関係にもとづき TransformTree を更新します。

例外:
com.docomostar.lang.IllegalStateException -
This が保持する要素が循環している場合に発生します。

loopCheck

public final boolean loopCheck()
親子関係の循環を検査します。

戻り値:
返す値は、以下の通りです。
  • 循環していない - true
  • 循環している - false

solveIK

public final boolean solveIK(int endIdx,
                             int traceBackNum,
                             Vector3D goalPos,
                             boolean isDamping,
                             int loopNum)
IK を計算します。

IKを計算します。traceBackNum により、計算時にルートに向かって辿る階層数を指定できますが、ルートまでの階層数よりも traceBackNum の方が大きい場合、または traceBackNum が 0 未満の場合にはルートまで辿ります。 回転の順序は z->x->y です。

パラメータ:
endIdx - IK 適用対象の端点となる要素のインデックスを指定します。
traceBackNum - endIdx からルートに向かって辿る階層数を指定します。
goalPos - ゴールの位置を指定します。
isDamping - 指定できる値は、以下の通りです。
  • ダンピングを行う - true
  • ダンピングを行わない - false
loopNum - IK 計算でのループ回数の上限を指定します。
戻り値:
返す値は、以下の通りです。
  • 計算成功 - true
  • traceBackNum == 0、またはエラー - false
例外:
IndexOutOfBoundsException -
endIndex が [0, 要素数 - 1] 以外の場合に発生します。
NullPointerException -
goalPos が null の場合に発生します。

setRestrictionAngle

public final void setRestrictionAngle(int index,
                                      Vector3D min,
                                      Vector3D max)
IK 計算時の制限角を設定します。

IK 計算時に、指定した Transform のとり得る回転角の範囲を指定します。

パラメータ:
index - 制限を適用する要素のインデックスを指定します。
min - 下限を指定します。
max - 上限を指定します。
例外:
IndexOutOfBoundsException -
Index が [0, 要素数 - 1] 以外の場合に発生します。
IllegalArgumentException -
min の中に [-1.0, 1.0] 以外となる成分 c が存在する場合に発生します。
IllegalArgumentException -
max の中に [-1.0, 1.0] 以外となる成分 c が存在する場合に発生します。
IllegalArgumentException -
max.c < min.c となる成分 c が存在する場合に発生します。

setDampingAngle

public final void setDampingAngle(int index,
                                  float angle)
ダンピング角を設定します。

ダンピングありで IK を計算する際に、1 回あたりの回転角の変更量を設定します。

パラメータ:
index - 設定する要素のインデックスを指定します。
angle - ダンピング角を指定します。
例外:
IndexOutOfBoundsException -
index が [0, 要素数 - 1] 以外の場合に発生します。
IllegalArgumentException -
angle が [0, 1] 以外の場合に発生します。


NTT DOCOMO,INC.

本製品または文書は著作権法により保護されており、その使用、複製、再頒布および逆コンパイルを制限するライセンスのもとにおいて頒布されます。NTTドコモ(その他に許諾者がある場合は当該許諾者も含めて)の書面による事前の許可なく、本製品および関連する文書のいかなる部分も、いかなる方法によっても複製することが禁じられます。フォントを含む第三者のソフトウェアは、著作権法により保護されており、その提供者からライセンスを受けているものです。

Sun、Sun Microsystems、Java、J2MEおよびJ2SEは、米国およびその他の国における米国 Sun Microsystems,Inc.の商標または登録商標です。サンのロゴマークは、米国 Sun Microsystems, Inc.の登録商標です。

FeliCaは、ソニー株式会社が開発した非接触ICカードの技術方式です。FeliCaは、ソニー株式会社の登録商標です。

「iモード」、「iアプリ/アイアプリ」、「i-αppli」ロゴ、「DoJa」はNTTドコモの商標または登録商標です。

その他記載された会社名、製品名などは該当する各社の商標または登録商標です。