WireEngine3D

オープンソースのライブラリ、WireEngine3D を使って3D。Flash技術のオープン化がめざましいです。


しょっぱい案件ばっかやってると鬱憤たまりまくり。そんな時は、
Flashイジリーで息抜き。Flashだけで食っていければ夢のようだぁ~。

今日はオープンソースの3DライブラリWireEngine3Dを使ってみました。このサンプルなんかよりも、もっと高機能ですので、いろいろ試してはいかがでしょうか。他にも、SandyPapervision3Dあたりが有名ですが、これらに比べたらLightweightで扱いやすいと思います。

3Dの計算式を求めてこのサイトを訪れる方が結構いらっしゃるようです。実際、本格的に自作するとなると大変。座標計算だけならまだしも、表面や陰影の計算などをやろうと思ったら(私には)手が届かない。特にデザイナやクリエーターさんは、こんな厄介な計算やってる場合じゃないですもんね。

そこで、OSFlash。Flash業界は閉鎖的だ、なんていうウワサを耳にしたことがありますが、ここ数年でオープン文化の波が押し寄せているようです。「AS知ってりゃメシが食える時代」も終わるのでしょうね。
・・・ボクが参加できる前に・・・orz

サンプルアニメのソースコード

import we3d.WireEngine;
import we3d.SceneObject;
import we3d.Surface;
import we3d.LightPos;
import we3d.mesh.factory.Box;
import we3d.animation.PropertyAnimator;

//舞台とカメラの位置を設定
var render_mc=createEmptyMovieClip("render_mc",100);
var we = new WireEngine(render_mc);
we.setRendererInstance(new we3d.renderer.flatshade.Light());
we.cam.width = 400;
we.cam.height = 400;
we.cam.position.z = -500;
we.cam.position.y = 200;
we.cam.rotation.x = Math.PI/8;
we.lightsEnabled = true;
we.ambientLight = 0;

//照明位置の設定
var light = new LightPos();
light.intensity = 180;
light.position.x = 0;
light.position.y = 400;
light.position.z = -500;
we.lightList.push(light);

//箱を作って、
var box = new SceneObject();
Box.create(box, new Surface( 0x0000ff )
 ,{x:-50, y:-50, z:-50}
 ,{x: 50, y: 50, z: 50}, true);
Box.create(box, new Surface( 0xff0000 )
 ,{x:-50, y:-50, z: 80}
 ,{x: 50, y: 50, z:130}, true);
Box.create(box, new Surface( 0x00ff00 )
 ,{x:-50, y:-50, z:160}
 ,{x: 50, y: 50, z:200}, true);
we.objectList.push(box);

//Y軸に360度回す
var pa:PropertyAnimator = box.animateProperty("rotation.y");
pa.storeFrame(100, 2*Math.PI);

//実行
we.player.playScene(1,100,1,true,true);

//マウスの位置で、カメラアングルを変える。テキトー。
_root.onEnterFrame=function(){
 if( _ymouse > 200 ){
  if( we.cam.position.y > -10 ){
   we.cam.position.y-=1;
   we.cam.rotation.z-=Math.PI/360;
  }
 }else if( _ymouse <= 200 ){
  if( we.cam.position.y < 300 ){
    we.cam.position.y+=1;
    we.cam.rotation.z+=Math.PI/360;
  }
 }
}

コメント

コメントしてください

closed.