« artist side/C4Dコミュニティ 「キャラクタを1フレーム毎にobj形式でXPressoでの保存」?-06 | トップページ | C4D R11 C.O.F.F.E.E.からアニメーショントラックの属性にアクセス »

artist side/C4Dコミュニティ 「キャラクタを1フレーム毎にobj形式でXPressoでの保存」?-07

さて、デフォーマやHyperNURBSの事は、何とかなりそうな感じではあるが…

でも、最大の問題は、C4D標準搭載のobj形式のエクスポーターだ。

それでは、少しだけ希望の光を…

/*
簡単な、obj形式エクスポーター
2009.7.13
*/


main(doc , op)
{
  if(!instanceof(op , PolygonObject))return;

  //ファイル関連の取得
  var file = new(BaseFile);
  var path = new(Filename);

  //ポイント/ポリゴンの取得
  var pts = op->GetPoints();
  var pgs = op->GetPolygons();
  var ptc = op->GetPointCount();
  var pgc = op->GetPolygonCount();
  var mg = op->GetMg();
  var c;

  //保存ダイアログ
  var res = path->FileSelect("obj形式保存" , TRUE);
  if(!res)return;

  //拡張子の操作
  path->DelSuffix();
  path->SetSuffix("obj");

  //ファイルオープン
  file->Open(path , GE_WRITE);

  //ファイルの書き込み
  file->WriteString("# Wavefront *.obj file\n");
  file->WriteString("g " + op->GetName() + "\n");
 

  for(c = 0 ; c < ptc ; c++)
  {
    pts[c] = mg->GetMulP(pts[c]);
    file->WriteString("v " + tostring( pts[c].x) + " " +
                             tostring( pts[c].y) + " " +
                             tostring(-pts[c].z) + "\n");
  }

  for(c = 0 ; c < pgc ; c++)
  {
    file->WriteString("f " + tostring(pgs[c * 4    ] + 1) + " " +
                             tostring(pgs[c * 4 + 1] + 1) + " " +
                             tostring(pgs[c * 4 + 2] + 1) + " " +
                             tostring(pgs[c * 4 + 3] + 1) + "\n");
  }

  //ファイル書き込み終了
  file->Close();
}

さて、これで、ポリゴンオブジェクトを選択して、このスクリプトを実行します。

Export_18

保存された、objファイルを再度読み込んで見てみよう。

Export_19

カメラの位置が違うのでアングルが変わってしまったが、問題なく読み込みました。
形状だけね。テクスチャ等は無視しています。
オブジェクトの名前は、そのまま記録しましたが、obj形式では2バイトでは良くないらしい…

その気になれば、C.O.F.F.E.E.でもobj形式のファイルを吐き出すことができます。
後は、フレーム毎の形状さえ取得できれば、良いのだ。

とは言っても、まだまだ課題は山積みですが…

|

« artist side/C4Dコミュニティ 「キャラクタを1フレーム毎にobj形式でXPressoでの保存」?-06 | トップページ | C4D R11 C.O.F.F.E.E.からアニメーショントラックの属性にアクセス »