3D表現最履修
2008/04/21 21:55 - AS周辺事情
さて。
前回のエントリー、なぜ唐突に3D表現の座標系の列挙をしたのかというと、いやぁ実は、ここらで自前の 3D クラス作成にもっぺんチャレンジしてみようかなぁ、と思いまして。
かつて "Foundation ActionScript 3 Animation: Making Things Move!" のソースを見様見真似で 3D クラスを作ったことがありました。
Chapter 15 ~ 17 が 3D 表現に関わる章です(この本のソースコードは別に本を買っていなくても、出版元のサイトへいけばダウンロードできるようになっています)。
当時は原理原則を調べようともしなかったせいで、目先のソースにコードの追加追加を繰り返し、九龍城なみに混沌としたクラスになってしまいました。
やっぱ基礎は学ばんとイケンね。とおおいに反省はしたんですが、その頃ちょうど Papervision3D が話題にのぼり始めたもんで、きったない自作コードは破棄しちゃったんでした。
で、PV3D をはじめとするステキ 3D クラスが充実しているこの時代に、なんで自作 3D クラスを最履修しようと思ったのか。
話は今から半年ほど遡ります。
業界人でない私は参加していないんですが、Adobe MAX Japan 2007 というイベントがありましたね。
当方をご覧の方々でも参加された方がおられるやもしれません。
そこで斯様なセッションがありました。
当方をご覧の方々でも講義を受けた方が以下同文。
- Flash による 3D 空間の創造とメカニズム by 城戸雅行
ネット上で多くの方がそれぞれのブログにアップしたレポートや Adobe の公式レポ、そしてサブテキストとして CREATIVE SUITE 3 Web Edition TOUR のレポ等々いろいろ拝見しましたが、城戸さんの講義はかなりインタレストでエキサイティングなものであると見受けました。
まぁ PICTAPS に既に度肝抜かれ済みだったんで何を今さらと言えば今さらなんですが。
で私はというと、こちらのレポートをとりわけ興味深く拝見しました。
そして、「(3Dについて)きちんと基礎を身につけることが大切。できれば、ライブラリー等使わず、基礎となる知識を身につけてほしい。なるべくライブラリに頼らず、1からプログラムを作ってください。そうすれば必ず役に立ちます」という言葉に感銘を受けました。
で、3D の知識をちゃんと得たいなぁー、と考えはしていたんですが、なかなか捗らなかったわけです。
でもいつまでもウダウダしてても仕方ないし、考えるだけで何もしないよりは、稚拙な状態でもエントリーしていった方が実になるかもなぁ、と思いまして、自作 3D クラス再チャレンジを始めたのが、前回のエントリーなんでした。
まぁもうひとつの理由があって、PV3D では自分の求める表現がしづらいということが判明したというのもあります。
私は PV3D で 3D オブジェクトを動かす場合、マウス位置によってカメラを動かすというごく一般的な手法は採らず、Scene に rootNode を addChild 、そしてその下に 3D オブジェクトをぶら下げ、rootNode を回転させることで各 3D オブジェクトを動かすという方法を採っています。
でもこの方法だと lookAt で常にオブジェクトをユーザの真正面に配置し続けるというテクが使えないっぽい(もしかしたらできるのかも知れませんが、いろいろ試したつもりですけど、私は解決策をみつけられませんでした)。
でもワタクシ、以下のようなコードにあるようにカメラを動かすことで 3D オブジェクト動かすのがキライなんですよね。
camera.x += ( (container.mouseX*10) - camera.x ) * 0.05; camera.y += ( (container.mouseY*10) - camera.y ) * 0.05;
だんぜん下のコードで 3D オブジェクトを動かすよ派。
rootNode.rotationY += container.mouseX / 50; rootNode.rotationX += container.mouseY / 50;
なんでかっていうと、マウスが画面中央に近づくとオブジェクトが大きくなるのがイヤだから。
展示室にある、Fomation みたいなのは、どうも PV3D では、3D オブジェクトの回転についてえり好みをすると、実現できないらしいということが分かったのも、自作 3D クラス再燃の理由です。
そんなわけで、今後かなりヘッポコな 3D 話が再発する予定です。
間違っている点、至らない点があったらご教示しただけると幸いです。