回転する立方体のアニメ(リベンジ)
二点透視の消失点の位置 - ハメ太郎のブログ http://hametaro.hatenablog.com/entry/2013/02/25/085154
processingというプログラミング言語を使って回転する立方体のアニメーションを改めて描いてみた。以下、気づいたこと。
processingは簡単な図形を描くには最適である
まぁ、他にどんなプログラミング言語があるかも知らないズブの素人が、「回転する立方体が描きたい」という目的で選んだわけだが、非常にわかりやすい内容だった。
簡単とはいえども慣れればもっと複雑な図形も書ける様だ。processingは2Dと3Dを区別して表現することができるらしく、3Dで描けばもっと簡単だったらしい。じゃあ、なぜそうしなかったかといえば、3Dで描く方法がわからなかったということもあるし、2Dで奥行きを表現するというこれまで学んだ遠近法で描いてみたかったということも有る。そもそも、なぜ慣れないプログラミングに手を出したかといえば、手書きで描いていてはなめらかに回転しているアニメを作るのは難しかったからだ。0°、30°、60°が描けてもその間が途切れていては連続しているように見えないのだ。
やってみると結構めんどくさかった
というわけで、数式を与えてやれば、変化する角度に応じて適当に描いてくれるのではないかなと思ってやってみた。手順は以下のとおり
1. 右消失点(VP1)、左消失点(VP2)、対角線の消失点(VP3,VP4)の位置を求める
2. 回転の基準、軸と成る一辺(AB)を描く。
3. A,BとVP1,VP2,VP3を結ぶ。
A-VP1…①、A-VP2…②、B-VP1…③、B-VP2…④、A-VP3…⑤、A-VP4…⑥
4. ④と⑥の交点をDとすると、それを垂直に伸ばした線と②の交点がC
5. quad(A,B,D,C);で面ABDCを描く
6. a=++a;で角度aを増やして最初に戻る
という感じ。
注意すべき点はVP3の位置。0<a<180なら下。180<a<360なら上。
そして、面ABDCと90°で交わる面ABFEのことも考えると、90°刻みで場合分けする必要がある。これを簡単にまとめる頭が無いということもあってめちゃくちゃめんどくさいことになってしまった。
ただ、何度も言うように3Dで描けば標準のメソッドで簡単に回転できるので、ここまでした意味はないのかもしれないが、ちゃんと回ったってことで満足なので今回はそれでいい。http://r-dimension.xsrv.jp/classes_j/2_interactive3d/
http://www.d-improvement.jp/learning/processing/2011-b/11.html
めっちゃ脇道に逸れまくってるけど、本来の目的は立体感のある絵、人体を描くっていうことだからそろそろ本腰入れよう