Adobe純正3Dフレームワーク「Proscenium」のデモをmxmlに貼るまでの道のり

前置き

FlashPlayer11でGPUを使った3D描画が使えるようになりました。

この恩恵を受けるには、
・Stage3D APIを使いこなす
・(最新の)Alternative3DやAway3Dなどサードパーティのライブラリを使う
Adobe純正のProsceniumフレームワークを使う

の3つくらいがあり、1つ目はいきなり敷居が高そうで、2つ目はすでにやってる人がいそうなので、
3つ目の「Adobe純正のProsceniumフレームワークを使う」ことに

本題

実際にProceniumのデモをmxmlで貼付けて表示させるまでに何カ所もはまったので、そのメモ。

1. いろいろダウンロードする
・FlashPlayer11(Debugger版)をダウンロードする
http://www.adobe.com/support/flashplayer/downloads.html


・FlashPlayer11用のPlayerGlobal.swcをダウンロードする(SDKにまだ含まれていないので)
http://www.adobe.com/support/flashplayer/downloads.html


・Prosceniumをダウンロードする
http://labs.adobe.com/technologies/proscenium/


2. FlashBuilderで新しいプロジェクトを作る
・FlashPlayerで新規Flexプロジェクトを作成

・作成したFlexプロジェクトにProsceniumSamplesからres/とsrc/com/とsrc/BasicDemo.asとsrc/DemoPool.asをコピー

・作成したFlexプロジェクトのlibにProsceniumからPellet.swcとProscenium.swcをコピー

mxmlを配置

・creationCompleteHandlerとかで、にDemoPoolをaddChildする

・作成したFlexプロジェクトのプロパティ → Flex ビルドパス → SWCの追加で、ダウンロードしたPlayerGlobal.swcを追加

・ビルド!

3. エラーと戦う

1120: 未定義のプロパティ Context3DRenderMode へのアクセスです。
playerglobal.swc

VerifyError: Error #1014: クラス flash.display::Stage3D が見つかりません。
デフォルトでは、FlashPlayer10までで使えるようにビルドされるので、
プロジェクトのプロパティ → Flex コンパイラ → 追加コンパイラ引数に「-target-player=11」を追加


'/Applications/Adobe Flash Builder 4.5/sdks/4.5.0/frameworks/libs/player/11.0/playerglobal.swc' を開くことができません
FlashPlayer11用のplayerglobal.swcはlibsにいるので、プロジェクトのプロパティ → Flex ビルドパス → Flex4.5 → playerglobal.swcを選択して「削除」


VerifyError: Error #1014: クラス flash.display::Stage3D が見つかりません。
追加コンパイラ引数に「-target-player=11」だけじゃ足りないみたいなので、「-swf-version=13」を追加


VerifyError: Error #1079: 読み込まれたコードではネイティブメソッドを使用できません。
playerglobal.swcのリンクの仕方がまずかったみたいなので、プロジェクトのプロパティ → Flex ビルドパス → リンクタイプ:「コードにマージされます」を「外部」に変更
(※playerglobal.swcは他のライブラリと違って、実行するPCのFlashPlayerからロードされるので外部にしないといけない)

それでも直らない ⇒ playerglobal11_0.swcをplayerglobal.swcにリネームしてなかった


VerifyError: Error #1014: クラス com.adobe.scenegraph::BasicScene が見つかりません。
Pellet.swcとProscenium.swcのリンクタイプが「外部」になっているので、「コードにマージされます」に変更


Error #2044: ハンドルされていない ErrorEvent : text=Error #3702: Context3D を使用できません。
「wmode」が「direct」になっていないといけないとのこと。
html-templateのindex.template.htmlにparams.wmode="direct";とを追加
↑は、SDK変えると再生成されるので、別途htmlを作成した方がいいかも


・エラーは出ないが、何も表示されない
Stage3Dは従来のStageの後ろにいて、見えていないらしい。
にbackgroundAlpha="0"を追加


やっと動いた!!!