ActionScript 3.0 学习(十八) away3D学习3 away3d骨骼动画相关笔记
2016-09-03 21:01
197 查看
1.怎么为一个Mesh设置各个不同部位的皮肤?
调用Mesh的subMeshes,但前提是你的Mesh里有SubMesh...
mesh.subMeshes[index].material = new TextureMaterial(new BitmapTexture(bitmapData));
2.怎么才知道Mesh中是否有SubMesh?
trace(mesh.subMeshes.length);
结果非0则说明有SubMesh
3.3DS文件无法成功加载怎么办?
1.先用3dsMAX之类的软件打开你的3DS文件,删掉camera,保存,
2.清除项目编辑器缓存(如Flash Builder的缓存),再次加载并测试
4.3D对象上的Mouse事件为什么无效?
需先允许Mouse事件,然后侦听MouseEvent3D
mesh.mouseEnabled = true;
mesh.addEventListener(MouseEvent3D.CLICK, mesh_clickHandler);
3.跟随人物的血条与名字怎么做?
可使用Sprite3D类,当然,你也可以参照它自己实现一个类来解决
4.怎么才能让一个模型看上去像玻璃或是水晶?
将Material设置为半透明,然后调用addMethod方法添加EnvMapMethod
5.有没有简单的办法可以画路径动画的路线?
可以使用旧版的preFab(最新支持away3d4的preFab3D目前还没有此功能),先将就用吧
6.怎样才能让贴图的某部分变透明?
使用png图片,然后...
textureMaterial.alphaBlending = true;
textureMaterial.blendMode = BlendMode.LAYER;
7.有没有办法显示MovieClip?
目前官方暂时没有提供现成的办法,但....
可以继承BitmapTexture,自己实现一个
在继承的类中添加一个Sprite,并不需要添加到stage上
然后侦听它的Event.ENTER_FRAME事件
在每次事件触发时,draw一个新的BitmapData出来
8.怎么为一个Cube每个面贴上不同的贴图?
1.自己用6个PlaneGeometry+6个Mesh来实现一个新的Cube类,以达到每个面不同的贴图
2.用SkyBox实现
(推荐使用第一种方法,灵活度更高)
9.怎样才能让模型变的更平滑?
Weld.apply(mesh);
10.怎样计算2点之间的距离?
var v1:Vector3D = new Vector3D(0,100,0)
var v2:Vector3D = new Vector3D(100,0,0);
trace(v1.subtract(v2).length);
4.1版本对骨骼动画做了一些修改,记录一下:
//动作相关属性获取
var animator:SkeletonAnimator;
animator.updatePosition = false; //这个可以防止骨骼动作引起的位移
var animatorSet:SkeletonAnimationSet = animator.animationSet as SkeletonAnimationSet; //获取动作集
var animationNode:AnimationNodeBase = animatorSet.getAnimation("stateName"); //获取动作节点
var animationState:AnimationStateBase = animator.getAnimationState(animationNode); //获取动作状态
//播放动作
var stateTransition:CrossfadeTransition = new CrossfadeTransition(0.5);
animator.play("stateName", stateTransition, 0);
//注意这里要设置第三个参数, 动作的初始偏移值,如果没有直接就跳到动作的最后一帧了,特别是对非循环动作就没有动作了
动画模块核心存放在away3d.animators包里;
Away3D支持下面几种动画格式:
VertexAnimator:顶点动画
SkeletonAnimator:骨骼动画
UVAnimator:UV动画
SpriteSheetAnimator:二维切换动画
ParticleAnimator:粒子动画
PathAnimator:路径动画
这几种动画都有各自的特点及应用场景,一般而在3D游戏中应用得最广泛的是骨骼动画,因为骨骼动画是人物动画的核心,我们下半段会专门详解这个动画;
动画简介
核心类
IAnimator
提供控制动画播放的接口,具体的动画类型对应具体的实现类,如骨骼动画使用SkeletonAnimator类;
将该对象赋值到对应的Mesh的animator属性既可以控制该Mesh对象播放动画;
对于播放的所有动画都应该存放到IAnimationSet对象中;
IAnimationSet
提供管理多个动画的容器,多个动画如奔跑或攻击都需要添加到对应的Set容器后才能进行播放;
data包
动画所需的数据对象元变化(帧)信息;
nodes包
一串变化组成的一个独立动画节点;
states包
动画当前状态,从Nodes提取以供当前显示的动画元(帧)信息;
渲染流程
Away3D中的动画渲染是双线更新渲染的,一个更新位于AnimatorBase类的方法update中,负责更新动画数据,一个更新位于MaterialBase类的renderPass方法中,负责渲染绘制;
具体的更新都是更具当前时间来更新对应的State对象,更新具体流程可以具体的打断点查看,这里就不深入解读了。
骨骼动画
骨骼动画在网络上有大量的资料,大家可以去网上搜搜看,这里主要说一下Away3D中是如何处理骨骼动画的数据的;
SkeletonJoint
由于多个关节之间是可以相互链接的(父关节变化时会影响到子关节),该对象用来保存关节的链接信息;
Skeleton
骨骼对象包含了所有关节的链接信息(SkeletonJoint);
JointPose
保存一个关节的信息,包括3个数据:名称、四元数(用于旋转)和转换信息;
SkeletonPose
记录一个关键帧下所有的关节的信息(每个关节的位置及旋转数据),包含所有的关节对象(JointPose)列表;
SkeletonClipNode
包含了一个骨骼动画的所有关键帧数据(SkeletonPose列表),同时还可以为每个关键帧指定一定的间隔;
SkeletonClipState
更新特定时间点的骨骼数据,骨骼动画的插值运算;
SkeletonAnimationSet
存放多个骨骼动画(SkeletonClipNode)的容器,使骨骼动画(SkeletonClipNode)和其name属性关联起来,配合SkeletonAnimator的play方法可以指定播放哪个骨骼动画(SkeletonClipNode);
SkeletonAnimator
骨骼动画的播放类,可以设定到指定Mesh上,需要指定一个骨骼容器(SkeletonAnimationSet)和对应的骨骼对象(Skeleton);
调用Mesh的subMeshes,但前提是你的Mesh里有SubMesh...
mesh.subMeshes[index].material = new TextureMaterial(new BitmapTexture(bitmapData));
2.怎么才知道Mesh中是否有SubMesh?
trace(mesh.subMeshes.length);
结果非0则说明有SubMesh
3.3DS文件无法成功加载怎么办?
1.先用3dsMAX之类的软件打开你的3DS文件,删掉camera,保存,
2.清除项目编辑器缓存(如Flash Builder的缓存),再次加载并测试
4.3D对象上的Mouse事件为什么无效?
需先允许Mouse事件,然后侦听MouseEvent3D
mesh.mouseEnabled = true;
mesh.addEventListener(MouseEvent3D.CLICK, mesh_clickHandler);
3.跟随人物的血条与名字怎么做?
可使用Sprite3D类,当然,你也可以参照它自己实现一个类来解决
4.怎么才能让一个模型看上去像玻璃或是水晶?
将Material设置为半透明,然后调用addMethod方法添加EnvMapMethod
5.有没有简单的办法可以画路径动画的路线?
可以使用旧版的preFab(最新支持away3d4的preFab3D目前还没有此功能),先将就用吧
6.怎样才能让贴图的某部分变透明?
使用png图片,然后...
textureMaterial.alphaBlending = true;
textureMaterial.blendMode = BlendMode.LAYER;
7.有没有办法显示MovieClip?
目前官方暂时没有提供现成的办法,但....
可以继承BitmapTexture,自己实现一个
在继承的类中添加一个Sprite,并不需要添加到stage上
然后侦听它的Event.ENTER_FRAME事件
在每次事件触发时,draw一个新的BitmapData出来
8.怎么为一个Cube每个面贴上不同的贴图?
1.自己用6个PlaneGeometry+6个Mesh来实现一个新的Cube类,以达到每个面不同的贴图
2.用SkyBox实现
(推荐使用第一种方法,灵活度更高)
9.怎样才能让模型变的更平滑?
Weld.apply(mesh);
10.怎样计算2点之间的距离?
var v1:Vector3D = new Vector3D(0,100,0)
var v2:Vector3D = new Vector3D(100,0,0);
trace(v1.subtract(v2).length);
4.1版本对骨骼动画做了一些修改,记录一下:
//动作相关属性获取
var animator:SkeletonAnimator;
animator.updatePosition = false; //这个可以防止骨骼动作引起的位移
var animatorSet:SkeletonAnimationSet = animator.animationSet as SkeletonAnimationSet; //获取动作集
var animationNode:AnimationNodeBase = animatorSet.getAnimation("stateName"); //获取动作节点
var animationState:AnimationStateBase = animator.getAnimationState(animationNode); //获取动作状态
//播放动作
var stateTransition:CrossfadeTransition = new CrossfadeTransition(0.5);
animator.play("stateName", stateTransition, 0);
//注意这里要设置第三个参数, 动作的初始偏移值,如果没有直接就跳到动作的最后一帧了,特别是对非循环动作就没有动作了
动画模块核心存放在away3d.animators包里;
Away3D支持下面几种动画格式:
VertexAnimator:顶点动画
SkeletonAnimator:骨骼动画
UVAnimator:UV动画
SpriteSheetAnimator:二维切换动画
ParticleAnimator:粒子动画
PathAnimator:路径动画
这几种动画都有各自的特点及应用场景,一般而在3D游戏中应用得最广泛的是骨骼动画,因为骨骼动画是人物动画的核心,我们下半段会专门详解这个动画;
动画简介
核心类
IAnimator
提供控制动画播放的接口,具体的动画类型对应具体的实现类,如骨骼动画使用SkeletonAnimator类;
将该对象赋值到对应的Mesh的animator属性既可以控制该Mesh对象播放动画;
对于播放的所有动画都应该存放到IAnimationSet对象中;
IAnimationSet
提供管理多个动画的容器,多个动画如奔跑或攻击都需要添加到对应的Set容器后才能进行播放;
data包
动画所需的数据对象元变化(帧)信息;
nodes包
一串变化组成的一个独立动画节点;
states包
动画当前状态,从Nodes提取以供当前显示的动画元(帧)信息;
渲染流程
Away3D中的动画渲染是双线更新渲染的,一个更新位于AnimatorBase类的方法update中,负责更新动画数据,一个更新位于MaterialBase类的renderPass方法中,负责渲染绘制;
具体的更新都是更具当前时间来更新对应的State对象,更新具体流程可以具体的打断点查看,这里就不深入解读了。
骨骼动画
骨骼动画在网络上有大量的资料,大家可以去网上搜搜看,这里主要说一下Away3D中是如何处理骨骼动画的数据的;
SkeletonJoint
由于多个关节之间是可以相互链接的(父关节变化时会影响到子关节),该对象用来保存关节的链接信息;
Skeleton
骨骼对象包含了所有关节的链接信息(SkeletonJoint);
JointPose
保存一个关节的信息,包括3个数据:名称、四元数(用于旋转)和转换信息;
SkeletonPose
记录一个关键帧下所有的关节的信息(每个关节的位置及旋转数据),包含所有的关节对象(JointPose)列表;
SkeletonClipNode
包含了一个骨骼动画的所有关键帧数据(SkeletonPose列表),同时还可以为每个关键帧指定一定的间隔;
SkeletonClipState
更新特定时间点的骨骼数据,骨骼动画的插值运算;
SkeletonAnimationSet
存放多个骨骼动画(SkeletonClipNode)的容器,使骨骼动画(SkeletonClipNode)和其name属性关联起来,配合SkeletonAnimator的play方法可以指定播放哪个骨骼动画(SkeletonClipNode);
SkeletonAnimator
骨骼动画的播放类,可以设定到指定Mesh上,需要指定一个骨骼容器(SkeletonAnimationSet)和对应的骨骼对象(Skeleton);
相关文章推荐
- STL里deque的用法
- CSU Problem 1780 简单的图论问题?——湖南省第十一届大学生计算机程序设计竞赛
- 无重边连通无向图求割点和桥
- 由树转化为二叉树
- OpenNLP学习笔记1
- 网站新文章全自动监控工具 支持 『论坛、贴吧』等新帖提醒
- java 编解码与字符集
- cmd中输入svn提示svn不是内部或外部命令
- BGRABitmap图像操作6:线的两种连接方式
- CVTE笔试题
- C/C++获取当前系统时间
- 操作系统-进程
- Java中的ReentrantLock和synchronized两种锁定机制的对比
- IOCP模型与EPOLL模型的比较
- SQL语句中between and 范围
- (OK) network diagnose tools
- CSS3中的run-in类型与compact类型
- 自定义控件、Fragment、Handler详解
- Java 并发工具包 java.util.concurrent 用户指南
- 【学习笔记】CSS的基本语法(一)