[AS3D #1] 自作 3D ライブラリを Snippets にコミットしました
Papervision3D や Sandy など優秀な 3D ライブラリがある中、自学のため 3D ライブラリを作っているのですが、ある程度の形が出来たので Snippets にコミットしてみました。Snippets の AS3D からチェックアウトして試していただけるとありがたいです。
まだまだ上手く動いてないところや未実装な部分も多く、実用的ではありませんが・・・。
コードは下記の通り。
package
{
import as3d.camera.Camera3D;
import as3d.display.*;
import as3d.display.primitive.*;
import as3d.geom.*;
import flash.display.*;
import flash.events.*;
import mx.core.BitmapAsset;
[SWF(width=300, height=300, backgroundColor=0x000000, frameRate=30)]
public class Sample01 extends Sprite
{
[Embed(source="images/texture01.gif")]
private var Texture:Class;
public function Sample01():void
{
var viewPort:ViewPort3D =
new ViewPort3D(0, 0, stage.stageWidth, stage.stageHeight);
var scene:Scene3D = Scene3D(addChild(new Scene3D(viewPort)));
scene.startRendering();
var plane:Plane = Plane(scene.addChild3D(new Plane()));
var cone:Cone = Cone(scene.addChild3D(new Cone(100, 50)));
cone.shadingType = ShadingType.FLAT;
var torus:Torus = Torus(scene.addChild3D(new Torus(20, 40)));
torus.shadingType = ShadingType.GOURAUD;
torus.texture = BitmapAsset(new Texture()).bitmapData;
var camera:Camera3D = scene.camera;
camera.lookAt = torus.position;
var dld:Vector3D = scene.directionalLight.direction;
var angle:Number = 0;
addEventListener(Event.ENTER_FRAME, function ():void
{
torus.rotationX += 2;
torus.rotationZ += 4;
torus.x = Math.cos(angle ) * 200;
torus.y = Math.sin(angle / 2) * 100 + 150;
torus.z = Math.sin(angle ) * 100;
camera.x = Math.cos(-angle / 2) * 400;
camera.y = Math.sin(-angle / 4) * 200 + 300;
camera.z = Math.sin(-angle / 2) * 200;
dld.x = Math.cos(angle);
dld.z = Math.sin(angle);
angle += 0.05;
});
}
}
}
カテゴリー: Flash (ActionScript)