Alternativa3D 是基于 ActionScript 3.0 的 Flash 3D 框架,支持 GPU 硬件加速,免费不开源。
配置开发环境参考了官方教程:
http://wiki.alternativaplatform.com/Getting_started_with_Alternativa3D_8
1 安装FlashDevelop 4。(Flex SDK4.6和playerglobal.swc都已经集成在进FlashDevelop4中)你能启动FlashDevelop,如下图所示。
创建一个AS3项目:选择【Project】→【New projectt】
输入项目名称为Alternativa3D_8,保存在C:\Work\ Alternativa3D_8目录下。
选择【Project】→【Properties】→【Compiler Options】→【AdditionalCompiler Options】,增加下面的参数:
-swf-version=13-target-player=11.1 -static-link-runtime-shared-libraries=true
选择【Project】→【Properties】→【Output】→【TestProject set to Open document 】然后输入:
bin\index.html
这样,我们就创建了一个AS3项目。
2 安装FlashPlayer 11。
5 下载Alternativa3D 8。将解压的Alternativa3D.swc拷贝到前面创建AS3工程的lib文件夹中。选择lib中的Alternativa3D.swc,单击鼠标右键,选择【Add to library】,如下图所示。
OK!我们已经配置好了环境。现在我们马上编写一个类,然后编译运行测试一下环境是否配置成功。
在Main.as中编写如下代码:
package
{
import alternativa.engine3d.core.Camera3D;
import alternativa.engine3d.core.Object3D;
import alternativa.engine3d.core.Resource;
import alternativa.engine3d.core.View;
import alternativa.engine3d.materials.FillMaterial;
import alternativa.engine3d.primitives.Box;
import flash.display.Sprite;
import flash.events.Event;
import flash.display.Stage3D;
/**
* ...
* @author yl
*/
public class Main extends Sprite
{
private var rootContainer:Object3D = new Object3D();//创建一个容器
private var camera:Camera3D;//创建摄像机
private var stage3D:Stage3D;//创建Stage3D对象
private var box:Box;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
stage.align = "TL";//设置SWF在播放器或浏览器中的当前对齐方式,TL表示居顶左侧
//创建摄像机,0.1表示近裁剪距离,10000表示远裁剪距离
camera = new Camera3D(0.1, 10000);
//创建视窗,所有对象都绑定到这个视窗中
camera.view = new View(stage.stageWidth, stage.stageHeight);
camera.rotationX = -120 * Math.PI / 180;
camera.y = -800;
camera.z = 400;
addChild(camera.view);//将摄像机观察的视窗加载进Sprite(显示列表)
rootContainer.addChild(camera);//将摄像机加载进容器
box = new Box(500, 500, 500, 5, 5, 5);
var material:FillMaterial = new FillMaterial(0xFF7700);
box.setMaterialToAllSurfaces(material);
rootContainer.addChild(box);
stage3D = stage.stage3Ds[0];//获取stage3D对象
//创建Content3D后,调用onContextCreate
stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreate);
stage3D.requestContext3D();
}
private function onContextCreate(e:Event):void {
//遍历在容器中所有资源
for each (var resource:Resource in rootContainer.getResources(true)) {
resource.upload(stage3D.context3D);//给所有资源增加content3D
}
stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(e:Event):void {
camera.rotationZ -= 0.01;
camera.render(stage3D);//渲染
}
}
}
如果能看见下面的图形,表示环境配置成功。