ということでPapervision3Dでパノラマを表示するスクリプトを組んでみました。
PV3Dのバージョンが変わったことでの仕様変更にともなって思ってたより時間が掛かってしまったのはナイショです。
しかもこのWordpressだとswfの掲載が面倒なので割愛です。XMLで外部の画像ファイルを読み込むようにしているので余計に…ということでスクリーンショット。

マウスでぐーりぐーり動きます。
その時の覚え書き。
BasicView
これまではcameraやviewportを作ってstageに乗っけてったんだけど、そこら辺の面倒な処理を全部やっちゃってくれる便利クラス。
public class Main extends BasicView {
public function Main():void {
super(640, 480, true, true, "FREECAMERA3D") ;
こんだけ。超簡単。
ただ、ここで落とし穴。第4引数はカメラの種類で、デフォルトだと”CAMERA3D”。めっちゃ簡単カメラで、回転は不可らしい。一点集中型?ということでパノラマする時は”FREECAMERA3D”か”"FRUSTRUMCAMERA3D”で。後者は出来ることが細かすぎる様な気がするので、前者で充分だと思います。逆に立方体をグリグリしちゃうという逆転的発想で対応するならデフォルトでもイイと思いますガ。
立方体の法線
イメージとして、正立方体の中にカメラがあって、その中でカメラがグルグルと回る、という感じです。んでCubeですが、普通に作っただけでは法線が外を向いちゃってるので、内側に向けてあげる必要があります。
cube = new Cube(materials_list, SIZE, SIZE, SIZE, 4, 4, 4, Cube.ALL, Cube.NONE) ;
第8引数のinsideFacesで全面内側に向いてもらいます。
ここで謎。
materials_listの部分で、面を指定しつつ画像を貼り付けるんだけど、上面(見上げた所)の画像がどうしても180度回転されてしまう。。。というか180度回転させてあげないといけない模様。ただ先人の足跡を見ると、どうもそういった処理はしてない。。。と思ったら180度回転済みの画像を読み込んでる…しかしこれは元のパノラマ画像の規格がどうなってるか分からないので処理側で回転させるべきか、回転させた物を用意しておくのかが不明。。。とりあえず180度回転の場合は、
var tmp:BitmapData = new BitmapData(bmp.width, bmp.height, false, 0) ;
var rotationMatrix:Matrix = new Matrix(-1,0,0,-1,bmp.width,bmp.height) ;
tmp.draw(bmp, rotationMatrix) ;
bmp.dispose() ;
bmp = tmp ;
これで回転。解決?
と、まとめ上げてみればポイントなんてこんなもんだったのに、何時間かかってるんだ、ヲレ…orz
ま~AS3で作れば重たい画像もローディング付けることが出来たり、カメラぐりぐり中は画質を落としてスムーズな動きにしたり、アンカー仕込んでおいて、クリックしたら解説の小窓がビュィっと出てきたりと、いろんな発展が見えますねぇ。
自分でも撮れるようになりたいけど、レンズが…あとあのコの字型のマウントも…うーんうーん。。。もうちょっと稼いでからかな~