Japanese | English | Korean

Samples

シーングラフからのノードの取得

ここでは、シーングラフからのノードの取得方法について解説します。


M3G ではシーングラフは木構造として管理されています。そのため、あるノードを取得するとそのノードが配下に持つノードも同時に取得されます。 M3G ファイルからデータを取得するためには Loader クラスの load() メソッドを使用します。このとき取得されるデータは Object3D クラスの配列として扱われ、下記の画像のようなデータの場合、CompositingMode オブジェクト、 PolygonMode オブジェクト、 World オブジェクトの3つが格納された配列が取得されます。従って、 World クラスのオブジェクトを取得するためには、得られた Object3D クラスの配列の第3要素を World クラスへキャストする必要があります。


World クラスの取得

/**
  * private Object3D [] roots;
  * private World myWorld;
  */

/* リソースからのデータ取得 */
try{
roots = Loader.load ( “/box.m3g” );
} catch ( IOException e ) {
e.printStackTrace ();
}

/* Object3D クラスの配列から World オブジェクトを取得 */
if ( roots [ 2 ] .getUserID () == 20 ) {
myWorld = ( World ) roots [ 2 ] ;
}

一方、こうして得られた World オブジェクトが表すシーングラフから、ある特定のノードのみを取得したい場合 Object3D クラスの find() メソッドを使用します。このメソッドは呼び出し元のオブジェクトが配下に持つノードを検索し、引数として渡した UserID が一致するノードが存在した場合、そのノードを Object3D オブジェクトとして返すものです。 UserID とは、シーングラフ中の各オブジェクトに割り当てられた ID のことで、下記の画像中の赤線で囲まれた部分の値を指します。

特定ノードの取得

/**
  * private Appearance myAppearance;
  * private World myWorld;
  */

/* Appearance オブジェクトの取得 */
myAppearance = ( Appearance ) myWorld.find ( 11 );

ここでは、上記のシーングラフから Appearance オブジェクトを取得しています。