2010年8月12日木曜日

VideoCube 10

Pointについての確認。

実際のPointの定義で正面側を裏面側にbindしているので、rotateX/Y/Zは正面側だけになっている。bindで裏面側が変化する。正面と裏面の関係は常に正面のマイナスが裏面だが、それでいいのかというのが微妙だが、何となく良さそうな気がする。

もう一度正面と裏面の関係をイメージするため実行してみると何故かエラーが。金槌に刷毛マークのアイコンをクリックしてクリアしてみると解消した。解消してしまったのでエラーが何だったか分からなくなってしまった。しょうがない。

実行してみると、なるほど、前面と背面はz系はちょっと分からないが、何となく対角線上に表と裏が位置しているように見える。問題はそのギャップ、距離。これがzとの関係になるのだろうが、例えば分かりやすい真横を向いた場合、正面が左で裏面が右だとしよう。そうすると距離はちょうど面の(1辺の)長さ分になる。これがzだと思うのだが、二次元上のzがどう展開されるのか、さっぱり。3次元で考えると、サイコロは円運動しかしていないので、変化しないようにも思えるが、いずれにしても最終的には2次元上のx,yを決める必要がある。

でも結局描くのはPerspectiveTransformだと思うので、四隅の座標がzと絡んでどう変化するか、ではなかろうか。そうすると、
ulx: bind d + ul.x
(以下同様)

のようにdの位置にxを足しているから、dがzに絡んでいるはず。

ここで結局Webで調べることにした。3Dグラフィックスでググるといろいろ出てくるが、VideoCubeは平行投影というセオリーのようだ。回転についてもいくつか情報があるが、いまひとつピンとこない。だがまあ、ここで今悩んでいてもしょうがないので、そこは飛ばして、そういう計算式をJavaFXで実装する、ということに留めよう。

なぜ先に調べなかったのか悔やまれる。図形問題が気になる性質からだと思う。何事も勉強だ。だが開き直ってないでしっかり反省したい。

ということで、rotateX/Y/Zのうち、Zは使わない。X/Yについては、平行投影の場合の常套手段のようだ。といいつつ、何か決定的な文書が見つかった訳ではないが、ActionScriptの記事を見て。ありがとうございます。

0 件のコメント:

コメントを投稿