2007年11月19日

memo 002 Papervision3D を使ってみよう


先生から「物理エンジン、アニメーション、3D、どれがいい?」と聞かれ
「3Dやってみたい」と答えたところ
Papervision3Dに少し挑戦してみることになりました。

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Papervision3Dとは:
Flash ( flash8とflash9 ) で動作する3Dエンジンで、
ActionScriptを使っての3D表現が可能になります。
http://papervision3d.org

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

① それでは早速 作業開始

まずはPapervision3Dをダウンロードしましょう。

※実際に作業する際には、
 Papervision3Dのライブラリを作業するファイルと同じディレクトリ下へ用意します。
(もしくはパスを通します。)

■ Papervision3D 1.5   from Google code
   http://code.google.com/p/papervision3d/

■ API documents
   http://www.papervision3d.org/docs/as3/


② exampleファイルをいじりながら習うより慣れろ

Papervision3d の Google code ダウンロードリスト
Papervision3D_sourc_docs_examples_rev28.zip
というファイルがあるのでそれをダウンロードします。

examplesの中にHelloWorldというフォルダがあるので、
HelloWorldフォルダの中に①のPapervision3dのライブラリをコピペします。
(もしくはパスを通す)

HelloWorld.fla、main.asを開きます。
(スクリプトはmain.asに記述されています)


③ HelloWorld ならぬ HelloEarth

helloworld_earth.jpg
実際のswf ファイル(地球を角度を変えてみることが出来ます)はこちらからどうぞ。

分からなかった部分にコメントアウトを追加しましたが
間違っていたり等、指摘して頂けると幸いです。

package
{
import flash.display.*;
import flash.events.*;

// Import Papervision3D
import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;

public class main extends Sprite
{
    // ___________________________________________ vars3D

    var container :Sprite;
    var scene     :Scene3D;
    var camera    :Camera3D;
    var sphere    :Ase; //3Dモデリングされた球体


    // ____________________________________________ main

    function main()
    {
        init3D();

        // onEnterFrame
        this.addEventListener( Event.ENTER_FRAME, loop3D );
    }


    // ____________________________________________ init3D

    function init3D():void
    {
        // Create container sprite and center it in the stage
        container = new Sprite();
        addChild( container );
        container.x = 320;
        container.y = 240;

        // Create scene
        scene = new Scene3D( container );

        // Create camera
        camera = new Camera3D();

        // Add Earth sphere
        addEarth();

        // Add space plane
        addSpace();
    }


    // _____________________________________________ loop

    function addEarth():void
    {
        //惑星に貼り付けるBitmap画像(flaファイル・ライブラリ内)を引数に入れる
        var materialEarth :BitmapAssetMaterial = new BitmapAssetMaterial( "Earth" );

        //惑星のロード、第三引数は惑星の遠さ;数が1より小さいほど遠い
        sphere = new Ase( materialEarth, "world.ase", 0.7);

        //rotationXはX軸に対して回転
        //yawはY軸に対して回転
        //参照したサイト:http://blog.livedoor.jp/takaaki_bb/archives/50614075.html
        sphere.rotationX = 0;
        sphere.yaw( -30);

        // Add to scene
        scene.addChild( sphere );
    }


    // _____________________________________________ loop

    function addSpace():void
    {
        //宇宙に貼り付けるBitmap画像(flaファイル・ライブラリ内)を引数に入れる
        var materialSpace :BitmapAssetMaterial = new BitmapAssetMaterial( "Space" );

        // 宇宙画像を貼り付けるPlane型のオブジェクトを作る;Planeは表示オブジェクト
        //引数はそれぞれ横の長さ、縦の長さ、セグメント(ゆがみ?:小さい値ほどゆがむ)8が丁度良さそう
        //参照したサイト:http://aquioux.blog48.fc2.com/blog-entry-177.html
        //参照したサイト:http://aquioux.blog48.fc2.com/blog-entry-191.html
        var plane:DisplayObject3D = new Plane( materialSpace, 6400, 4800, 8, 8);

        // Position plane
        plane.z = 500;

        // Add to scene
        scene.addChild( plane );
    }


    // ____________________________________________ loop

    function loop3D(event:Event):void
    {
        // Move camera with the mouse
        //カメラの移動範囲の指定
        camera.x = -container.mouseX/4*4*6;
        camera.y = container.mouseY/3*3*6;

        // Rotate sphere around its own vertical axis
        sphere.yaw( 0.2 );

        // Render the scene
        scene.renderCamera( camera );
    }
}
}

地球の画像を自分の顔に変えてみました。
HelloWorld.flaのライブラリに画像を追加し、貼り付けるBitmap画像を変更します。

helloworld00.jpg


















これはとても楽しい!

トラックバックURL

このエントリーのトラックバックURL:
http://geek.oyspe.com/~oyspe/mt/mt-tb.cgi/10

コメントする

(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)