2007年9月アーカイブ

前回の[Papervision3d]#4 3ds maxでモデリングしたデータをColladaを使って表示する①に続き、Papervision3dでColladaを使ってみる。

前回は、.dae形式の3dオブジェクトを生成するところまでやったので、今回は、それを使うソースについて書いてみる



実際に動作するソースは、





17、18行目の

は、今までは使っていなかったが、
外部ファイルをActionScriptコンパイル後に生成されるswfファイルに含める時のコマンドで、さらにCでいう#defineみたいにここで定義した名前をプログラム内で使うことができる。



は、3ds maxで貼ったテクスチャの読み込みである。
まず、先ほど定義した画像ファイルのインスタンスを生成し、Bitmap型にキャスト
それを、Colladaコンストラクタに渡すためのMaterial配列(?)の中に、前回の⑩で定義したマテリアル名で登録する。


最後に

で、.daeファイルと、それに対応するマテリアルを引数に、Colladaオブジェクトを生成し
rootNodeに追加する



参考サイト
Papervision3D tutorial from the ground up (http://rozengain.com/?postid=28)

今回は、以下のコトを試してみる。
①3ds maxで3Dオブジェクトをモデリング
②ColladaMAXプラグインを用いて、3ds maxからCollada(.dae)形式でファイルを出力
③Papervision3dを使って、表示する


まず、環境設定から
3ds maxはデフォルトでは、Colladaを出力することができないのでColladaMAXというプラグインを入れる必要がある。
まず、Feeling Softwareに行き、ID登録をする。
ログインすると、DownloadからColladaMAXをダウンロードすることが出来る。

3ds maxがインストールされているなら、ダウンロードしたファイルを実行し、指示に従えばプラグインを入れることができる。




環境が整ったら、3ds maxでモデリングをする。

1.gif















①右のメニューから『ボックス』を選び、
②ボックスを作る
③上のメニューから『マテリアル エディタ』をクリックし、マテリアル エディタのウィンドウを開く

2.gif









































④マテリアル エディタの『拡散反射光の右のボタン』をクリックし、マテリアル/マップブラウザを開く

3.gif










































⑤マテリアル/マップブラウザの『ビットマップ』をダブルクリックし、画像を選択

今回は↓のdice.gifを使った。
dice.gif








画像が選択できたら、マテリアル エディタ ウィンドウに戻り、

4.gif









































⑥右から4番目のボタン『ビューポートにマップを表示』をクリック(必須ではない)
⑦左から3番目のボタン『マテリアルを選択へ割り当て』をクリックし、②で作ったボックスに画像を適応させる。ここで、②で作ったボックスが選択されてないければこのボタンは押せないので、押せない場合はボックスを選択する
⑧左から7番目のボタン『ライブラリに追加』をクリックし、このマップの設定に名前をつける










⑨『マテリアル/マップ ツリー全体をライブラリに追加しますか?』と聞かれるので『はい(Y)』をクリック

6.gif








⑩今回は『MyDiceMaterial』という名前をつける。ここで設定した名前はPapervisionで使うので、覚えておく(後でも見れるが)
⑪設定できたらマテリアル エディタのウィンドウを閉じる

7.gif















⑫上のメニューから、『モディファイヤ → UV 座標 → UVW マップ』を選択


8.gif















⑬右のメニューのパラメータから『ボックス』を選択し
⑭上のメニューから、『モディファイヤ → UV 座標 → UVW アンマップ』を選択

9.gif















⑮右のメニュのパラメータから『編集』をクリックし、UVWを編集ウィンドウを開く

10.gif













⑯セレクトボックスから、先ほどのマップを選択し、画面に表示させる

11.gif















⑰選択モードから『面サブ-オブジェクト モード』を選び
⑱メニューのマッピングから『フラッテンマッピング』を選択

12.gif











⑲設定を聞かれるが、『OK』を押す

13.gif













⑳すると以下のようにどの面にどの部分をマッピングするかを選択する枠がでるので以下のように移動

14.gif













これが出来たら、UVWを編集ウィンドウを閉じる
これで、モデリングは終了

ここで、これをそのままColladaでエクスポートしてもいいのだが、このままだと大きすぎるのかpapervisionで表示させると奥の方が小さくなりすぎてしまう。きっとpapervisionのカメラの設定で解決できるのであろうが、カメラについては、まだ詳しくないので、いろいろ実験した結果、このオブジェクトを縮小してから表示させると良い感じになった。

なので、
18.gif















スケールかなり、小さくし、

15.gif















『ファイル→書き出し』を選び

16.gif





















ファイルの種類を『COLLADA(*.dae)』にし、保存を押す。すると、

17.gif
















上のようなオプションを聞かれるが、これはデフォルトのままでいいらしい。

[Papervision3d]#5 3ds maxでモデリングしたデータをColladaを使って表示する②に続く
第25回 Flex2勉強会に参加しました。


今回のメインは、来月の11月1日~2日に行われるAdobe MAX Japan 2007COLDFUSION 8やAIRやFlex3でした。

まず、Adobe MAX Japan 2007は、アメリカのMAXのように技術者ばかりが集まってずっと技術的なことを話すわけではなく、デザイナーも多く参加し、プログラマーではやらないようなものも見ることがでくるとのこと。

詳しくはWebサイトにセッションのスケジュールとか書いてあるので参照してください。
また、早く予約しないと人気のセッションは満員になってきているのでお急ぎを


そして、COLDFUSION 8について、
この会で始めて知ったので、まだ詳しくは知らないが、
Webアプリケーションを作る上で、Javaや.NET、ExchangeServerのラッパーをしてくれるらしい。
例えば、.NETで制作したプログラムをCOLDFUSION側から簡単に呼び出して実行したりできるらしい。
まぁ、とにかく、カナリ少ないソースでいろんなことができるみたい


Adobe MAX Japan 2007
複数のオブジェクトに対し、

・マウスがオブジェクトに乗った時(マウスオーバー)
・マウスがオブジェクトから離れた時(マウスアウト)
・オブジェクトがクリックされた時(クリック)

に何らかのイベントを起こすようにする。

また、オブジェクトの種類(グループ?)によって、イベント処理を変更したいし、全オブジェクトの回転をrootNodeの回転で実現したいので、sceneに直接addChildせずに、rootNode的なものを用いることにする。
(Flashでは当たり前かもだけど、Flash自体初心者ww)



まず、前回作ったサイコロを5つで次のコトをやってみる
・黒いサイコロは、マウスが乗ると縮小
・白いサイコロは、マウスが乗ると拡大
・いずれもマウスが離れると元のサイズに戻る
・クリックされると、どのオブジェクトがクリックされたかを表示

結果は、

この結果に辿りつくまでにカナリ時間がかかった
Sceneをどのクラスのインスタンスにするかによってキーイベントの実装が異なるみたい
MovieScene3Dを使う場合は、リスナーを付けたいオブジェクトはかならずこのインスタンス直下になければならないようだ
だが、この方法だと先ほど述べたように全体を回転させたい場合にrootNodeという手段が使えないのだ。

これを解決するのが、InteractiveScene3Dクラスである。このインスタンスを作れば、今言ったような制限はなくなる。


そして、一番大変だったのが、
黒いサイコロと白いサイコロで、異なるイベントを起こす部分である。
Cubeオブジェクトのcontainer.nameに識別のための文字列を入れておき、イベントの最初に条件分岐するという方法もあるが、なんかしっくりこない。
そこで、黒いサイコロと白いサイコロを別々のクラスにし、イベント内でさらに自分のイベント用メソッドを呼び出すことに。
ここで問題になったのが、そのままCubeを継承して新たなクラスを作っても、DisplayObject3Dクラスに内メソッドを呼ぶとコンパイルエラーになる(当たり前)
なので、interfaceを利用することにした。調べてみると、actionScriptにもちゃんとinterfaceがあるので、使ったことないけどどうせJavaと同じように書けばいんだろうということで作成。
そのinterfaceを新たに作ったクラスでimplementsして、別々の処理を書けば完成。


クラス名をBlackDiceとかにするんなら、Material関係もクラス内に書いても良かったけど、もう動いちゃったから変更するのめんどくさくなったww。
あと、ClickEventメソッドは使わなかったww とりあえず、ソースは、
main.as

MyEvent.as

BlackDice.as

WhiteDice.as


もっと良い方法があれば教えてください
今日は、Papervision3Dで立方体(直方体でもいいが)を作ってみる。

立方体を作るためにはcubeというクラスを使うわけだが、このcubeというクラスは途中で改良され、前回ちょっと触れたかがライブラリのバージョンによってコンストラクタの引数が若干異なる。

今回は、その両方のバージョンでやってみる。

まず、古い方から、ここからRevision 91をダウンロードしてくれ

ソースは、



結果は、


となる。

注目すべき部分は、

まず、立方体の表面に貼るテクスチャを設定するのに、BitMapFileMaterialオブジェクトを用い、Cubeコンストラクタの第一引数に渡す。
後で、解説するが、このCubeコンストラクタの第一引数が変更された。
結果から想像できると思うが、この方法では、立方体の全ての面に対し、同じテクスチャしか貼れなくなってしまい、サイコロのようなそれぞれの面で異なったテクスチャを貼ることができない。

ちなみに第2引数~第4引数は、立方体の大きさを指定するようになっている。


次に、改良された方でサイコロを作ってみる。
ソースで変更するところは、↑で抜粋した部分を
のようにすればいい。これで、立方体の面ひとつずつに対し、別々のテクスチャを貼ることが出来る。


参考サイト
Flash3Dブログ: Papervision3Dを始めてみた
やっぱこれからの時代は、いろんな情報をネットのあちら側で管理する時代なんだなぁとふと思い、
じゃぁ、ネットのこちら側だけで動作するアプリより、Webアプリケーションの勉強した方がいんじゃね?という考えになり、
今の流行は、サーバーサイドだけのアプリじゃなくて、クライアントサイドでAjaxとかいろいろ駆使するのがいいんだろうなぁってなって、
セカンドライフは好きじゃないけど、3Dってやっぱいいよなぁーという想いから
ブラウザで3D使えるアプリとか作ってみたいなという結論に至ったww


そこで、調べてみると、Papervison3dというものがあるらしい
これは、FlashPlayerを使って、3次元なアプリを作るためにMITがオープンソースで公開しているライブラリらしい。ここにFlashで動作する3Dエンジン Papervision3D」という記事がある。
このデモ(?)は感動ものだ

まぁ、簡単に言うと、ActionSctiptで3D扱うためのライブラリのようだ。


flashもActionScriptも使ったことないけど、せっかくなので使ってみる。

とりあえずは環境設定
まず、ActionScriptをコンパイルするためにFlex 2 SDKが必要だ。
これは、アドビの公式HPから無料でダウンロードすることができる(※要 ID登録)
これを使えば、Flash cs3とかいう何万もするソフトを買わなくても作ることができる。

次に、Papervison3dのライブラリだ。これは、svnで公開されていて、URLは、古いバージョン現在のバージョンの二箇所がある。
フツーに考えて、新しいバージョンを使った方がいいのだが、既にブログなので公開されているサンプルソースなどが、古いバージョンで書かれたものだったりするみたい。とりあえず、サンプルに変更に変更を加えて勉強するつもりなので、古い方をCubeの違いが分かったので新しい方をエクスポートしておく。
落としたら、flex 2 SDKを展開したフォルダのframeworks内のsourceフォルダに突っ込んでおく。
そして、frameworks内のflex-config.xmlファイルの15行目あたりのsource-pathに
source/
を追加し、これが有効になるようにコメントアウトを外しておく。

これで開発環境は整ったかな?

ぁ、ActionScriptは、mxmlcコマンドでコンパイルするみたいなので、
flex 2 SDKを展開してフォルダ/binをクラスパスに通しておけば、後々コンパイルが楽かも。


具体的な、プログラムについてはまた明日書くことにする

iKnow

あわせて読みたいブログパーツ
Firefox meter