[AS3] Alternavta3d7.5教程(一)

来源:互联网 发布:剑网三重制版 mac 编辑:程序博客网 时间:2024/06/01 17:22

“Molehill”来袭,大家都准备好了吗?Flashplayer11的GPU支持将改变整个Flash平台的开发。
Alternavta3d是目前最好的Flash平台3D引擎,最新版本是7.5.1,虽然下一个版本8还没放出,但由于跟原来5.6的版本差异很大,跟8应该相差不大了。
Alternavta3d由于不是开源的,网上教程比较少,我会陆续更新Alternavta3d7.5系列教程。


Hello, Alternativa3D

这是我的第一个Alternativa3D例子
打开演示

整个例子非常简单,有几点需要注意:
1. wireMaterial和colorMaterial都是通过FillMaterial创建的,区别只是在参数的设定上。
2. flash运行的状态数据(如FPS,MEM等)可以通过addChild(camera.diagram)来显示。
3. 不像pv3d有一个scene,将3D对象放到场景可以用addChild Object3DContainer,或使用BSPContainer来实现。

复制内容到剪贴板
代码:
/**
* Engine:Alternativa3D7.5.1
* Author:Mars Yang
* Link:http://www.marsyang.com/blog/archives/85
*/
package
{
    import alternativa.engine3d.core.Camera3D;
    import alternativa.engine3d.core.Object3DContainer;
    import alternativa.engine3d.core.View;
    import alternativa.engine3d.materials.FillMaterial;
    import alternativa.engine3d.primitives.Plane;
    import alternativa.engine3d.primitives.Sphere;
    import flash.display.Sprite;
    import flash.events.Event;
    [SWF(backgroundColor="#000000", frameRate="100")]
    public class Example0 extends Sprite
    {
        private var rootContainer:Object3DContainer = new Object3DContainer();
        private var camera:Camera3D;
        private var plane:Plane;
        private var sphere:Sphere;
        private var wireMaterial:FillMaterial = new FillMaterial(0, 0, 0, 0xffffff);
        private var colorMaterial:FillMaterial = new FillMaterial(0xff0000, 1, 0, 0xffffff);
        public function Example0()
        {
            addEventListener(Event.ADDED_TO_STAGE, init);
        }
        public function init(e:Event): void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            //create camera & view
            camera = new Camera3D();
            camera.view = new View(stage.stageWidth, stage.stageHeight);
            addChild(camera.view);
            addChild(camera.diagram);
            camera.rotationX = -120*Math.PI/180;
            camera.y = -150;
            camera.z = 100;
            rootContainer.addChild(camera);
            //create object3d
            plane = new Plane(200, 60);
            plane.setMaterialToAllFaces(colorMaterial);
            rootContainer.addChild(plane);
            sphere = new Sphere(50);
            sphere.y = 100;
            sphere.setMaterialToAllFaces(wireMaterial);
            rootContainer.addChild(sphere);
            camera.render();
            stage.addEventListener(Event.RESIZE, onResize);
        }
        private function onResize(e:Event):void {
            camera.view.width = stage.stageWidth;
            camera.view.height = stage.stageHeight;
            camera.render();
        }
    }
}
原创粉丝点击