« C.O.F.F.E.E.でMatrixは、どう使うんだったっけ? | トップページ | 数学が苦手でも、C.O.F.F.E.E.のMatrixを使えるのか?グローバルマトリクス »

数学が苦手でも、C.O.F.F.E.E.のMatrixを使えるのか?

数学が苦手でもMatrixは使えるだろうか?
ま、料理ができなくても冷蔵庫に入っているものを適当に焼いて食べることができるんだから、Matrixも何とかなるだろう…何とかなるか?

ここからはSDKも眺めながら…
Mtrix
数学が苦手だと、なんじゃこりゃって感じだね。
テーマは「数学が苦手でもMatrixは使えるのか?」なんだから、あまり深く考えないでいこう。丸暗記方式さ。

まず、BaseObjectクラスにはGetMg()/GetMl()があるね。
オブジェクトのグローバルマトリクスとローカルマトリクスの取得。
このマトリクスから、オブジェクトのグローバル座標とローカル座標を取り出してみよう。
C4Dではワールド座標とオブジェクト座標かな?
では、オブジェクトを2個追加し、1個をもう一個の子オブジェクトにします。
Matrix_01 
2個ともそれぞれ位置/回転/スケールを与えます。
上の座標は親オブジェクト。オブジェクト座標/ワールド座標は共に同じ。
下の座標は子オブジェクトのオブジェクト座標とワールド座標。
Matrix_02
親オブジェクトの座標と子オブジェクトのワールド座標/オブジェクト座標が違うことを確認できたので、子オブジェクトを選択して次のスクリプトを実行する。

/*
Matrix test
GetMl()/GetMg()
GetV0()/GetV1()/GetV2()/GetV3()
2008.12.27
*/


PrintVec(v)
{
if(typeof(v) != DT_VECTOR)return;
  print"[" , tostring(v.x , ".3f"));
  print(" , " , tostring(v.y , ".3f"));
  print(" , " , tostring(v.z , ".3f") , "]");
}

main(doc , op)
{
  //オブジェクトのローカル座標とグローバル座標
  var mg = op->GetMg();//オブジェクトのグローバルマトリクス
  var ml = op->GetMl();//オブジェクトのローカルマトリクス

  //グローバルマトリクスの表示
  println("*** グローバルマトリクス ***");
  print("mg v0 ワールド座標");PrintVec(mg->GetV0());
  println("");

  print("mg v1 x軸方向");PrintVec(mg->GetV1());
  println("");
  print("mg v2 y軸方向");PrintVec(mg->GetV2());
  println("");
  print("mg v3 z軸方向");PrintVec(mg->GetV3());
  println("");
  println("スケールx   " , vlen(mg->GetV1()));
  println("スケールy   " , vlen(mg->GetV2()));
  println("スケールz   " , vlen(mg->GetV3()));
  println(" ");

  //ローカルマトリクスの表示
  println("*** ローカルマトリクス ***");
  print("ml v0 ローカル座標");PrintVec(ml->GetV0());
  println("");

  print("ml v1 x軸方向");PrintVec(ml->GetV1());
  println("");
  print("ml v2 y軸方向");PrintVec(ml->GetV2());
  println("");
  print("ml v3 z軸方向");PrintVec(ml->GetV3());
  println("");
  println("スケールx   " , vlen(ml->GetV1()));
  println("スケールy   " , vlen(ml->GetV2()));
  println("スケールz   " , vlen(ml->GetV3()));
}

結果は…
Matrix_03

コンソールに表示されたローカル座標/グローバル座標/ローカルスケールは座標マネージャに表示されているデータと一致しています。
軸方向は分かりづらいのですが、今は深く触れません。

スクリプトとその結果を見れば分かると思います。
マトリクスから取得できるv0,v1,v2,v3の4個のベクトルは、何を意味するのか?
v0:座標
v1:x軸方向、ベクトル長:xスケール
v2:y軸方向、ベクトル長:yスケール
v3:z軸方向、ベクトル長:zスケール

という事です。次回につづく。

|

« C.O.F.F.E.E.でMatrixは、どう使うんだったっけ? | トップページ | 数学が苦手でも、C.O.F.F.E.E.のMatrixを使えるのか?グローバルマトリクス »

コメント

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