Alternativa3D教程1:Hello, Alternativa3D
来源:第三维度
编译:淡淡的回忆(王强 http://www.flas3d.com )
在开始本教程之前请先下载 Alternativa3D_8.27.0最新版本,支持Flash 11,
下载地址:
文件->ActionScript设置->库路径面板->点击【+】按钮添加指定 Alternativa3D 的swc路径。
在Flex中:
打开Flash Builder软件,新建一个ActionScript项目,选择“项目”-〉属性-〉ActionScript构建路径-〉选择“库路径”标签-〉点击“添加SWC”按钮->选择解压后得到的Alternativa3D.SWC-〉确定
在这个向导中,我们通过建立简单的3D立方体来一步步了解基于Alternativa3D的场景构建。
那么,我们在Flex Builder中新建一个ActionScript项目(或者你正在使用的其他软件),命名为HelloAlternativa3D,然后把Alternativa3D包中所有的SWC库都建立连接。我们的项目只包含一个文件,里面的代码如下:HelloAlternativa3D.as
- package {
- import alternativa.engine3d.controllers.CameraController;
- import alternativa.engine3d.core.Camera3D;
- import alternativa.engine3d.core.Object3D;
- import alternativa.engine3d.core.Scene3D;
- import alternativa.engine3d.display.View;
- import alternativa.engine3d.materials.WireMaterial;
- import alternativa.engine3d.primitives.Box;
- import alternativa.utils.FPS;
- import flash.display.Sprite;
- import flash.display.StageAlign;
- import flash.display.StageScaleMode;
- import flash.events.Event;
- [SWF(backgroundColor="#000000", frameRate="100")]
- public class HelloAlternativa3D extends Sprite {
- private var scene:Scene3D;
- private var view:View;
- private var camera:Camera3D;
- private var cameraController:CameraController;
- private var box:Box;
- public function HelloAlternativa3D() {
- addEventListener(Event.ADDED_TO_STAGE, init);
- }
- public function init(e:Event): void {
- removeEventListener(Event.ADDED_TO_STAGE, init);
- stage.scaleMode = StageScaleMode.NO_SCALE;
- stage.align = StageAlign.TOP_LEFT;
- // Creating scene——建立场景
- scene = new Scene3D();
- scene.root = new Object3D();
- box = new Box(100, 100, 100, 3, 3, 3);
- box.cloneMaterialToAllSurfaces(new WireMaterial(1, 0xFFFFFF));
- scene.root.addChild(box);
- // Adding camera and view——添加摄像机和视窗
- camera = new Camera3D();
- camera.x = 100;
- camera.y = -150;
- camera.z = 100;
- scene.root.addChild(camera);
- view = new View();
- addChild(view);
- view.camera = camera;
- // Connecting camera controller——与“摄像机控制器”建立连接
- cameraController = new CameraController(stage);
- cameraController.camera = camera;
- cameraController.setDefaultBindings();
- cameraController.checkCollisions = true;
- cameraController.collisionRadius = 20;
- cameraController.lookAt(box.coords);
- cameraController.controlsEnabled = true;
- // FPS display launch——FPS 运转显示
- FPS.init(stage);
- stage.addEventListener(Event.RESIZE, onResize);
- stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
- onResize(null);
- }
- private function onResize(e:Event):void {
- view.width = stage.stageWidth;
- view.height = stage.stageHeight;
- }
- private function onEnterFrame(e:Event):void {
- // User input processing——控制器的输入过程
- cameraController.processInput();
- // Scene calculating——场景计算
- scene.calculate();
- }
- }
- }
稍后我们浏览一下代码,现在试着拷贝代码到你的项目中,编译、运行它。
你可以通过鼠标和按键“WASD、Space和Shift”来控制摄像机,鼠标滚轮控制摄像机的视野。创建场景我们一行行的温习一下代码。首先我们建立了场景并且把一个原始的立方体加入其中:
- //建立场景对象,它是里面一切对象的容器。
- scene = new Scene3D();
- //为阶层式场景设置根对象,根对象的坐标系会成为场景全局坐标系。
- scene.root = new Object3D();
- // 建立原始立方体。
- box = new Box(100, 100, 100, 3, 3, 3);
- // 利用原始的边缘绘制材质。
- box.cloneMaterialToAllSurfaces(new WireMaterial(1, 0xFFFFFF));
- // 为场景添加这个原始对象。
- scene.root.addChild(box);
添加摄像机场景已经准备好了,我们想看一下结果。我们必须把摄像机放入场景中并且与视窗建立连接:
- //建立摄像机实例并设置坐标系。
- camera = new Camera3D();
- camera.x = 100;
- camera.y = -150;
- camera.z = 100;
- // 向场景中添加摄像机
- scene.root.addChild(camera);
- //建立视窗并与摄像机建立连接
- view = new View();
- addChild(view);
- view.camera = camera;
摄像机运动(不知道这样翻译是否恰当)我们使用引擎库里面的控制器,它是一个基于碰撞检测的控制摄像机基本移动、旋转的工具:
- 建立控制器并连接摄像机
- cameraController = new CameraController(stage);
- cameraController.camera = camera;
- // 设置默认控制键
- cameraController.setDefaultBindings();
- // 打开摄像机碰撞检测
- cameraController.checkCollisions = true;
- // 设置摄像机碰撞检测弧度
- cameraController.collisionRadius = 20;
- // 把摄像机定位到原始立方体上
- cameraController.lookAt(box.coords);
- // 摄像机激活控制
- cameraController.controlsEnabled = true;
最新的接触那么,场景已经就绪了,摄像机也设置好了,我们必须“按下按钮”。
- public function HelloAlternativa3D() {
- FPS.init(stage);
- addEventListener(Event.RESIZE, onResize);
- stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
- onResize(null);
- }
- private function onResize(e:Event):void {
- view.width = stage.stageWidth;
- view.height = stage.stageHeight;
- }
- private function onEnterFrame(e:Event):void {
- cameraController.processInput();
- scene.calculate();
- }
结论 我们刚才基本了解了场景的建立过程,而且显示在了屏幕上。在下一节向导中,我们会学习到Alternativa3D工作流中其他方面的知识。