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

実際の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画像を変更します。

これはとても楽しい!

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