« C.O.F.F.E.E.でポリゴン(三角ポリゴン/四角ポリゴン) | トップページ | えっ? »

C.O.F.F.E.E.でポリゴン(三角ポリゴン/四角ポリゴン)-スクリプト

スクリプトを入力して実行します。

/*
ポイント/ポリゴン/UVw
2008.12.25
*/


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") , "]");
}


main(doc , op)
{
  if(!instanceof(op , PolygonObject))return;//ポリゴンオブジェクト以外は中断

  var at = GetActiveTag(op);//選択されたタグの取得
  if(!instanceof(at , UVWTag))return;//UVWタグ以外は中断

  var pts = op->GetPoints();       //ポイント配列の取得
  var pgs = op->GetPolygons();     //ポリゴン配列の取得
  var uvp = at->GetData();         //uvポリゴン配列を取得
  var pt_c = op->GetPointCount();  //ポイント数の取得
  var pg_c = op->GetPolygonCount();//ポリゴン数の取得
  var i , j;//カウンター


  //オブジェクト名/ポイント数/ポリゴン数の表示
  println(op->GetName());
  println("ポイント数 : " , pt_c);
  println("ポリゴン数 : " , pg_c);

  //ポイントの表示
  println("***ポイント***");
  for(i = 0 ; i < pt_c ; i++){
    print(i , " : ");
    PrintVec(pts[i]);
    println("");
  }

  //ポリゴンの表示
  println("***ポリゴン***");
  for(i = 0 ; i < pg_c ; i++){
    print(i , " : ");

    if(pgs[i * 4 + 2] == pgs[i * 4 + 3])//ポリゴンのポイントc,dが同じであるか
      print("三角ポリゴン ");              //同じであれば三角
    else
      print("四角ポリゴン ");              //違っていれば四角

    for(j = 0 ; j < 4 ; j++){
      print(pgs[i * 4 + j] , " ");
    }
  println("");
  }

  //uvポリゴンの表示
  println("****uvポリゴン****");
  for(i = 0 ; i < pg_c ; i++){
    print(i , " : ");
    for(j = 0 ; j < 4 ; j++){
      PrintVec(uvp[i * 4 + j]);
    }
    println("");
  }
}

実行した結果は…
Triangle_test_5

コンソールには赤く表示されないが、この赤い部分を見ていただきたい。
ポリゴンの1番/6番のポイントc,dが同じになっている。
構造タグのポリゴンデータは
Triangle_test_3
ポイントdは表示されません。
表示されなくても、ポリゴン配列にはポイントdは格納されているので、三角ポリゴンかどうかは、ここを比較すれば分かります。

ではコンソールに表示されたuvポリゴンの赤い部分を見てほしい。
三角ポリゴンのはずなのだが、隣のポイントと同じではない。
構造タグのuvポリゴンを見てみよう。
Triangle_test_4
三角ポリゴンである1番/6番のポイントdは表示されていない。
ではコンソールに表示されている三角ポリゴンのdはuv座標上どこを指しているのか?
しかも同じ座標。一体どうなっているのか?
Triangle_test_6
1番/6番ポリゴンのポイントdは矢印の所にありました。全く意味の無い所にあります。
BP UV Editで三角ポリゴンである1番6番のポリゴンを直接編集してスクリプトを実行してもポイントdの座標は変化しませんでした。
どうやら、三角ポリゴンかどうかの判断はポリゴンのみで行われるみたいですね。
uv三角ポリゴンのポイントdは無視されるみたいですね。断言はできませんが…

|

« C.O.F.F.E.E.でポリゴン(三角ポリゴン/四角ポリゴン) | トップページ | えっ? »

コメント

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