« 数学が苦手でも、C.O.F.F.E.E.のMatrixを使えるのか?グローバルマトリクス | トップページ | 凄いぞぉ »

数学が苦手でも、C.O.F.F.E.E.のMatrixを使えるのか?BaseObject->GetUpMg()

BaseObjectのマトリクス関連で使ったことが無かったGetUpMg()をテストしてみる。

SDKには「親のグローバルマトリクスが返る。もしオブジェクトが最上位にあるなら単位マトリクスになる。」そうだ。
単位マトリクスとは
v0 [0.0 , 0.0 , 0.0]
v1 [1.0 , 0.0 , 0.0]
v2 [0.0 , 1.0 , 0.0]
v3 [0.0 , 0.0 , 1.0]
かな?
今まで、GetUpMg()の存在を気づいていなかったので

var p_obj = op->GetUp();//親オブジェクトを取得
var p_mg;//親オブジェクト用マトリクス
if(p_obj)p_mg = p_obj->GetMg();//親オブジェクトのグローバルマトリクスを取得

もしくは、

var p_mg = op->GetUp()->GetMg();//親オブジェクトのグローバルマトリクスの取得

でも、下のコードの場合はopの親オブジェクトが存在しなければC.O.F.F.E.E.エラーが出ますけど。あ、そもそもopは存在すると仮定ですよ。
こんな風に親オブジェクトを取得して、そのグローバルマトリクスを取得してました。
たいしたタイプ量ではないのでそれほど問題にはならないと思うが、

var p_mg = op->GetUpMg();//親オブジェクトのグローバルマトリクスを取得

1行ですむわけだ。
でも本当に親オブジェクトのグローバルマトリクスを取得できるのか?

/*
GetUpMg()を確認する
2008.12.28
*/


PrintVec(v)//ベクトル型変数の表示
{
  if(typeof(v) != DT_VECTOR)return;//ベクトル型以外は中断

  //x,y,zを小数点第3位まで表示
  print"[" , tostring(v.x , ".3f"));
  print(" , " , tostring(v.y , ".3f"));
  print(" , " , tostring(v.z , ".3f") , "]");
}

PrintMatrix(m)//マトリクスの表示
{
  if(!instanceof(m , Matrix))return;//マトリクスクラス以外は中断

  //マトリクスの表示
  print("v0 : "); PrintVec(m->GetV0()); println();
  print("v1 : "); PrintVec(m->GetV1()); println();
  print("v2 : "); PrintVec(m->GetV2()); println();
  print("v3 : "); PrintVec(m->GetV3()); println();
}



main(doc , op)
{
  if(!op)return;//オブジェクトが選択されていなければ終了

  var p_mg = op->GetUpMg();//opの親オブジェクトのグローバルマトリクスを取得
  println("GetUpMg()");
  PrintMatrix(p_mg);//マトリクスの表示

  var p_obj = op->GetUp();//opの親オブジェクトの取得
  var p_obj_mg;
  if(p_obj)p_obj_mg = p_obj->GetMg();//取得したopの親オブジェクトのグローバルマトリクスを取得
  println("GetUp() , GetMg()");
  PrintMatrix(p_obj_mg);//マトリクスの表示
}

親オブジェクトと子オブジェクトになるようにオブジェクトを適当に配置し子オブジェクトを選択してスクリプトを実行。
Matrix_06
結果は、GetUpMg()もGetUp()で親オブジェクトを取得してからGetMg()でも同じ値のマトリクスを取得できる。
Matrix_07
さらに親オブジェクトを選択して実行。
Matrix_08
GetUp() , GetMg()の方は表示されません。
GetUp()は親オブジェクトが無いのでnilに、GetUpMg()は単位マトリクスを返してきました。
GetUpMg()は、親が無ければ単位マトリクスを返す、都合の良いメンバ関数だね。
GetMln()は試してないのとGetMgn()の問題は解決してないけど、これで、BaseObjectのマトリクス関連は思い出せた。
次はMatrixクラス。

|

« 数学が苦手でも、C.O.F.F.E.E.のMatrixを使えるのか?グローバルマトリクス | トップページ | 凄いぞぉ »

コメント

この記事へのコメントは終了しました。