我的订单|我的收藏|我的商城|帮助中心|返回首页
虚拟现实新闻>VR>行业资讯>培训教程

Alternativa3D教程1:Hello, Alternativa3D

文章来源:第三维度 作者: 发布时间:2012年03月15日 点击数: 字号:

    来源:第三维度
    编译:淡淡的回忆(王强 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

  1. package {
  2.         import alternativa.engine3d.controllers.CameraController;
  3.         import alternativa.engine3d.core.Camera3D;
  4.         import alternativa.engine3d.core.Object3D;
  5.         import alternativa.engine3d.core.Scene3D;
  6.         import alternativa.engine3d.display.View;
  7.         import alternativa.engine3d.materials.WireMaterial;
  8.         import alternativa.engine3d.primitives.Box;
  9.         import alternativa.utils.FPS;

  10.         import flash.display.Sprite;
  11.         import flash.display.StageAlign;
  12.         import flash.display.StageScaleMode;
  13.         import flash.events.Event;

  14.         [SWF(backgroundColor="#000000", frameRate="100")]

  15.         public class HelloAlternativa3D extends Sprite        {

  16.                 private var scene:Scene3D;
  17.                 private var view:View;
  18.                 private var camera:Camera3D;
  19.                 private var cameraController:CameraController;
  20.                 private var box:Box;

  21.                 public function HelloAlternativa3D()        {
  22.                         addEventListener(Event.ADDED_TO_STAGE, init);
  23.                 }

  24.                 public function init(e:Event): void {
  25.                         removeEventListener(Event.ADDED_TO_STAGE, init);

  26.                         stage.scaleMode = StageScaleMode.NO_SCALE;
  27.                         stage.align = StageAlign.TOP_LEFT;

  28.                         // Creating scene——建立场景
  29.                         scene = new Scene3D();
  30.                         scene.root = new Object3D();
  31.                         box = new Box(100, 100, 100, 3, 3, 3);
  32.                         box.cloneMaterialToAllSurfaces(new WireMaterial(1, 0xFFFFFF));
  33.                         scene.root.addChild(box);

  34.                         // Adding camera and view——添加摄像机和视窗
  35.                         camera = new Camera3D();
  36.                         camera.x = 100;
  37.                         camera.y = -150;
  38.                         camera.z = 100;
  39.                         scene.root.addChild(camera);

  40.                         view = new View();
  41.                         addChild(view);
  42.                         view.camera = camera;

  43.                         // Connecting camera controller——与“摄像机控制器”建立连接
  44.                         cameraController = new CameraController(stage);
  45.                         cameraController.camera = camera;
  46.                         cameraController.setDefaultBindings();
  47.                         cameraController.checkCollisions = true;
  48.                         cameraController.collisionRadius = 20;
  49.                         cameraController.lookAt(box.coords);
  50.                         cameraController.controlsEnabled = true;

  51.                         // FPS display launch——FPS 运转显示
  52.                         FPS.init(stage);

  53.                         stage.addEventListener(Event.RESIZE, onResize);
  54.                         stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
  55.                         onResize(null);
  56.                 }

  57.                 private function onResize(e:Event):void {
  58.                         view.width = stage.stageWidth;
  59.                         view.height = stage.stageHeight;
  60.                 }

  61.                 private function onEnterFrame(e:Event):void {
  62.                         // User input processing——控制器的输入过程
  63.                         cameraController.processInput();
  64.                         // Scene calculating——场景计算
  65.                         scene.calculate();
  66.                 }
  67.         }
  68. }

    稍后我们浏览一下代码,现在试着拷贝代码到你的项目中,编译、运行它。

    你可以通过鼠标和按键“WASD、Space和Shift”来控制摄像机,鼠标滚轮控制摄像机的视野。创建场景我们一行行的温习一下代码。首先我们建立了场景并且把一个原始的立方体加入其中: 

  1. //建立场景对象,它是里面一切对象的容器。
  2. scene = new Scene3D();
  3. //为阶层式场景设置根对象,根对象的坐标系会成为场景全局坐标系。
  4. scene.root = new Object3D();
  5. // 建立原始立方体。
  6. box = new Box(100, 100, 100, 3, 3, 3);
  7. // 利用原始的边缘绘制材质。
  8. box.cloneMaterialToAllSurfaces(new WireMaterial(1, 0xFFFFFF));
  9. // 为场景添加这个原始对象。
  10. scene.root.addChild(box);

    添加摄像机场景已经准备好了,我们想看一下结果。我们必须把摄像机放入场景中并且与视窗建立连接:

  1. //建立摄像机实例并设置坐标系。
  2. camera = new Camera3D();
  3. camera.x = 100;
  4. camera.y = -150;
  5. camera.z = 100;
  6. // 向场景中添加摄像机
  7. scene.root.addChild(camera);
  8. //建立视窗并与摄像机建立连接
  9. view = new View();
  10. addChild(view);
  11. view.camera = camera;

    摄像机运动(不知道这样翻译是否恰当)我们使用引擎库里面的控制器,它是一个基于碰撞检测的控制摄像机基本移动、旋转的工具:

  1. 建立控制器并连接摄像机
  2. cameraController = new CameraController(stage);
  3. cameraController.camera = camera;
  4. // 设置默认控制键
  5. cameraController.setDefaultBindings();
  6. // 打开摄像机碰撞检测
  7. cameraController.checkCollisions = true;
  8. // 设置摄像机碰撞检测弧度
  9. cameraController.collisionRadius = 20;
  10. // 把摄像机定位到原始立方体上
  11. cameraController.lookAt(box.coords);
  12. // 摄像机激活控制
  13. cameraController.controlsEnabled = true;

    最新的接触那么,场景已经就绪了,摄像机也设置好了,我们必须“按下按钮”。

  1. public function HelloAlternativa3D() {
  2.         FPS.init(stage);
  3.         addEventListener(Event.RESIZE, onResize);
  4.         stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
  5.         onResize(null);
  6. }

  7. private function onResize(e:Event):void {
  8.         view.width = stage.stageWidth;
  9.         view.height = stage.stageHeight;
  10. }

  11. private function onEnterFrame(e:Event):void {
  12.         cameraController.processInput();
  13.         scene.calculate();
  14. }

    结论       我们刚才基本了解了场景的建立过程,而且显示在了屏幕上。在下一节向导中,我们会学习到Alternativa3D工作流中其他方面的知识。

  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料