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とかで、
・作成した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の後ろにいて、見えていないらしい。
やっと動いた!!!