English Sentence Loading...
英语句子加载中...
预览模式: 普通 | 列表

A3D更新为5.4.0

这次更新也一并更改了版本号的规则。

- Added View getFaceUnderPoint and getFacesUnderPoint methods, which let to get faces under set point
- Added WalkController and FlyController classes, which let to manage walk and fly modes
- Added EllipsoidCollider class, which implements ellipsoid-to-geometry collision detection
- Added Scene3D planeOffsetThreshold parameter — an offset for defining distances between point and splitter planes
- Added Set.createFromArray method, which creates set from array
- Added Matrix3D.axisAngleToMatrix method, which forms rotation matrix from axis-angle representation
- Added Matrix3D getRotations method, which gets rotation angles values
- Bug fixed in OBJLoader, which showed up during uploading model with textures but without UV-mapping
- Bug fixed in Mesh cloning, which showed up if surface has no material

增加了几个新的方法和类,如WalkController和FlyController类,对漫游方式的飞行和行走选择提供了支持。也修正了几个bug..

A3D 更新为5.03

此版本会有两个版本的alternativa3d ,FP9和FP10.

更新内容:

  • 增加了obj模型的读取支持
  • setmaterialtoallsurfaces方法更名为clonematerialtoallsurfaces
  • Loader3DS增加了关闭方法,手动地中断上载
  • 纹理参数作为只读
  • 错误修正- 在更新了UV-coordinates 后,没有进行重绘
  • 补充和修正了不正确的UV纹理贴图
  • 优化碰撞检测
  • 文档更新

  • http://help.alternativaplatform.com/en/client/alternativa3d_help.zip  这个是api的doc下载地址.

    alternativa3d更新为5.0.1

    试玩 Text 3D 文字

    用到的 Five3D 类,一个简单的测试效果。



    点击舞台会有字体变化

    发现一张很有意思的图



    哈哈,看出什么来了吗? A3D VS PV3D
    这一记飞腿是BSP?还是automatic UV?拭目以待吧。
    至少在目前的5.0API上还看不到有力的绝招。

    关于A3D目前的版本功能

    目前提供的5.0API还没有物体碰撞功能,暂时只有相机的碰撞。
    灯光和鼠标控制事件暂时也没有提供,我想下个版本应该会有这些基本的功能。
    也就是说,现在的版本还只适合做漫游,或是类CS的东西。

    貌似alternativa.engine3d.physics下面有物理碰撞的类。得有空的时候来摸了。

    A3D 4 外部贴图

    A3D的材质贴图很简单。几行代码就可以搞定。源码如下:

    主程序

    1. package cn.com.xy50 {
    2.   
    3.   /*
    4.      * A3D 贴图演示源码
    5.      * @author Johndai80o
    6.      * @datas 06/07/08
    7.      */
    8.  
    9.   import alternativa.engine3d.controllers.CameraController;
    10.   import alternativa.engine3d.core.Camera3D;
    11.   import alternativa.engine3d.core.Object3D;
    12.   import alternativa.engine3d.core.Scene3D;
    13.   import alternativa.engine3d.display.View;
    14.   import alternativa.utils.FPS;
    15.   import alternativa.engine3d.primitives.*;
    16.   import alternativa.engine3d.materials.TextureMaterial;    // 纹理材质类
    17.   import alternativa.types.Texture;         // 贴图需要使用的材质原型
    18.  
    19.  import flash.display.Sprite;
    20.   import flash.display.StageAlign;
    21.   import flash.display.StageScaleMode;
    22.   import flash.events.Event;
    23.   import flash.events.ProgressEvent;
    24.   import flash.display.Loader;
    25.   import flash.net.URLRequest;
    26.   import flash.display.Bitmap;
    27.   import flash.display.BitmapData;
    28.   import flash.text.TextField;
    29.   import flash.text.TextFormat;
    30.  
    31.  import org.aswing.AsWingManager;
    32.  
    33.  [SWF(backgroundColor="#000000", frameRate="100")]
    34.  
    35.  public class Test4 extends Sprite {
    36.  
    37.   private var scene:Scene3D;
    38.    private var view:View;
    39.    private var camera:Camera3D;
    40.    private var cameraController:CameraController;
    41.   
    42.    //private var loader:Loader;
    43.       private var bitmapData:BitmapData;
    44.       private var photoNumber:int=15;
    45.    private var textureList:Array=new Array();
    46.          private var label:TextField;
    47.       private var _Progressbar:progressPanel;
    48.     
    49.    public function Test4() {
    50.     AsWingManager.initAsStandard(this);
    51.     stage.scaleMode = StageScaleMode.NO_SCALE;
    52.     stage.align = StageAlign.TOP_LEFT;
    53.  
    54.    label = new TextField();
    55.  
    56.             var format:TextFormat = new TextFormat();
    57.              format.font = "Verdana";
    58.              format.color = 0xFFFFFF;
    59.              format.size = 18;
    60.              format.underline = true;
    61.              label.defaultTextFormat = format;
    62.              addChild(label);
    63.    
    64.     addEventListener(Event.ADDED_TO_STAGE, loadPhoto);
    65.     _Progressbar=progressPanel.getInstance();
    66.              _Progressbar.showBar(true);
    67.    }
    68.   
    69.    private function loadPhoto(e:Event):void
    70.    {
    71.     label.text=(15-photoNumber+1)+"/15";
    72.              var loader:Loader = new Loader();
    73.              loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
    74.              loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
    75.              var request:URLRequest = new URLRequest("photos/"+photoNumber+".jpg");
    76.              loader.load(request);
    77.    }
    78.   
    79.    private function completeHandler(e:Event):void
    80.    {
    81.     if (photoNumber>0){
    82.      var loader:Loader = Loader(e.target.loader);
    83.               var image:Bitmap = Bitmap(loader.content);
    84.  
    85.              bitmapData = image.bitmapData;
    86.               textureList.push(new Texture(bitmapData));    // 存入贴图材质进 Array
    87.               loadPhoto(new Event(Event.ADDED_TO_STAGE));
    88.      photoNumber--;
    89.     }else{
    90.      removeChild(label);
    91.      _Progressbar.hideBar();
    92.      init();
    93.     }
    94.    }
    95.   
    96.    private function progressHandler(e:ProgressEvent):void
    97.    {
    98.     _Progressbar._Progressbar.setValue(int(e.bytesLoaded/e.bytesTotal*100));
    99.    }
    100.   
    101.    private function init():void {
    102.  
    103.    removeEventListener(Event.ADDED_TO_STAGE, loadPhoto);
    104.    
    105.     // Create scene
    106.     scene = new Scene3D();
    107.     scene.root = new Object3D();
    108.  
    109.    for(var i:int=0;i<=15;i++){
    110.      var _plane:Plane=new Plane(400,300,1,1);    // 建立一个面片
    111.      _plane.setMaterialToAllSurfaces(new TextureMaterial(textureList[i],1,false,false))// 进行贴图设置 -- 参数:材质,贴图透明度,是否重复贴图,贴图平滑度
    112.      _plane.x=Math.random()*4000-1000;
    113.      _plane.z=Math.random()*4000;
    114.      scene.root.addChild(_plane);  
    115.     }
    116.    
    117.     // Add camera and view
    118.     camera = new Camera3D();
    119.     camera.x = 0;
    120.     camera.y = 0;
    121.     camera.z = 0;
    122.     scene.root.addChild(camera);
    123.    
    124.     view = new View();
    125.     addChild(view);
    126.     view.camera = camera;
    127.  
    128.    // Add camera controller
    129.     cameraController = new CameraController(stage);
    130.     cameraController.camera = camera;
    131.     cameraController.setDefaultBindings();
    132.     cameraController.speed = 1000;
    133.     cameraController.controlsEnabled = true;
    134.    
    135.     // FPS counter init
    136.     FPS.init(stage);
    137.  
    138.    stage.addEventListener(Event.RESIZE, onResize);
    139.     stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
    140.     onResize(null);
    141.    }
    142.  
    143.   private function onResize(e:Event):void {
    144.     view.width = stage.stageWidth;
    145.     view.height = stage.stageHeight;
    146.    }
    147.   
    148.    private function onEnterFrame(e:Event):void {
    149.     cameraController.processInput();
    150.     scene.calculate();
    151.    }
    152.   }
    153.  }


    -------------------------------  端午节的分割线 ---------------------------------

    Bar:

    1. package cn.com.xy50 {
    2.  
    3.   import org.aswing.*;
    4.   import org.aswing.geom.*;
    5.   import flash.events.Event;
    6.  
    7.  /**
    8.    * @author djwolf
    9.    */
    10.   public class progressPanel extends JWindow {
    11.    private var stageWidth:int=550;
    12.    private var stageHeight:int=400;
    13.    private const bgWidth:int=200;
    14.    private const bgHeight:int=12;
    15.    private var  progressPoint:int;
    16.    private static var _instance:progressPanel;
    17.    public var _Progressbar:JProgressBar;
    18.   
    19.   
    20.    public function progressPanel() {
    21.     var _Container:Container=this.getContentPane();
    22.     _Progressbar = new JProgressBar();
    23.        _Progressbar.setSizeWH(bgWidth,bgHeight);
    24.        _Progressbar.setLocation(new IntPoint(0,0));
    25.        _Progressbar.setValue(0);
    26.        _Progressbar.setMinimum(0);
    27.        _Progressbar.setMaximum(100);
    28.  
    29.       var _fl:EmptyLayout=new EmptyLayout();
    30.           var _jp:JPanel=new JPanel(_fl)// create panel
    31.        _Container.append(_jp);
    32.        _jp.append(_Progressbar);
    33.        this.setSizeWH(bgWidth, bgHeight);
    34.              this.setLocationXY(stageWidth/2-bgWidth/2,stageHeight/2-bgHeight/2-40);
    35.              // _Progressbar.setIndeterminate(true);
    36.          }
    37.    private function efHandler(evt:Event):void
    38.    {
    39.     progressPoint++;
    40.     if (progressPoint==100)
    41.     {
    42.      progressPoint=0;
    43.     }
    44.        _Progressbar.setValue(progressPoint);
    45.    }
    46.    public static function getInstance():progressPanel
    47.    {
    48.     if (_instance == null)
    49.     {
    50.      _instance=new progressPanel();
    51.     }
    52.     return _instance;
    53.    }
    54.    public function showBar(haveValue:Boolean):void
    55.    {
    56.     if (!haveValue)
    57.              {
    58.         progressPoint=0;
    59.         _Progressbar.setValue(progressPoint)
    60.        _Progressbar.addEventListener(Event.ENTER_FRAME, efHandler);
    61.        }
    62.     this.show();
    63.    }
    64.    public function hideBar():void
    65.    {
    66.     progressPoint=0;; 
    67.     _Progressbar.removeEventListener(Event.ENTER_FRAME, efHandler);
    68.     this.hide();
    69.    }
    70.   }
    71.  }


    -------------------------- : ) ------------------------------

    测试地址:http://www.xy50.com.cn/myblog/swfs/test4.swf

    A3D 3 加载3DS模型

    加载3ds文件.依然转成中文,因为用网站翻译,所以可能不太准确.主要注释在加载3d文件部分.

    1. package cn.com.xy50{
    2.  import alternativa.engine3d.controllers.CameraController;
    3.  import alternativa.engine3d.core.Camera3D;
    4.  import alternativa.engine3d.core.Mesh;
    5.  import alternativa.engine3d.core.Object3D;
    6.  import alternativa.engine3d.core.Scene3D;
    7.  import alternativa.engine3d.display.View;
    8.  import alternativa.engine3d.loaders.Loader3DS;
    9.  import alternativa.engine3d.materials.TextureMaterialPrecision;
    10.  import alternativa.utils.FPS;
    11.  import alternativa.utils.MeshUtils;
    12.  
    13.  import flash.display.Sprite;
    14.  import flash.display.StageAlign;
    15.  import flash.display.StageScaleMode;
    16.  import flash.events.Event;
    17.  
    18.  [SWF(backgroundColor="#000000", frameRate="100")]
    19.  
    20.  public class Test3 extends Sprite {
    21.  
    22.  private var scene:Scene3D;
    23.  private var view:View;
    24.  private var camera:Camera3D;
    25.  private var cameraController:CameraController;
    26.  private var loader:Loader3DS;
    27.  
    28.  /**
    29. *
    30. */
    31.  public function Test3() {
    32.  stage.scaleMode = StageScaleMode.NO_SCALE;
    33.  stage.align = StageAlign.TOP_LEFT;
    34.  
    35.  startLoading();
    36.  initScene();
    37.  initListeners();
    38.  
    39.  onResize(null);
    40.  }
    41.  
    42.  /**
    43. * Создание сцены и камеры.
    44. */
    45.  private function initScene():void {
    46.  scene = new Scene3D();
    47.  scene.root = new Object3D();
    48.  camera = new Camera3D();
    49.  camera.x = 0;
    50.  camera.y = -400;
    51.  camera.z = 0;
    52.  scene.root.addChild(camera);
    53.  view = new View();
    54.  addChild(view);
    55.  view.camera = camera;
    56.  
    57.  cameraController = new CameraController(stage);
    58.  cameraController.camera = camera;
    59.  cameraController.setDefaultBindings();
    60.  cameraController.checkCollisions = true;
    61.  cameraController.collisionRadius = 20;
    62.  cameraController.controlsEnabled = true;
    63.  cameraController.speed = 500;
    64.  
    65.  
    66.  FPS.init(stage);
    67.  }
    68.  
    69.  /**
    70. *
    71. */
    72.  private function onResize(e:Event):void {
    73.  view.width = stage.stageWidth;
    74.  view.height = stage.stageHeight;
    75.  }
    76.  
    77.  /**
    78. *
    79. */
    80.  private function onEnterFrame(e:Event):void {
    81.  cameraController.processInput();
    82.  scene.calculate();
    83.  }
    84.  
    85.  /**
    86. *
    87. */
    88.  private function initListeners():void {
    89.  stage.addEventListener(Event.RESIZE, onResize);
    90.  stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
    91.  }
    92.  
    93.  /**
    94. * 加载 3DS 格式的三维模型.
    95. */
    96.  private function startLoading():void {
    97.  loader = new Loader3DS(); // 3ds 加载类,继承自 EventDispatcher
    98.  loader.smooth = true; // 材质的平滑模式
    99.  loader.precision = TextureMaterialPrecision.HIGH; // 透视精确度,这里设置为高,可选值"BEST,HIGH,LOW,MEDIUM,NONE,VERY_HIGH,VERY_LOW"
    100.  loader.load("assets/me/djwolf.3ds"); // 加载模型
    101.  loader.addEventListener(Event.COMPLETE, onLoadingComplete); // 监听加载事件
    102.  }
    103.  
    104.  /**
    105. *
    106. */
    107.  private function onLoadingComplete(e:Event):void {
    108.  for (var o:* in loader.content.children) {
    109.  var object:Object3D = o;
    110.  cameraController.lookAt(object.coords);
    111.  weldVerticesAndFaces(object);
    112.  scene.root.addChild(object);
    113.  }
    114.  }
    115.  
    116.  /**
    117. * Объединение вершин и граней объекта.
    118. */
    119.  private function weldVerticesAndFaces(object:Object3D):void {
    120.  if (object is Mesh) {
    121.  MeshUtils.autoWeldVertices(Mesh(object), 0.01); // 连接网格物体的顶点有相同的坐标。
    122.  MeshUtils.autoWeldFaces(Mesh(object), 0.01, 0.001);
    123.  }
    124.  // Запуск процедуры для детей объекта
    125.  for (var key:* in object.children) {
    126.  weldVerticesAndFaces(key);
    127.  }
    128.  }
    129.  }
    130.  }




    http://boxstr.com/files/2287538_lhiur/tt.rar
    此连接包含code和3ds文件,建议编译环境Flex+FDT。