カメラと被写体の関係から擬似3D空間を作る (2)

FICC 福岡です。
CS3ももうすぐ登場する事だしそろそろPaperVision3Dとか...と思っている方もいらっしゃるでしょうが、今回も引き続きAS2でがんばる3Dのお話。前回お話しした「カメラと被写体の関係から擬似3D空間を作る」で公開したコードですが、実はちょっとした問題点を抱えております。それは「カメラのZ座標によってオブジェクトの見え方が異なる」。図で簡単にご説明しましょう。

Z値が大きくなればなるほどオブジェクトが詰まっていく

この図は前回作成した3D空間を横から見たものです。黒い棒は浮遊している矩形を横から見たものと思ってください。前回ご説明したコードではオブジェクトのZ位置が大きくなればなるほど、距離が詰まっていってしまうのです。つまりカメラと被写体の距離・位置関係が同じでも、Z値によってまったく別の見え方(奥行きがなくなっていく)になってしまう。しかしなぜこんなことになってしまったか...答えは次の一行です。

var sZ:Number = camera.oz/this.oz;

前回のコードではカメラとオブジェクトの距離の差を割り算で算出していました。例えばカメラとオブジェクトのZ値の差が2000だとしても、2000/4000 = 0.5 と 12000/14000 = 約0.86と大幅に答えが変わってしまう事に。本当ならば2000と4000でも12000と14000でも同じ答えにならいと困りますよね。ただ前回のコードで作成した3D空間は限りがあったために気付きにかったということです。もし仮に延々と奥行きがある3D空間であればこの書き方では少し困ってしまう事も。ですからZ値の差を表すsZは、

var dZ:Number = this.oz-camera.oz;
var sZ:Number = 1/(dZ*0.0003+1);

これならどこでどう切り取っても同じ見え方に。これを踏まえて今回は延々と奥行きがある3D空間ということで、今話題のTime Machineを作ってみました。

本物に似てる似てないかは別として、中身のコードは前回とさほど変わらないのでコードの記述は省略します。その代わりにソースファイルを用意しました。ぜひダウンロードしてどこまで本物のTime Machineに近づけることができるか(星が流れる、ウィンドウの中身が操作できるetc...)がんばってみてください。ちなみにコンパイルにはFuse Kitが必要ですのでご注意を。

トラックバック(0)

このブログ記事を参照しているブログ一覧: カメラと被写体の関係から擬似3D空間を作る (2)

このブログ記事に対するトラックバックURL: http://www.ficc.jp/cgi-bin/mt4/mt-tb.cgi/10

コメント(4)

はじめまして、福岡さま。

私は、まさにこのようなものFlashで表現したいと、ホームページで調べていたところここのページにたどり着きました。

私はFlashをはじめてからまだそんなに経っていなく、まだまだ経験が浅いです。
Actionscriptも勉強中なのですが、質問したいことがあります。

1.現状は1つ(1本?)だけしか表示されませんが、2.3.4…と増やすことは可能なのでしょうか?
2.増えたときに、各画像のX軸の間隔が一定の間隔ですべて表示されることは可能でしょうか?

これを表現するために2週間ほど格闘しております…笑

なにか実現するためのヒントやアドバイスをいただけないでしょうか?
つたない説明で申し訳ないのですが、ご教授いただければ幸いです。
よろしくお願いいたします。

>まそっどさん
もちろん複数行のものも表現できます。
http://www.anteprima.com/fw07/
この場合はカメラと被写体の距離を常に計算して重なり順を指定しなければなりません。PV3Dなどの既存3Dライブラリを利用するのもいいでしょうし、じっくり考えて自分なりのライブラリを作ってもいいかもしれません。基本はカメラにものが近づいたとき、離れたときのものの見え方を考えると自然と答えが導かれる、かも。

Akira様

ご返答ありがとうございます。
http://www.anteprima.com/fw07/
まさに表現したいFlashでした。
ん?むずかしそうですね・・・
このサンプルを利用した場合、考え方としてはX軸の配列とfor文を追加するという考え方でしょうか?
もしかしたら、「カメラと被写体の関係から擬似3D空間を作る(1)」の方が近いのではと思ったのですが・・・
また、やはりPV3Dを利用しなければ実現できないのでしょうか?
たびたびすいませんが、ご教授いただければ幸いです。
よろしくお願いいたします。

ちょうどてっく煮ブログさんで3Dプログラミングの連載が始まっています。

http://d.hatena.ne.jp/nitoyon/20080616/as_3d_lessen1

Flashで3Dを再現するには3Dの考え方を理解しなければなりません。PV3Dを使うにしてもある程度の3Dに関する知識が必要です。まずはそこから始められてはいかがでしょうか。点が3D的に表示できれば、面を3D的に表示するのも難しくないはずです。チャレンジしてみてください。

コメントする