与二维flash里的物体(译注:指电影剪辑实例等)一样,也可以对三维物体进行定位、旋转、缩放、组合等操作。本篇教程还会告诉你如何在三维空间里使用你惯用的渐变包来渐变你的三维物体。
我们从最简单的Away3D类开始:
通读本教程,并边学边做。用你的手!

既然你身边万物绋皆是三维你就会想当然地认为在三维空间里移动物体小菜一碟。但事与愿违,在电脑里完成这个并非易事,不过还好,这里我们可以借助我们的手。为了帮助搞清是如何移动、旋转三维物体,快伸出你的手,就象下图所示的那样。
把大拇指想象成Y轴、食指为Z轴、中指为X轴,这个雕虫小技无疑让一切变得容易理解的多。
注意:Away3D 以及所有其它三维引擎都不是使用象在flash里那样的倒立坐标糸。 Away3D 使用的是数学与几何学里常用的笛卡乐坐标糸。在这个坐标糸里X是右正左负、Y是上正下负,努力把原先被flash搞乱的坐标概念忘掉,来个理念上的"拨乱反正"吧!
三维空间里的移动:
在Away3d所有三维物体都可以通过设置x/y属性产生移动,象二维里一样。当然三维里还可以设置z值。
cube.x = 100;
cube.y = -100;
cube.z = 100;
x/y/z的值可正可负,且是相对于三维世界、视口的中心。当你创建好视口你就确定好了三维世界的中心。通常这个中心就是最初那个视口的中心。
你可以用moveTo()方法和position属性不费吹灰之力设置好x/y/z值。
cube.position = new Number3D(100,-100,300);
cube.moveTo(100, -100, 300);
这二行代码产生同一效果。它们唯一不同就是用.position时要提供一个新的Number3D,而moveTo()你只要提供简单数值就行。
如果你想让一个3D物体朝向另一3D物体或朝向场景中一特定点时,你要用到lookAt方法:
cube.lookAt( new Number3D(0, 0, 0));
cube.lookAt(sphere.position);
行代码通适用于将3D物体朝向场景中的任意一个点,而2行代码适用于让3D物体朝向另一3D物体。
Away3D 同时还提供一些特殊的移动三维物体的方法:
cube.moveForward(X);
cube.moveBackward(X);
cube.moveUp(X);
cube.moveDown(X);
cube.moveLeft(X);
cube.moveRight(X);
这六个方法的功能与其名字所表述的一样。所有都是移动了x个单位。这些方法让三维物体沿着其自身的轴移动而设置不是父级的轴。让我们看这个例子:
Basic07_moveForward.as
假设你正在做一个空战游戏,要让太空船自由移动使用上边这六个方法再方便不过了,使用设置x/y/z值来产生移动那简直是自虐。
旋转你可以用rotation属性让三维物体沿任一轴绕自已中心点转动:
cube.rotationX = 45;
cube.rotationY = -10;
cube.rotationZ = 200;
还记住借助手这个小伎俩了没?将你的手放在你的眼前这会让你理解三维物体沿轴转动更为简单。你还可以更方便设置rotation的值:
cube.rotateTo(45, 45,0)
缩放你可以让三维物体沿三个轴产生缩放。
cube.scaleX = 2;cube.scaleY = .5;cube.scaleZ = 1;
缩放值设为1时为原来大小、设为2时将是原来二倍、设为0.5则是原来的一半大小。更简单等比例缩放一三维物体要用到scale()方法:
cube.scale(2); 这样会将立方体放大为原来二倍。 组合三维物体
当我们要同时操控多个三维物体,我想这时你绝对会先将这些三维物体组合在一块。在Away3d里组合三维物体会用到"ObjectContainer3D",将3D物体添加"ObjectContainer3D"里面如同将其添加到场景里上一样。
组合三维物体,先创建一个ObjectContainer3D然后将其加到场景中。下例中我们添加一个唱片(RegularPolygon),、立方体和球。这个组合每帧都要转动半度,其中立方体反方向转动,所以看上在你看来立方体总是朝向你。
Basic07_group.as
注意ObjectContainer3D这类容器看不见地真实存在着,我们可以象一般三维物体一样移动它或实现别的一些操控。
三维物体的渐变
渐变三维物体,和flash里的渐变一样。安装你惯用的渐变类并指定好要渐变的属性,一切如此简单。
Flash附带的渐变因为其速度很慢而不被推荐。我给大家推荐下边这些渐变方案:
• Tweener
• TweenLite
• TweenFilterLite
• TweenMax
• ZigoEngine (Fuse)
• Twease
• HydroTween
• gTween
• TweeGo
• Go3D
• GoASAP
检验这些渐变引擎的速度吧http://blog.greensock.com/tweening-speed-test/ 。
各类引擎特性、语法不一,在开始项目之前请先确定你最想要那种。
象当初所说的那样,在三维里渐变与二维里一样。你选择一个属性进行渐变,设置其初、未值。在下面这个例子里,我们用一个Away3d自带的海龟元素。点击海龟就会产生一个随机的位置与旋转的渐变。
Movie: 点此观看 as:Basic07_tweening.as
这个例子用了TweenLite( http://www.tweenlite.com/ ),所以如果你要在你本机测试,下载、安装TweenLite是必须的。
高级移动
偶尔,当从别的三维应用软件中加载一个其旋转方式不是你所希望那样的模型时,你会尝试做一些改变。那么你这样做吧:重新设置旋转值。然后应用于3D物体。
1.cube.rotationY = 45;cube.applyRotations();
有时你也想尝试改变一个物体的中心,这样就可以让物体绕着另一点进行旋转。在flash的二维世界里,你可以通过改变注册点。在三维里这个注册点会被说成是"轴心点",改变三维物体的轴心点你要这么做:

1.cube.movePivot(0,0,-120);
下面例子,你可以试验出这些方法是如何改变立方体的转动的。
Movie: 点此观看 as:Basic07_apply.as
The movePivot method does not affect the geometry inside the model. If you'd like to apply a transformation that also changes the mesh of the model, you need to use the applyPosition method.
1.cube. applyPosition(0,0,-120);
ApplyPosition is extremly handy for modeling or correction purposes or for instance when an object needs to be duplicated, and then showed with different offsets using movePivot. This enables you to make to separate models with different offsets.
Roll, Pitch 和 Yaw
Roll、Pitch和yaw也是旋转3D物体,它们与前面的 cube.moveForward那六个方法异曲同工, 都是针对自身坐标。rotationX/Y/Z旋转相对是世界坐标。
1.cube.roll(15);cube.pitch(5);cube.yaw(5);

away3D操纵三维物体详解相关推荐

  1. QT操纵excel详解2:实现对excel的全面控制

    原文地址:点击打开链接 Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microso ...

  2. 万字长文详解如何用Python玩转OpenGL | CSDN 博文精选

    作者 | 天元浪子 来源 | CSDN博文精选 [编者按]OpenGL(开放式图形库),用于渲染 2D.3D 矢量图形的跨语言.跨平台的应用程序编程接口,C.C++.Python.Java等语言都能支 ...

  3. C++中的STL算法详解

    1.STL算法详解 STL提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等.算法就是函数模板,算法通过迭代器来操纵容器中的元素.许多算法操作的是容器上的一个区间(也可以是整个容 ...

  4. 重磅直播|慕尼黑工业大学博士详解室内SLAM中的几何约束

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 大家好,本公众号现已开启线上视频公开课,主讲人通过B站直播间,对3D视觉领域相关知识点进行讲解,并在微 ...

  5. 重磅直播|中科慧眼崔峰博士详解深度相机原理及其应用

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 大家好,本公众号现已开启线上视频公开课,主讲人通过B站直播间,对3D视觉领域相关知识点进行讲解,并在微 ...

  6. pandas读写MySQL数据库详解及实战

    pandas读写MySQL数据库详解及实战 SQLAlchemy是Python中最有名的ORM工具. 关于ORM: 全称Object Relational Mapping(对象关系映射). 特点是操纵 ...

  7. Linux jobs等前后台运行命令详解

    A,Shell支持作用控制,有以下命令:  1. command& 让进程在后台运行  2. jobs 查看后台运行的进程  3. fg %n 让后台运行的进程n到前台来  4. bg %n ...

  8. 动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

    2019独角兽企业重金招聘Python工程师标准>>> 在运行时期可以按照Java虚拟机规范对class文件的组织规则生成对应的二进制字节码.当前有很多开源框架可以完成这些功能,如A ...

  9. Android开发--详解ContentProvider/Cursor的使用

    ContentProvider是Android四大组件之一,所以如果是自己实现ContentProvider,需要在AndroidManifest.xml文件中进行声明,幸运的是,我们很少需要自己定义 ...

最新文章

  1. 做自适应网站专业乐云seo_乐云分享新站SEO优化实践经验,收录和排名持续稳定上升方...
  2. java上传ftp数据丢失_Java:将文件上传到FTP问题(数据包丢失) - java
  3. 展示动图_DNF:多GIF动图展示,暗夜使者个性武器幻化推荐
  4. JGroups 入门实践(转)
  5. 如何创建你的第一个Python元类?
  6. java数组元素相加_数组元素相加
  7. C#-利用Marshal类实现序列化
  8. BZOJ 3513: [MUTC2013]idiots [FFT]
  9. yii2通过url访问类中的方法_每日学点---nginx变量使用方法详解(3)
  10. ExtJs2.0学习系列(12)--Ext.TreePanel之第一式
  11. ROS学习笔记11(用C++写一个简单的消息发布和消息订阅)
  12. CentOS发行版本介绍
  13. 表多个字段与其他表关系,left join on 顺序
  14. UG12.0运动仿真分析基础到精通视频教程
  15. 使用Netflix Archaius进行配置管理
  16. 微信小游戏_2、demo入门
  17. React打包出现:The project was built assuming it is hosted at ./.
  18. 听说蝴蝶国的小公主可漂亮了!黑亮的头发
  19. 经典论文-MobileNetV3论文及实践
  20. 新加坡金融科技节 | 蚂蚁金服CTO程立:面向全球开放,与合作伙伴共赢

热门文章

  1. 解决办法 Field userService in com.sxsj.controller.RegistLoginController required a bean of type
  2. [C/C++学习] C/C++中的六大遍历
  3. 关于当代青少年梦想追逐的问卷调查
  4. 大学生体质测试管理系统
  5. 极光小课堂 | 极光推送之 Android 客户端使用指南——基础篇
  6. HDU 6112 今夕何夕 蔡勒公式
  7. node.js+vue药品药店进销存管理系统jb526
  8. 将本地项目上传到码云,每个步骤都有图文
  9. 【剑指offer 33】丑数
  10. MongoDB数据库增删改查基本使用