ほんじゃーねっと

おっさんがやせたがったり食べたがったりする日常エッセイ

Papervision3Dを使ってみる

HTML+Javascriptよりも、FlexMXMLActionscriptの方が表現の幅が広かったり
ブラウザの互換性を気にしなくて良かったりしていいんじゃないの、と思い始めた。
HTMLもJavascriptも使わなくなることはないと思うけど、Silverlightの情報が
増えるまでちょっと触ってみよう。


簡単に3D表現が可能だというPapervision3Dを入れてみたが、最初のサンプルを
動かすまでに苦労したのでメモしておく。


Flex2 SDKは昔インストール済み。最新版ではないかも。


下記のサイトを参考にした。
http://d.hatena.ne.jp/flashrod/20070519#1179540360


公式サイトを見るとバージョン1.5がダウンロード可能となっていたので、これをダウンロード。
http://blog.papervision3d.org/
http://code.google.com/p/papervision3d/downloads/list
Papervision3D_1_5.zip


解凍してcompcコマンドを実行。

compc -include-sources PV3D_1_5\src -output pv3d.swc


山ほど警告とエラーが出た。
とりあえずstrictをfalseにしてみる。

compc -strict=false -include-sources PV3D_1_5\src -output pv3d.swc


エラーが2つと警告が2つに減った。とりあえず警告は無視。

C:\actionscript\papervision3d\PV3D_1_5\src\org\papervision3d\core\culling\DepthTriangleCuller.as(6): col: 15 エラー: インタ
ーフェイスメソッド testFace (名前空間 org.papervision3d.core.culling:ITriangleCuller) は、対応していないシグネチャでクラス org.papervision3d.core.cull
ing:DepthTriangleCuller に実装されています。
public class DepthTriangleCuller implements ITriangleCuller
^
C:\actionscript\papervision3d\PV3D_1_5\src\org\papervision3d\core\culling\CompositeTriangleCuller.as(6): col: 15 エラー: インターフェイスメソッド testFace (名前空間 org.papervision3d.core.culling:ITriangleCuller) は、対応していないシグネチャでクラス org.papervision3d.core.
culling:CompositeTriangleCuller に実装されています。
public class CompositeTriangleCuller implements ITriangleCuller
^
C:\actionscript\papervision3d\PV3D_1_5\src\org\papervision3d\components\as3\flash9\PV3DColladaScene.as(422): col: 17 警告: var 'items' に型宣言がありません。
for each(var items in materialsQue)
^
C:\actionscript\papervision3d\PV3D_1_5\src\org\papervision3d\components\as3\flash9\PV3DColladaScene.as(503): col: 17 警告: var 'item' に型宣言がありません。
for each(var item in collada.children) if(debug) trace("collada children: ", item.name);

というような内容。


色々調べたけど解決法が見つからなかったので、DepthTriangleCuller.asとCompositeTriangleCuller .asのtestFaceメソッドの引数をITriangleCullerインターフェースのtestFaceメソッド定義に合わせてみる。

...
import org.papervision3d.core.geom.Face3DInstance;
import org.papervision3d.objects.DisplayObject3D;
...
public function testFace(displayObject:DisplayObject3D, faceInstance:Face3DInstance, vertex0:Vertex2D, vertex1:Vertex2D, vertex2:Vertex2D):Boolean {
...

で、再度compcを実行

compc -strict=false -include-sources PV3D_1_5\src -output pv3d.swc


まだ警告は出るけど、とりあえずエラーはなく、pv3d.swcが出来た。
いいのかこれで...。


ひとまずできたswcファイルを、(Flexインストールフォルダ)/frameworks/site-libs/binに保存して(Flexインストールフォルダ)/frameworks/flex-config.xmlでbinフォルダを読み込むように編集。
この作業を行わなくても、コンパイル時にswcファイルを都度指定すればOK。

...
<library-path>
<path-element>libs</path-element>
<path-element>locale/{locale}</path-element>
<path-element>site-libs/bin</path-element>
</library-path>
...


参考にしたサイトのサンプルはとりあえずコンパイルして実行できた。
問題が出るまではこれでいくとしよう。