RSS

 

RSS


今までの流れは
プ:フラクタルで3D
プ:フラクタルで3D その2

■基本の作戦

C++風に書くと

Object  object;        //  ポリゴンの固まり
double scalea=*,scaleb=*;  //  *は定数
Rotate  rota(*,*,*),rotb(*,*,*);
Move movea(*,*,*),moveb(*,*,*);

for(;;){ // くりかえし
  object  =  treat(object,scalea,rota,movea) +
         treat(object,scaleb,rotb,moveb);
}

treat(object,scalea,rota,movea)ではobjectをscalea倍し、rota分回転、movea分移動した新たなObjectを返す。加算記号(+)はポリゴンの固まりとポリゴンの固まりを単純にあわせる意味。

くりかえして行くうち、objectが詳細・複雑になっていくわけ。

■スケールについての注意

 objectの体積(重量感?)は、繰り返しの1回分をやるごとに (scalea^3 + scaleb^3)倍になる。

(scalea^3 + scaleb^3)<1.0だとするとどんどん小さくなっていってしまうし、(scalea^3 + scaleb^3)>1.0だとするとどんどん大きくなってしまう(雪だるま式)。
(scalea^3 + scaleb^3)=1.0にしておくのが無難。

要素が2個でなく複数の場合も同様 (scalea^3+scaleb^3+・・・)=1.0

■宝塔花菜

 今回の1個の目標は、宝塔花菜のカタチをシミュレーションしようということ。リンク先の写真を見てもらうとわかるが結構なお手前のフラクタル。

■現行

現行、こんな感じ。だいぶフラクタル。

このときのスクリプトはpyramid.txtpyramid.txt


midoriyasai.jpg

■問題点・改良点

 「C++でMELスクリプトを書きそれをMayaに食わせる」という方式をとっている。この方法はキープして。

 上記「基本の作戦」に書いたスケール、回転、移動、加算を繰り返していくとポリゴンがどんどん増えていく。

 繰り返しが進むにつれデータが多すぎて、Mayaが激重、あるいは操作不能に陥る。

 繰り返しを続けていく上で、作業が重たくならないように、「ある大きさより小さくなったポリゴンは削除する」という作戦を考えた。

   今までは、「くりかえし」はMELスクリプトつまりMaya側でやっていたが、この「小さいポリゴン削除」機能のMELスクリプトでの実装の仕方がわからない、(できるだろうけど、やりにくい)ことに気付いた。

 繰り返し部分の作業はC++側に移動し、最終のポリゴンの構築のみMELスクリプトで吐き出すという改良を加えていこうとしている。


  • コメント (0)
  • トラックバック (0)
トラックバックURL :
http://www.iwai-masaka.jp/tb.cgi/42096