研究了一段时间的Unity3D,觉得这货不靠谱。不是说引擎不好,而是已经完全脱离flash的范畴了。其代码是采用js的。唯一和flash有联系的部分就是可以输出成swf文件罢了。
于是打算研究下away3d. 嘛,手头上的资料都是away3D 3.6 的。4.0的资料除了官方 api 和 demo外 基本就没有了,研究的非常吃力。 4.0 和 3.6 的变化非常大,包括 camera3D 就少了 target,focus,zoom 。
放1个立方体旋转的demo,左侧立方体跟随鼠标旋转,右侧立方体随机旋转。
本demo需要 flash player 11.0.0+ 如果你的版本为 10.0.0+ 的话,是无法观看的。
之后是源码部分:
package
{
import away3d.containers.Scene3D;
import away3d.containers.View3D;
import away3d.debug.Trident;
import away3d.lights.DirectionalLight;;
import away3d.materials.BitmapMaterial;
import away3d.materials.ColorMaterial;
import away3d.primitives.Cube;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Rectangle;
[SWF(width="500",height="500")]
public class away3D extends Sprite
{
[Embed(source="../Embed/cover.jpg")]
private var _cover:Class;
protected var _view :View3D;
protected var _cube1 :Cube;
protected var _cube2 :Cube;
public function away3D()
{
_createView();
_createScene();
_createCamera();
}
protected function _createView() : void
{
// Create view and add it to the stage
_view = new View3D();
_view.antiAlias=4;
addChild(_view);
addEventListener(Event.ENTER_FRAME, _onEnterFrame);
}
protected function _createScene() : void
{
// Create a new scene containing a trident and two cubes
var scene : Scene3D = new Scene3D();
var trident : Trident = new Trident(200, true);
_cube1 = new Cube();
_cube1.x = -150;
_cube1.material = new ColorMaterial(0xFF0000,.3);
_cube1.showBounds=true;
var light:DirectionalLight = new DirectionalLight();
light.x = -1000;
light.y = 1000;
light.z = -1000;
var material : BitmapMaterial = new BitmapMaterial(new _cover().bitmapData);
material.lights=[light];
_cube2 = new Cube(material,200,200,200);
_cube2.x = 100;
_cube2.tile6=false;
_cube2.showBounds=true;
scene.addChild(light);
scene.addChild(trident);
scene.addChild(_cube1);
scene.addChild(_cube2);
//Assign the new scene to the view
_view.scene = scene;
}
protected function _createCamera() : void
{
}
protected function _onEnterFrame(ev : Event) : void
{
_view.render();
}
}
}
package
{
import away3d.cameras.Camera3D;
import away3d.containers.ObjectContainer3D;
import away3d.containers.Scene3D;
import away3d.debug.Trident;
import away3d.primitives.Sphere;
import flash.events.Event;
import flash.geom.Vector3D;
import flash.utils.getTimer;
[SWF(width="500",height="500",frameRate="60")]
public class ViewportClipping extends away3D
{
private var _perndulum:ObjectContainer3D;
public function ViewportClipping()
{
_createView();
_createScene();
_createCamera();
}
protected override function _onEnterFrame(ev:Event):void
{
_cube1.rotationY=stage.mouseX-stage.stageWidth/2;
_cube1.rotationX=stage.mouseY-stage.stageHeight/2;
_cube2.rotationY--;
_cube2.rotationX--;
_view.render();
}
}
}