Three.jsのシーングラフのクラス構造

threejs-scene-graph-class-structure.png

Three.jsがとっても快適で使いやすいので、どんな実装をしているのか見ていきたいとおもいます。

クラス構造


すべての根っことなるクラスはObject3Dです。

Object3Dのメンバ

名前 意味 デフォルト値
int id 何番目に作られたオブジェクトなのかを示す番号
string uuid 自動で割り振られるID ユーザーからは基本的にいじらない
string name オブジェクトの名前。ユーザーが任意で命名できる。他のオブジェクトと名前がかぶってもok
Object3D parent 親ノード
Object3D* children 子ノード。配列型
Vector3 position オブジェクトのローカル座標での位置 (0,0,0)
float rotation オブジェクトの角度(オイラー角)をラジアンで 0
Vector3 scale オブジェクトの拡大縮小値
Vector3 up アッパーベクトル。 (0,1,0) yが上
matrix 変換行列
quaternion オブジェクトの回転
bool visible オブジェクトの表示・非表示 true
bool castShadow 影を表示するかどうかフラグ false
bool receiveShadow false
bool frustumCulled 画面外にはみ出た時非表示になるかどうか。 true
bool matrixAutoUpdate 毎フレームモデル行列を更新するかどうか true
bool matrixWorldNeedsUpdate 毎フレームワールド行列を更新するかどうか false
bool rotationAutoUpdate 毎フレーム回転行列を計算するかどうか true
userData 任意のユーザーオブジェクトをここに格納できる。
matrixWorld ワールド行列 親ノードの行列に等しい

Object3Dのメンバ関数

add(Object3D) 子ノードに追加する
remove(Object3D) 子ノードから削除する
traverse(callback) callback関数をすべての子ノードに対して実行する
traverseVisible(callback) visible=trueな子ノードだけcallback関数を実行する
traverseAncestors(callback) 祖先ノードに対してcallback関数を実行する
clone() 子ノードすべて含めてコピーする
getObjectByName(name) nameの名前に一致する子ノードを返す
getObjectById(id) idの一致する子ノードを返す
applyMatrix(matrix) 行列変換する
updateMatrix() ローカル座標変換を更新する
translateX(distance) x方向に平行移動
translateY(distance) y方向に平行移動
translateZ(distance) z方向に平行移動
translateOnAxis(axis,distance) 軸に沿ってdistance分平行移動する
rotateOnAxis(axis,angle) 軸中心にangleラジアン分回転する
localToWorld(vector) vectorを世界座標に変換
lookat(vector) Rotates object to face point in space.
raycast(raycaster,intersects) レイとオブジェクトの交点を得るための抽象メソッド。Mesh,Line,Pointsクラスがこれを実装するとレイキャストに参加する

scene-graph

サポートサイト Wikidot.com scene-graph