dairongle

 

 

问题:如果导入一个3dsmax的模型?

 

首先先装上一个3dsmax的插件,这个插件的作用是将建模的3dsmax文件导出一种一种asf的文件类型,

这种类型能够被sandy识别,能够重写绘制到场景中去;

当中有两种方式导入:一种是导出asf格式,一种导出ase 代码

两种方式都有特点:

 

 

 

主要使用的类:

 

使用

 

 

  sandy.parser Parser classes for importing 3D structures

 

 

 

导入3D结构

 

 

 

  1. package 
  2. {
  3.     import flash.display.Sprite;
  4.     import flash.events.*;
  5.     import sandy.core.Scene3D;
  6.     import sandy.core.data.*;
  7.     import sandy.core.scenegraph.*;
  8.     import sandy.materials.*;
  9.     import sandy.materials.attributes.*;
  10.     import sandy.primitive.*;
  11.     import sandy.parser.*;
  12.     public class My3D extends Sprite
  13.     {
  14.         private var scene:Scene3D;
  15.         private var camera:Camera3D;
  16.         private var pot:Shape3D;
  17.         public function My3D()
  18.         {
  19.             var parser:IParser = Parser.create("asset/teieraASE.ASE",Parser.ASE );//导入ase格式,让它在flash里面重写绘画
  20.             parser.addEventListener( ParserEvent.FAIL, onError );//模型导入失败监听
  21.             parser.addEventListener( ParserEvent.INIT, createScene );//初始化监听事件
  22.             parser.parse();
  23.         }
  24.         private function onError( pEvt:ParserEvent ):void
  25.         {
  26.             trace("加载文件错误");
  27.         }
  28.         private function createScene(p_eEvent:ParserEvent ):void
  29.         {
  30.             camera = new Camera3D( 500, 300 );//建立摄影机
  31.             camera.y = 30;
  32.             camera.z = -200;
  33.             var g:Group = Group( p_eEvent.group);
  34.             pot = g.children[0] as Shape3D;//将模型转为shape3d 类型
  35.             pot.x = 0;
  36.             var materialAttr:MaterialAttributes = new MaterialAttributes(new LightAttributes( true, 0.2 ) );
  37.             var material:Material = new ColorMaterial( 0xE0F87E, 0.9, materialAttr);//添加颜色材质和和光线
  38.             material.lightingEnable = true;//开启光线
  39.             var app:Appearance = new Appearance( material);//创建一个物体表面
  40.             pot.appearance = app;
  41.             scene = new Scene3D( "scene", this, camera, g );
  42.             addEventListener( Event.ENTER_FRAME, enterFrameHandler );
  43.         }
  44.         private function enterFrameHandler( event : Event ):void
  45.         {
  46.             pot.pan +=3;
  47.             scene.render();
  48.         }
  49.     }
  50. }

 

 

 

代码解析:

 

  1. var parser:IParser = Parser.create("asset/teieraASE.ASE",Parser.ASE );//导入ase格式,让它在flash里面重写绘画
  2.             parser.addEventListener( ParserEvent.FAIL, onError );//模型导入失败监听
  3.             parser.addEventListener( ParserEvent.INIT, createScene );//初始化监听事件
  4.             parser.parse();//加载文件

 

导入3dmax导出的ase代码后,flash 要导入模型,其实是重写解析ase里面的数据,重写通过api函数重写绘制出模型到flash 舞台中去。

 

sandy引擎提供了一个接口说明:

 

Description
  IParser The IParser interface defines the interface that parser classes such as ColladaParser must implement.

 

 

 

导入后,把它转为Shape3D 对象,pot = g.children[0] as Shape3D;//将模型转为shape3d 类型

 

 

 

然后定义材质,然后渲染场景。

 

 

 

 

 

扩展:定义材质,还可以加上一些纹理贴图;效果会更加好

 

分类:

技术点:

相关文章: