flab3dAnimation
public class ModelViewer
接口ModelViewer


《Flab3d模型展示开发包》使用非常简单,即使是新人as3开发者,也能10分钟以内学会使用,制作出高手需要几周才能完成的专业应用。 模型浏览一直是除了"全景"个人用户和公司需求最高的一个应用。《模型浏览开发包》也沿袭开发包系列超易用的特色,有这个开发包的人就等于有能力完成所有的模型浏览项目。
虽然叫"模型浏览",但它能完成的远不止简单的浏览简单的模型,和三维产品展示(注:此为真的模型即时渲染,并非简单的产品360度拍照)。
有创意的使用它,制作一些有趣的三维游戏,网站三维应用,三维剧场都完全不在话下。
版本注意:为满足不同用户的需求,分两个版本发行《模型浏览开发包 静态版》和《模型浏览开发包 动画版》, 购买静态版的用户可以之后升级至动画版。
本开发文档为《模型浏览开发包 动画版》的文档

功能:
☆ 对模型内部的各种操作; 任意更换模型贴图; 完全胜任"人物变装效果"的制作。
☆ 3dsMax9,2009,2010直接导出研究所内部专用模型格式(.flb)插件,用户再也不用为乱七八糟的模型格式导出和读取发愁。
☆ 自动缓冲模型;贴图读取
☆ 超便捷的热点加入
☆ 读取外部XML文件切换不同模型和默认标记
☆ 各种便捷摄像机操作,操作手感极佳
☆ 对模型任意面拍照,比如:连续拍照生成8面位图
☆ 运行效率最优化,3500面数以下的模型不卡; 用户可调整效率,万面以上的大场景也能运行。
☆ 购买用户享受永久免费升级(静态版升级动画版除外),讨论区的本开发包的反馈和意见会最优先处理


声明如下可以建立模型浏览器。 代码范例如下:
var mv:ModelViewer = new ModelViewer("./","asset/address_model.xml",640,480);
您通常需要调用的类如下:
import flab3dAnimation.ModelViewer;
import flab3dAnimation.event.Flab3dEvent;
.
.
.
等等

所有XML文件和模型都在asset包里。请参考我们assets包里面的范例文件。


三维空间xyz轴顺序需要注意的地方:
模型浏览开发包的XYZ轴方向,和3dsMax软件相同。X正方向为向屏幕右, Y的正方向为朝屏幕里, Z的正方向为朝屏幕上。
如果需要确认轴方向,可以用mv.allowAxis(true) 方法,开启一个轴方向图标,红色为X正方向,绿色为Y正方向, 蓝色为Z 正方向。 详细用法请参考下面allowAxis()方法。
另外, 请注意开发包中出现的所有“摄像机Z方向” ,是指摄像机拉近拉远的方向。

制作模型需要注意的地方:
◆物体坐标清零:
物体导出前或物体骨骼蒙皮以前,都应该归零一次所有可见模型。这是为了避免导出模型出错。具体操作如下: 全选所有需要归零的可见模型(主要模型,骨骼和辅助不用选),点击3dmax右边工具栏最后一个页面(有个小榔头图标),选择Reset XForm按钮,下面点击一次Reset Selected。这时所有物体都多了一个XForm修改器,这时右键点击可见模型,选择Convert To:Convert To Editable Poly。 这时再导出模型,或进行骨骼蒙皮,出错几率就会小很多。
◆和上一种方法解决同一个问题,如果长期建模中留下太多冗余和错误信息,在模型浏览开发包不能正常解析。这时建议建模后导出导入一次obj类型文件(导出设置为polygon),这样可以把多余和错误的模型信息清除掉。 绑定骨骼前,强烈建议请进行一次清除。
◆max中模型要干净,不要使用多贴图材质, 每个材质球只贴一张图。使用不同材质球的物体要切分开来,不要合并。
◆模型总面数不要超过5000面,同时场景中出现的面数不要超过2000面。
◆不使用“动态抗破面”功能时,美工上要注意防止破面,地面面数间隔不要太大。不同物体相交处,面数要相对增多,尽可能防止破面。 注意!:使用26日更新的“动态抗破面”则不遵循此原则,而应该保持面越少越好。
◆模型点太多时,max导出插件会卡住,等待一会儿直到导出成功。1.5万面以上的模型不推荐导出。

◆使用抗破面功能时,模型需注意的要点:模型面数少于2000面; 相交面竟可能少,模型型与模型之间留出一点小距离最佳; 模型简单整洁,尽量避免严重凹陷处。不同贴图的模型分开成多个物体。



骨骼动画需要注意的地方:
◆需要作为bone的物体,需要在Bone Tool中 设置 Bone on
◆物体和骨骼名字不要有重复
◆应在第0帧上的所有骨骼设置一个关键帧,第0帧上关键帧位置必须为Bind位置,即刚添加Skin后模型和骨骼都没有被移动位置。
◆如果动画的旋转位置解析不正确,在根骨骼的相同位置任意设置2个关键帧即可。
◆模型在skin前,建议要reset xform一次。
◆导出flb文件时,时间轴放在第0帧上。
◆一个三维物体或骨骼,不要对应多个Skin。 但是一个Skin可以包含多个三维物体和骨骼。
◆您的动画帧率(FPS),制作的时候是多少每秒多少帧,在setupAnimation时就应该写多少。两者完全对应,才能正确指示目前播放的帧号。
◆暂时不支持IK动画解析,所以动画制作时使用的IK关键帧,都要手动在相关骨骼上set Key一次。
◆暂时没有对Biped工具的解析进行专门制作和测试,制作时尽量不要使用Biped,应使用3dmax自带的bone工具。


Flab3d模型导出插件安装方法
Flab模型导出插件的安装很简单。直接把对应您max版本的flab3dExporterXXXX.dle文件复制到您的3dsmax安装目录中的plugins文件包中,重启3dsmax软件即可。
这时,您的导出目录中应该有 .FLB格式的文件可以输出。输出后即可在模型浏览开发包中使用。
注意max版本号和插件对应。目前对应的版本有max9, max2009, max2010。对应版本和插件功能目前还在增加中,如果您需要更多的版本对应,您可以联系我们的客服qq:1226257961



公共方法
  方法Defined by
  
ModelViewer(_rootPath:String="./", _xmlAddress:* ,_width:int=640, _height:int=480, _getCorrectZ:Boolean=false, _getColor:int=0x292929 , _getFontColor:int=0xffffff, _getFontSize:int=14)
建立一个模型浏览器。 全景球需要使用四面鱼眼图片作为贴图。
第2个参数可以为外部xml地址,也可以为as3内部的xml属性数据。 第5个参数为抗破面,使用此功能时,请严格注意模型质量达到我们上面的要求。 后3个参数可以设置一下xml默认标签的颜色,字体颜色和字体大小
代码范例如下:
var mv:ModelViewer = new ModelViewer("./","asset/address_model.xml",640,480,false);
ModelViewer
  
addModel(_getModelAddress:String, _getId:int, _getMapPath:String = "", _getY:Number=100, _getHorizontal:Number=45,_getDistance:Number=200,_getMinZ:Number=40):void
直接给场景中动态添加一套模型,不受外部xml文件限制。 FIRST_COMPLETE事件后调用。
ModelViewer
  
removeModelById(_getId:int):void
直接按id删除一套模型,id为外部xml文件,或addModel方法中给出的id,必须要当前场景中有此id的模型,否则删除报错。 FIRST_COMPLETE事件后调用。
ModelViewer
  
updateModelByPid(_getPid:int=0):void
按外部xml文件设置的pid来更换模型,用来控制要切换哪组模型。第一套模型pid应为0。 如果超过XML里设置的模型pid最大号,则停留在最后的一套模型。 FIRST_COMPLETE事件后调用。
ModelViewer
  
切换下一组模型。 FIRST_COMPLETE事件后调用。
ModelViewer
  
切换上一组模型。 FIRST_COMPLETE事件后调用。
ModelViewer
  
addDynamicTag(_getSprite:Sprite, _getPid:int, _getX:Number = 0, _getY:Number = 0, _getZ:Number = 0):void
动态的添加热点标签,可以添加任何sprite类型的元件作为热点标签,相当有用的方法。 xml外部默认的简单标签达不到自己项目要求时推荐使用。 FIRST_COMPLETE事件后调用。
ModelViewer
  
setObj3DPosition(_getObjName:String, tx:Number=0, ty:Number=0, tz:Number=0):void
设置模型组里某个模型的三维空间XYZ轴的位置,第一个参数为3dsmax里的模型名。 (如不清楚模型名可以用方法showObj3DName()获取当前模型组里所有模型的名字,详细见下面showObj3DName文档) FIRST_COMPLETE事件后调用。
ModelViewer
  
setObj3DRotation(_getObjName:String, rx:Number=0, ry:Number=0, rz:Number=0):void
设置模型组里某个模型的三维空间XYZ轴的旋转,单位为“角度”,第一个参数为3dsmax里的模型名。 (如不清楚模型名可以用方法showObj3DName()获取当前模型组里所有模型的名字,详细见下面showObj3DName文档) FIRST_COMPLETE事件后调用。
ModelViewer
  
setObj3DScale(_getObjName:String, sx:Number=1, sy:Number=1,sz:Number=1):void
设置模型组里某个模型的三维空间XYZ轴的缩放,第一个参数为3dsmax里的模型名。 (如不清楚模型名可以用方法showObj3DName()获取当前模型组里所有模型的名字,详细见下面showObj3DName文档) FIRST_COMPLETE事件后调用。
ModelViewer
  
getObj3DPosition(_getObjName:String):Array
获取模型组里某个模型的三维空间XYZ轴的位置。 返回的是一个数组 [0]为X轴的位置,[1]为Y轴的位置,[2]为Z轴的位置。 FIRST_COMPLETE事件后调用。
ModelViewer
  
getObj3DRotation(_getObjName:String):Array
获取模型组里某个模型的三维空间XYZ轴的旋转。 返回的是一个数组 [0]为X轴的旋转度数,[1]为Y轴的旋转度数,[2]为Z轴的旋转度数。 FIRST_COMPLETE事件后调用。
ModelViewer
  
getObj3DScale(_getObjName:String):Array
获取模型组里某个模型的三维空间XYZ轴的缩放。 返回的是一个数组 [0]为X轴的缩放,[1]为Y轴的缩放,[2]为Z轴的缩放。 FIRST_COMPLETE事件后调用。
ModelViewer
  
setObj3DMaterial(_getObjName:String, _getMap:*):void
动态更换本模型组某模型的贴图。第二个参数可以为贴图地址String,也可以为读取好的贴图信息BitmapData。 贴图图片接受jpg,png,bmp。 FIRST_COMPLETE事件后调用。
ModelViewer
  
setObj3DBothSide(_getObjName:String, _getBoolean:Boolean = false):void
设置本模型组中某模型,是否为双面渲染。 当您贴图背面的显示很重要时可以设置为true,但运行效率会下降。 FIRST_COMPLETE事件后调用。
ModelViewer
  
setObj3DVisible(_getObjName:String, _getBoolean:Boolean = true):void
设置本模型组中某模型,是否可见。 可以结合使用此方法制作“人物换装”或“组装机械”等功能。 FIRST_COMPLETE事件后调用。
ModelViewer
  
updateVerticalRange(_getMin:Number = 0, _getMax:Number = 25):void
限制摄像机竖方向的范围,单位为“度数”,范围为-90到90. FIRST_COMPLETE事件后调用。
ModelViewer
  
updateHorizontalRange(_getLeft:Number = 0, _getRight:Number = 360):void
限制摄像机横方向的范围,单位为“度数”。如果2个参数之差大于等于360度,则表示没有范围限制。 FIRST_COMPLETE事件后调用。
ModelViewer
  
updateZRange(_getNear:Number = 50, _getFar:Number = 300):void
限制摄像机远近Z方向可伸缩的范围,范围为负无限到正无限。 FIRST_COMPLETE事件后调用。
ModelViewer
  
updateZClipping(_getMinZ:Number = -100000, _getMaxZ:Number = 100000):void
设置最远最近能显示的区域,超出这个区域,模型就会被切断不显示。这个用在超大场景提高效率上. FIRST_COMPLETE事件后调用。
ModelViewer
  
updateZoom(_getZoom:Number = 100):void
设置摄像机的焦距,默认为100。焦距越大拍摄范围越大,但物体越扭曲。 FIRST_COMPLETE事件后调用。
ModelViewer
  
autoRotate(_getAngel:Number = 1, _getAxis:String = "z"):void
摄像机自动绕轴旋转。目前只能绕Z轴,也就是竖轴旋转。第一个角度参数设为0,就可终止自动旋转。 FIRST_COMPLETE事件后调用。
ModelViewer
  
setCameraPosition(_getHorizontal:Number, _getVertical:Number, _getDistance:Number):void
直接设置摄像机位置, 3个参数分别为横方向度数,竖方向度数和离目标的远近。
ModelViewer
  
获取摄像机位置。 返回一个数组,[0]为横方向度数,[1]为竖方向度数,[2]为离目标的远近. FIRST_COMPLETE事件后调用。
ModelViewer
  
setCameraTarget(_getObjName:String, offsetX:Number, offsetY:Number, offsetZ:Number):void
设置摄像机对准的模型,可以动态的切换摄像机对准的模型。第一参数为模型名,后3个参数为以对准模型为中心的XYZ偏移。用户可以通过设置达到对某模型特定部分的观看,也可以制作“镜头切换”效果. FIRST_COMPLETE事件后调用。
ModelViewer
  
setCameraInertia(_getInertia:Number):void
设置摄像机拖动时的惯性,建议0-10. 数值越大镜头滑动越久 FIRST_COMPLETE事件后调用。
ModelViewer
  
cameraMovingMode(_isMode:Boolean = false):void
切换为漫游镜头,切换为漫游镜头后,以下几个方法才可用:
漫游摄像机前后移动 cameraMoveForwardBackward(),
漫游摄像机左右移动 cameraMoveLeftRight(),
漫游摄像机上下移动 cameraMoveUpDown(),
漫游摄像机水平方向转动 cameraRotateHorizontal(),
漫游摄像机垂直方向转动 cameraRotateVertical()


cameraMovingMode设置为false,则变回普通的展示摄像机。 FIRST_COMPLETE事件后调用。
ModelViewer
  
setCameraInertia(_getInertia:Number):void
设置摄像机拖动时的惯性,建议0-10. 数值越大镜头滑动越久 FIRST_COMPLETE事件后调用。
ModelViewer
  
setCameraInertia(_getInertia:Number):void
设置摄像机拖动时的惯性,建议0-10. 数值越大镜头滑动越久 FIRST_COMPLETE事件后调用。
ModelViewer
  
showObj3DName():Array
查看当前模型组中所有模型的名字,返回一个Array,包含所有模型名。 每次MODEL_CHANGE事件后调用。
ModelViewer
  
setRenderGap(_getGap:int=0):void
设置渲染间隔,比如2帧渲染1次。用户可以按自己需求处理效率和效果的平衡,间隔越小,画面越流畅但CPU消耗越大;间隔越大越不流畅但CPU消耗越小。FIRST_COMPLETE事件后再调用。
ModelViewer
  
allowRender(_getBoolean:Boolean = false):void
是否允许渲染,用户可自己控制是否暂时停止渲染。 注:当模型浏览器内核需要强制渲染时,此方法无效。 FIRST_COMPLETE事件后再调用。
ModelViewer
  
allowWheel(_getBoolean:Boolean = false):void
是否允许用户使用鼠标滚轮对摄像机拉远拉近。 FIRST_COMPLETE事件后再调用。
ModelViewer
  
allowAxis(_getBoolean:Boolean):void
是否显示xyz轴辅助标志, 制作中参考轴方向用,红色为X正方向,绿色为Y正方向, 蓝色为Z 正方向。 FIRST_COMPLETE事件后再调用。
ModelViewer
  
takeShots(_getShotArray:Array=null, _getScale:Number=1):void
把模型拍摄成位图,并且返回拍摄后的bitmap数组。参数1是一个Vector3D的数组,包含所有需要拍摄的摄像机位置,Vector3D的x,y,z分别为摄像机横方向度数,竖方向度数,和离物体距离远近。如果不设置的话,则是研究所自定的8方位拍摄。 第二参数为保存bitmap的缩放大小0-1。 MODEL_CHANGE事件后调用。
ModelViewer
  
updateIndicator(_getSprite:Sprite, _getXOffset:int=0, _getYOffset:int=0):void
用户可以用自制的读取进度条,任意Sprite都可以作为进度条图片。和事件Flab3dEvent.LOAD_PROCESS配合,可以制作任何进度条功能。
ModelViewer
  
updateBackground(_getSprite:Sprite):void
更换背景图,使用sprite。
ModelViewer
  
setupAnimation(_getMeshName:String, _getFPS:int=25,_getGap:int=0):void
给某个模型设置动画,这里使用同一蒙皮上任意模型的名字均可,都指向同一个蒙皮动画,不用重复设置。 帧率最好和制作动画时帧率设置相同。 必须使用此方法设置动画后,后面几个方法才有效。
ModelViewer
  
play(isLoop:Boolean=true):void
播放动画。可设置播完后是否自动重播
ModelViewer
  
stop():void
停止播放
ModelViewer
  
gotoAndPlay(_getFrame:int=0, isLoop:Boolean = true)
flash经典方法名,用过flash的朋友都知道。 直接从多少帧开始播放。
ModelViewer
  
gotoAndStop(_getFrame:int=0):void
flash经典方法名,用过flash的朋友都知道。直接停在多少帧。
ModelViewer
  
setAnimationClip(_getName:String, _startFrame:int, _endFrame:int):void
设置动画clip片段。clip为从多少帧到多少帧的动画片段, 方便调用动画。
ModelViewer
  
playClip(_getName:String, isLoop:Boolean = true):void
播放设置好的动画clip片段
ModelViewer
  
获取播放中的当前帧数
ModelViewer
  
获取当前动画的总帧数,从0开始计算
ModelViewer
  
getIsPlaying():Boolean
是否在播放中,以此判断当前动画clip是不是有播完
ModelViewer
事件
  事件Defined by
  
第一次读取完成后,会返回一个FIRST_COMPLETE事件
Flab3dEvent
  
侦听每组模型的读取进度,用evt.data.progressRate获取进度,是一个0-1的小数。
Flab3dEvent
  
每次切换模型组时,会反馈一个MODEL_CHANGE事件。evt.data.id获取本组的id,也就是xml文件中的pid
Flab3dEvent
  
点击模型时,会反馈一个MODEL_CLICK事件。evt.data.name获取的模型名
Flab3dEvent
  
使用setObj3DMaterial方法更换贴图时,会返回MAP_PROGRESS读取进度。用evt.data.progressRate获取进度,是一个0-1的小数。
Flab3dEvent
  
使用setObj3DMaterial方法读取贴图完成后,返回完成事件。
Flab3dEvent
  
点击外部xml文件的默认热点标签,反馈一个TAG_CLICK事件。 用evt.data.id获取热点标签的id,也就是xml文件中tagz的id。
Flab3dEvent
事件
FIRST_COMPLETE 事件

第一次读取完成后,会返回一个FIRST_COMPLETE事件。大部分方法都需要在侦听此事件后调用。
侦听方法:.addEventListener(Flab3dEvent.FIRST_COMPLETE, 方法);



LOAD_PROGRESS 事件

侦听每组模型的读取进度。
用evt.data.progressRate获取进度,是一个0-1的小数。
侦听方法:.addEventListener(Flab3dEvent.LOAD_PROGRESS, 方法);



MODEL_CHANGE 事件

每次切换模型组时,会反馈一个MODEL_CHANGE事件。
evt.data.id获取本组的id,也就是xml文件中的pid
侦听方法:.addEventListener(Flab3dEvent.MODEL_CHANGE, 方法);



MODEL_CLICK 事件

点击模型时,会反馈一个MODEL_CLICK事件。
evt.data.name获取的模型名
侦听方法:.addEventListener(Flab3dEvent.MODEL_CLICK, 方法);



MAP_PROGRESS 事件

使用setObj3DMaterial方法更换贴图时,会返回MAP_PROGRESS读取进度。
用evt.data.progressRate获取进度,是一个0-1的小数。
侦听方法:.addEventListener(Flab3dEvent.MAP_PROGRESS, 方法);



MAP_COMPLETE 事件

使用setObj3DMaterial方法读取贴图完成后,返回完成事件。
侦听方法:.addEventListener(Flab3dEvent.MAP_COMPLETE, 方法);



TAG_CLICK 事件

点击外部xml文件的默认热点标签,反馈一个TAG_CLICK事件。
用evt.data.id获取热点标签的id,也就是xml文件中tagz的id。
侦听方法:.addEventListener(Flab3dEvent.TAG_CLICK, 方法);







构造方法
ModelViewer() 构造方法
public function ModelViewer((_rootPath:String, _xmlAddress:* ,_width:int=640, _height:int=480,_getCorrectZ:Boolean=false, _getColor:int=0x292929 , _getFontColor:int=0xffffff, _getFontSize:int=14)

建立一个模型浏览器。 全景球需要使用四面鱼眼图片作为贴图。
代码范例如下:
var mv:ModelViewer = new ModelViewer("./","asset/address_model.xml",640,480);

第2个参数可以为外部xml地址,也可以为as3内部的xml属性数据。
第5个参数为抗破面,使用此功能时,请严格注意模型质量达到我们上面的要求。
后3个参数可以设置一下xml默认标签的颜色,字体颜色和字体大小
注:外部xml文件定义的默认标签没有太多可设置。想添加符合自己要求的标签,可以在程序中使用addDynamicTag()方法


参数
_rootPath:String— 根目录地址。如果本地制作则填本地地址,如果是网页制作就填服务器存放地址。

_xmlAddress:*—1.03版后,此处可以用String,表示外部xml文件的相对地址 ; 也可以用XML, 直接内部调用某个XML属性的数据。

_width:int— 模型浏览器的宽度

_height:int— 模型浏览器的高度

_getCorrectZ:Boolean— 是否使用抗破面功能。 true为使用抗破面,但是抗破面功能对模型要求很高,请严格按我们开发文档上的介绍来制作符合的模型,否则容易报错。

_getColor:int— 外部xml文件设定的热点标签的背景颜色

_getFontColor:int— 外部xml文件设定的热点标签的文字颜色

_getFontSize:int— 外部xml文件设定的热点标签的文字大小




方法
addModel() 方法
public function addModel(_getModelAddress:String, _getId:int, _getMapPath:String = "", _getY:Number=100, _getHorizontal:Number=45,_getDistance:Number=200,_getMinZ:Number=40):void

直接给场景中动态添加一套模型,不受外部xml文件限制。
FIRST_COMPLETE事件后调用。

参数
_getModelAddress:String—flb模型文件的相对路径
_getId:int—模型的id号,注意并不是pid
_getMapPath:String = ""—模型对应的贴图包的相对路径
_getY:Number=100—一开始摄像机的高度
_getHorizontal:Number=45— 一开始摄像机水平方向的旋转度数
_getDistance:Number=200—一开始摄像机距离物体的距离
_getMinZ:Number=40—摄像机距离物理的最近距离的限制。



updateModelByPid() 方法
public function updateModelByPid((_getPid:int=0):void

按外部xml文件设置的pid来更换模型,用来控制要切换哪组模型。第一套模型pid应为0。
如果超过XML里设置的模型pid最大号,则停留在最后的一套模型。
FIRST_COMPLETE事件后调用。

参数
_getId:int—就是XML文件里面模型的 pid,从0开始连续的编号



updateNextModel() 方法
public function updateNextModel():void

切换下一组模型。 FIRST_COMPLETE事件后调用。




updateLastModel ()方法  
public function updateNextMap():void

切换上一组模型。 FIRST_COMPLETE事件后调用。


addDynamicTag ()方法  
public function addDynamicTag(_getSprite:Sprite, _getPid:int, _getX:Number = 0, _getY:Number = 0, _getZ:Number = 0):void

动态的添加热点标签,可以添加任何sprite类型的元件作为热点标签,相当有用的方法之一。
xml外部默认的简单标签达不到自己项目要求时推荐使用。
FIRST_COMPLETE事件后调用。

 

参数
_getSprite:Sprite— 要被用做热点标签的Sprite, 任意Sprite都可。

_getPid:int—本标签属于哪套模型组

_getX:Number —热点标签在三维空间X轴方向的位置

_getY:Number —热点标签在三维空间Y轴方向的位置

_getZ:Number —热点标签在三维空间Z轴方向的位置

setObj3DPosition ()方法  
public function setObj3DPosition(_getObjName:String, tx:Number=0, ty:Number=0, tz:Number=0):void

设置模型组里某个模型的三维空间XYZ轴的位置,第一个参数为3dsmax里的模型名。
(如不清楚模型名可以用方法showObj3DName()获取当前模型组里所有模型的名字,详细见下面showObj3DName文档)
FIRST_COMPLETE事件后调用。


参数
getObjName:String— 3dsmax里的模型名
tx:Number— 模型在三维空间X轴方向的位置
ty:Number— 模型在三维空间Y轴方向的位置
tz:Number— 模型在三维空间Z轴方向的位置



setObj3DRotation ()方法  
public function setObj3DRotation(_getObjName:String, rx:Number=0, ry:Number=0, rz:Number=0):void

设置模型组里某个模型的三维空间XYZ轴的旋转,单位为“角度”,第一个参数为3dsmax里的模型名。
(如不清楚模型名可以用方法showObj3DName()获取当前模型组里所有模型的名字,详细见下面showObj3DName文档)
FIRST_COMPLETE事件后调用。

参数
getObjName:String— 3dsmax里的模型名
rx:Number— 模型在三维空间X轴方向的旋转
ry:Number— 模型在三维空间Y轴方向的旋转
rz:Number— 模型在三维空间Z轴方向的旋转



setObj3DScale ()方法  
public function setObj3DScale(_getObjName:String, sx:Number=1, sy:Number=1,sz:Number=1):void

设置模型组里某个模型的三维空间XYZ轴的缩放,第一个参数为3dsmax里的模型名。
(如不清楚模型名可以用方法showObj3DName()获取当前模型组里所有模型的名字,详细见下面showObj3DName文档)
FIRST_COMPLETE事件后调用。

参数
getObjName:String— 3dsmax里的模型名
sx:Number— 模型在三维空间X轴方向的缩放
sy:Number— 模型在三维空间Y轴方向的缩放
sz:Number— 模型在三维空间Z轴方向的缩放


getObj3DPosition ()方法  
public function getObj3DPosition(_getObjName:String):Array

获取模型组里某个模型的三维空间XYZ轴的位置。
返回的是一个数组 [0]为X轴的位置,[1]为Y轴的位置,[2]为Z轴的位置。
FIRST_COMPLETE事件后调用。

参数
getObjName:String— 3dsmax里的模型名

 

getObj3DRotation ()方法  
public function getObj3DRotation(_getObjName:String):Array

获取模型组里某个模型的三维空间XYZ轴的旋转。
返回的是一个数组 [0]为X轴的旋转度数,[1]为Y轴的旋转度数,[2]为Z轴的旋转度数。
FIRST_COMPLETE事件后调用.

参数
getObjName:String— 3dsmax里的模型名

getObj3DScale ()方法  
public function getObj3DScale(_getObjName:String):Array

获取模型组里某个模型的三维空间XYZ轴的缩放。
返回的是一个数组 [0]为X轴的缩放,[1]为Y轴的缩放,[2]为Z轴的缩放。
FIRST_COMPLETE事件后调用。

参数
getObjName:String— 3dsmax里的模型名


setObj3DMaterial ()方法  
public function setObj3DMaterial(_getObjName:String, _getMap:*):void

动态更换本模型组某模型的贴图。
第二个参数可以为贴图地址String,也可以为读取好的贴图信息BitmapData。
贴图图片接受jpg,png,bmp。
FIRST_COMPLETE事件后调用。

参数
getObjName:String— 3dsmax里的模型名
_getMap:*— 此参数可以为贴图地址String,也可以为读取好的贴图信息BitmapData


setObj3DBothSide ()方法  
public function setObj3DBothSide(_getObjName:String, _getBoolean:Boolean = false):void

设置本模型组中某模型,是否为双面渲染。
当您贴图背面的显示很重要时可以设置为true,但运行效率会下降。
FIRST_COMPLETE事件后调用。

参数
getObjName:String— 3dsmax里的模型名
_getBoolean:Boolean— 模型贴图是否双面显示


setObj3DVisible ()方法  
public function setObj3DVisible(_getObjName:String, _getBoolean:Boolean = true):void

设置本模型组中某模型,是否可见。
可以结合使用此方法制作“人物换装”或“组装机械”等功能。
FIRST_COMPLETE事件后调用。

参数
getObjName:String— 3dsmax里的模型名
_getBoolean:Boolean— 模型是否可见
updateVerticalRange ()方法  
public function updateVerticalRange(_getMin:Number = 0, _getMax:Number = 25):void

限制摄像机竖方向的范围,单位为“度数”,范围为-90到90.
FIRST_COMPLETE事件后调用。

参数
_getMin:Number— 摄像机竖方向最低可达到位置
_getMax:Number— 摄像机竖方向最高可达到位置


updateHorizontalRange ()方法  
public function updateHorizontalRange(_getLeft:Number = 0, _getRight:Number = 360):void

限制摄像机横方向的范围,单位为“度数”。
如果2个参数之差大于等于360度,则表示没有范围限制。
FIRST_COMPLETE事件后调用。

参数
_getLeft:Number— 摄像机横方向最左可达到位置
_getRight— 摄像机横方向最右可达到位置


updateZRange ()方法  
public function updateZRange(_getNear:Number = 50, _getFar:Number = 300):void

限制摄像机远近Z方向可伸缩的范围,范围为负无限到正无限。
FIRST_COMPLETE事件后调用。

参数
_getNear:Number— 摄像机Z方向拉近最近可达到位置
_getFar:Number— 摄像机Z方向拉远最远可达到位置


updateZoom ()方法  
public function updateZoom(_getZoom:Number = 100):void

设置摄像机的焦距,默认为100。
焦距越大拍摄范围越大,但物体越扭曲。
FIRST_COMPLETE事件后调用。

参数
_getZoom:Number— 摄像机的焦距


autoRotate ()方法  
public function autoRotate(_getAngel:Number = 1, _getAxis:String = "z"):void

摄像机自动绕轴旋转。目前只能绕Z轴,也就是竖轴旋转。
第一个角度参数设为0,就可终止自动旋转。
FIRST_COMPLETE事件后调用。

参数
_getAngel:Number— 每帧转动的度数
_getAxis:String— 目前此参数只能是"z",也就是绕竖轴旋转。


setCameraPosition ()方法  
public function setCameraPosition(_getHorizontal:Number, _getVertical:Number, _getDistance:Number):void

直接设置摄像机位置, 3个参数分别为横方向度数,竖方向度数和离目标的远近。

参数
_getHorizontal:Number— 摄像机所在位置的横方向度数
_getVertical:Number— 摄像机所在位置的竖方向度数
_getDistance:Number— 摄像机所在位置的Z方向距离,即是离目标的远近


getCameraPosition ()方法  
public function getCameraPosition():Array

获取摄像机位置。
返回一个数组,[0]为横方向度数,[1]为竖方向度数,[2]为离目标的远近.
FIRST_COMPLETE事件后调用。

参数


setCameraTarget ()方法  
public function setCameraTarget(_getObjName:String, offsetX:Number, offsetY:Number, offsetZ:Number):void

设置摄像机对准的模型,可以动态的切换摄像机对准的模型。
第一参数为模型名。
后3个参数为以对准模型为中心的XYZ偏移。
用户可以通过设置达到对某模型特定部分的观看,也可以制作“镜头切换”效果.
FIRST_COMPLETE事件后调用。

参数
_getObjName:String— 摄像机对准的模型的模型名
offsetX:Number— 以对准模型为中心的X方向的偏移
offsetY:Number— 以对准模型为中心的Y方向的偏移
offsetZ:Number— 以对准模型为中心的Z方向的偏移


setCameraInertia ()方法  
public function setCameraInertia(_getInertia:Number):void

设置摄像机惯性,建议0-10. 数值越大镜头滑动越久。但越影响效率。
FIRST_COMPLETE事件后调用。

参数
_getInertia:Number— 滑动系数,建议0-10. 数值越大镜头滑动越久


showObj3DName ()方法  
public function showObj3DName():Array

看当前模型组中所有模型的名字,返回一个Array,包含所有模型名。如果制作模型时,对模型名称不清楚,可以用这个方法查询。
每次MODEL_CHANGE事件后调用。


参数


setRenderGap ()方法  
public function setRenderGap(_getGap:int=0):void

设置渲染间隔,比如2帧渲染1次。
用户可以按自己需求处理效率和效果的平衡。间隔越小,画面越流畅但CPU消耗越大;间隔越大越不流畅但CPU消耗越小。
FIRST_COMPLETE事件后再调用。

参数
_getGap:int— 间隔多少帧渲染一次


allowRender ()方法  
public function allowRender(_getBoolean:Boolean = false):void

是否允许渲染,用户可自己控制是否暂时停止渲染。
注:当模型浏览器内核需要强制渲染时,此方法无效。
FIRST_COMPLETE事件后再调用。

参数
_getBoolean:Boolean— 是否允许渲染


allowWheel ()方法  
public function allowWheel(_getBoolean:Boolean = false):void

是否允许用户使用鼠标滚轮对摄像机拉远拉近。
FIRST_COMPLETE事件后再调用。


参数
_getBoolean:Boolean— 是否允许渲染


allowAxis ()方法  
public function allowAxis(_getBoolean:Boolean):void

是否显示xyz轴辅助标志, 制作中参考轴方向用。
红色为X正方向,绿色为Y正方向, 蓝色为Z 正方向。
FIRST_COMPLETE事件后再调用。

参数
_getBoolean:Boolean— 是否显示xyz轴辅助标志


takeShots ()方法  
public function takeShots(_getShotArray:Array=null, _getScale:Number=1):void

把模型拍摄成位图,并且返回拍摄后的bitmap数组。
此方法便于制作“三维中设置角色后,保存为位图”的功能
参数1是一个Vector3D的数组,包含所有需要拍摄的摄像机位置,Vector3D的x,y,z分别为摄像机横方向度数,竖方向度数,和离物体距离远近。如果不设置的话,则是研究所自定的8方位拍摄。
第二参数为保存bitmap的缩放大小,为0-1的小数。
MODEL_CHANGE事件后调用。

参数
_getShotArray:Array— 所有拍摄位置,包含Vector3D的位置。下面有范例代码。
_getScale:Number— 为保存bitmap的缩放大小,为0-1的小数
范例代码:
mv.takeShots([new Vector3D(0,10,50),new Vector3D(45,10,50),new Vector3D(90,10,50),new Vector3D(90+45,10,50),new Vector3D(180,10,50),new Vector3D(180+45,10,50), new Vector3D(270,10,50), new Vector3D(270+45,10,50)], 0.5);

这个例子可以拍摄360度里8个等距离位置的8张位图,位图中模型的大小和三维中显示的大小的0.5倍。


updateIndicator ()方法  
public function updateIndicator(_getSprite:Sprite, _getXOffset:int=0, _getYOffset:int=0):void

用户可以用自制的读取进度条,任意Sprite都可以作为进度条图片。
和事件Flab3dEvent.LOAD_PROCESS配合,可以制作任何进度条功能。

参数
_getSprite:Sprite— 用户自己用做进度条的sprite元件
_getXOffset:int— 以舞台中心为原点的X方向偏移位置
_getYOffset:int— 以舞台中心为原点的Y方向偏移位置


updateBackground ()方法  
public function updateBackground(_getSprite:Sprite):void

更换背景图,使用自己的sprite作为背景。

参数
_getSprite:Sprite— 用户自己的背景,只要是sprite都可以


setupAnimation ()方法  
public function setupAnimation(_getMeshName:String, _getFPS:int=25,_getGap:int=0):void

给某个模型设置动画,这里使用同一蒙皮上任意模型的名字均可,都指向同一个蒙皮动画,不用重复设置。
帧率最好和制作动画时帧率设置相同。
必须使用此方法设置动画后,后面几个方法才有效。
FIRST_COMPLETE事件后调用

参数
_getMeshName:String— 给此名的模型设置动画,这里使用同一蒙皮Skin上任意模型的名字均可,都指向同一个蒙皮动画,不用重复设置。
_getFPS:int— 帧率最好和制作动画时帧率设置相同,默认为25。3dsmax导出的动画一般应设置为30
_getGap— 播放倍数,=0时为制作动画时的正常速度,越大播放速度越快


play ()方法  
public function play(isLoop:Boolean=true):void

播放动画。可设置播完后是否自动重播
FIRST_COMPLETE事件后调用

参数
isLoop:Boolean— 可设置播完后是否自动重播


stop ()方法  
public function stop():void

停止播放。
FIRST_COMPLETE事件后调用


gotoAndPlay ()方法  
public function gotoAndPlay(_getFrame:int=0, isLoop:Boolean = true):void

flash经典方法名,用过flash的朋友都知道。 直接从多少帧开始播放。
FIRST_COMPLETE事件后调用

参数
_getFrame:int— 从第几帧开始播放
isLoop:Boolean— 是否循环重播


gotoAndStop ()方法  
public function gotoAndStop(_getFrame:int=0):void

flash经典方法名,用过flash的朋友都知道。直接停在多少帧。
FIRST_COMPLETE事件后调用

参数
_getFrame:int— 停止在第几帧


setAnimationClip ()方法  
public function setAnimationClip(_getName:String, _startFrame:int, _endFrame:int):void

设置动画clip片段。clip为从多少帧到多少帧的动画片段, 方便调用动画。
FIRST_COMPLETE事件后调用

参数
_getName:String— 设置动画片段的名字
_startFrame:int— 设置本动画片段的开始帧
_endFrame:int— 设置本动画片段的结尾帧


playClip ()方法  
public function playClip(_getName:String, isLoop:Boolean = true):void

播放设置好的动画clip片段。
FIRST_COMPLETE事件后调用

参数
_getName:String— 要播放的动画片段名
isLoop:Boolean— 是否循环重播本动画片段


getCurrentFrame ()方法  
public function getCurrentFrame():int

获取播放中的当前帧数。
FIRST_COMPLETE事件后调用

参数


getTotalFrame ()方法  
public function getTotalFrame():int

获取当前动画的总帧数,从0开始计算。
FIRST_COMPLETE事件后调用

参数


getIsPlaying ()方法  
public function getIsPlaying():Boolean

是否在播放中,以此判断当前动画clip是不是有播完。
FIRST_COMPLETE事件后调用

参数