好吧,我知道有很多人不会有兴趣一点点把教程全看完,所以,我先在这帖子里集中发布一些基础的,但大家又非常关心的问题,

至于具体细节怎么实现,我会在以后的教程中慢慢完善,这里仅是为了提供给那些有一定动手能力的兄弟们自己先丰衣足食....

1.怎么为一个Mesh设置各个不同部位的皮肤?
调用Mesh的subMeshes,但前提是你的Mesh里有SubMesh...
mesh.subMeshes[index].material = new TextureMaterial(new BitmapTexture(bitmapData));

var geo:SphereGeometry = new SphereGeometry(400,32,24)var texture:TextureMaterial = new TextureMaterial(Cast.bitmapTexture(cls_earth))sphere = new Mesh(geo, texture);//var bitmapData:BitmapData = new BitmapData(256, 256, 0, 0xff0000)//var b2:BitmapData = new BitmapData(10, 10, 0, 0)//var mtx:Matrix = new Matrix()//mtx.translate(0,100)//bitmapData.draw(b2,mtx)//sphere.subMeshes[0].material = new TextureMaterial(new BitmapTexture(bitmapData));trace(sphere.subMeshes.length)

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

各类Method说明:

http://blog.sina.com.cn/s/blog_71a6638501017qns.html

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);

大多数Flash程序员想要接触3D项目的时候,应该都和我一样,最关心的是怎么造一座山,怎么在场景里显示流动的河水,或是怎么让模型动起来(奔跑,攻击,或是跳舞),又或是怎么才能给人物换装,怎么让人物装备武器.

但是,请相信我,下面我们所说到的这些名词,在教程真正开始之前,你必须得了解一下,或许它们粗浅的让你觉得根本不值一看,但如果你是一个入门者,能了解一些基础知识,它们终将在未来的某一天帮到你

我会尽量避免使用那些太专业不容易让人理解的词汇,如果哪位朋友觉得下面的内容不对,又或是说的不够,请告诉我,我会在将来不断的修改并完善这些内容,谢谢^^

Origin(原心,或称之为起始点):
3D世界与物体的中心点,3D世界中的任何对象都会有一个Origin,不管是场景,3D模型,灯光,还是摄像机,它的所在位置是物体或场景的(0,0,0)坐标,你可能并不能在所有的3D引擎或3D软件(如3dMax)中看到它,但它却是真实存在并起着相应的作用的

Geometry(几何形状):
在Away3D中,Geometry类其实就是一个数据对象,它被用来保存3D物体的基础数据,如顶点(vertices),法线(normals),UV数据,我们从外部加载进来的模型文件会被解析成一个Geometry实例并被保存在内存中

当然,我们也可以通过实例化一些Geometry的子类来创建一些基础的几何形状数据
PlaneGeometry        //平面
CubeGeometry        //方块
SphereGeometry        //球形
CylinderGeometry    //圆柱
CapsuleGeometry        //胶囊

Material(材质):
我们也可以将它称之为贴图,基本的贴图分三种,颜色贴图,照片贴图和线框贴图(线框贴图仅针对于线框类型对象使用),我们还能为贴图设置透明度和灯光反射强度,以此来达到一些特殊效果

Mesh(网格):
Mesh是一个容器,如果我们为它设置形状数据和贴图后,我们就可以在场景中看到它,它可以是一个方块,一个圆球,也可以是一个如汽车或楼房这样的复杂模型,当然,它也可以仅仅只是一个点,一根线条,或是一个平面,一切取决于它所包含的Geometry数据内容

UV:
U,V是贴图坐标的简称(它和3D模型的X, Y, Z轴是类似的),水平方向是U,垂直方向是V,通过这个二维平面的UV坐标系定义了图片上每个点的位置的信息. 这些点与3D模型是相互联系的, 以决定表面贴图的位置. UV就是将图像上每一个点精确对应到模型物体的表面. 在点与点之间的间隙位置由软件进行图像光滑插值处理. 这就是所谓的UV贴图.

Normals(法线):
法线并不是一种实体线,它是一条垂直于曲线上节点和表面切线方向上的虚拟线,使用正负值来表示和区别多边形上面和点的法向参数,并且只有法线为正值的点和面在场景中才可见,一般来说,由内部指向外部表示当前位置的法线为正向,如果将表面翻转,也就改变了法线的方向,如果你的模型不是双面显示的话,那么负法向的那一面将会在视力窗口中不可见,并且不可被渲染

Light(灯光):
我们生存的这个世界必须有光,不然就是漆黑一片...
3D世界中也一样,但不同的是,我们需要在3D世界中使用有限的几种灯光类型来模拟真实现世界中的大多数可见光源(像红外线这种不可见光源不在我们的讨论之列)

目前Away3D 4.0中提供两种光源
PointLight(点光源):这是最常用到的,我们可以用它来模拟太阳,月亮,或是台灯的灯炮
DirectionalLight(投射光源):好吧,这货可以用来模拟探照灯,或是月光透过窗户的效果

View3D(视口):
这是整个3D世界的入口,犹如透过一个窗口看世界,Away3D中View3D类就是这个窗口,你可以在Flash中同时添加多个View3D实例,就好像在一面墙上砸出多个窗户一样,每个View3D实例可以指向同一个Scene3D,也可以指向不同的Scene3D,但请记住,即使所有的View3D都指向同一个Scene3D实例,也会造成性能的下降,所以通常情况下,我们只使用一个View3D实例

Scene3D(场景):
Scene3D就是窗户外的风景,它在Flash的作用类似于Stage,所有的3D对象都需通过它来addChild,才能被显示出来,你也同样可以同时实例化多个Scene3D实例,但每个View3D每次只能被分配一个Scene3D

Camera3D(镜头):
我们前面说了窗户和风景,好吧,我承认这比喻有点老套,但想要看到这些内容,还需要你的眼睛,Camera3D就相当于你的眼睛,睛,如果移动Camera3D的坐标就相当于你的眼睛在移动,但....如果移动Scene3D里的物体坐标呢?.....那就说明那个物体在移动......= =!

  1. //范例:
  2. var view:View3D = new View3D();
  3. //View3D实例必须被添加到舞台上才能正确生效
  4. stage.addChild(view);
  5. //创建一个长宽高都为500的立方体数据
  6. var cubeGeometry:CubeGeometry = new CubeGeometry(500, 500, 500);
  7. //创建一个单色的贴图(材质)
  8. var cubeMaterial:ColorMaterial = new ColorMaterial(0xFF0000);
  9. //创建一个可视的Mesh对象,并设置形状数据和贴图
  10. var cubeMesh:Mesh = new Mesh(cubeGeometry, cubeMaterial);
  11. //将mesh添加到舞台上
  12. view.scene.addChild(cubeMesh);
  13. //移动风景中的物体
  14. cubemesh.z += 100;
  15. //移动镜头,或是说移动你的眼睛....
  16. view.camera.z = 100;

复制代码

ObjectContainer3D:
顺便提一下这个类,ObjectContainer3D类是Away3d中大多数3D可视对象的基类,
如果你想自己创建一个比较复杂的3D物体对象(如包含好几个Mesh的对象),可以通过继承它来实现自己的需要

今天先写这些,配图和其它的一些神马,等以后想到了再补....

在away3d.materials.methods目录下有很多以Method结尾的类,相信大家都已经知道了吧?
ok,我们今天就来说说这些Method

Method类的用法有两种,一种是通过DefaultMaterialBase的子类(如ColorMaterial,BitmapMaterial等)的addMethod()方法进行设置,
如:

  1. var cubeMaterial:ColorMaterial = new ColorMaterial();
  2. cubeMaterial.addMethod(new OutlineMethod());

复制代码

另一种是通过DefaultMaterialBase子类的指定方法进行设置,
如:

  1. var cubeMaterial:ColorMaterial = new ColorMaterial();
  2. cubeMaterial.diffuseMethod = new SubsurfaceScatteringDiffuseMethod();
  3. cubeMaterial.specularMethod = new FresnelSpecularMethod();
  4. cubeMaterial.shadowMethod = new DitheredShadowMapMethod();

复制代码

其实这两种设置方式的区别仅在于渲染时的执行优先级,如果对哪个Method被先执行没有特殊要求的话,完全可以使用第一种方式来添加所有的Method

渲染时的执行优先级依次为:
normalMethod>ambientMethod>shadowMethod>diffuseMethod>specularMethod>colorTransform>其它通过addMethod()方法添加的Method

一些常用的Method:
(表怪偶又隐藏内容,偶只是想知道自己写的东西到底对多少人有帮助...^^)

EnvMapMethod
环境贴图方法,想要物体表面能反射周围环境(如不锈钢,有机玻璃材质)?用这个就对啦....Wahahaha.....我到底在笑什么?....= =!

  1. //创建一个skybox,6块贴图大家自己找,官方demo里有
  2. var cubeTexture:BitmapCubeTexture = new BitmapCubeTexture("6块贴图")
  3. scene.addChild(new SkyBox(cubeTexture));
  4. //创建一个宽高长均为500的方块
  5. var cubeGeometry:CubeGeometry = new CubeGeometry(500, 500, 500);
  6. var cubeMaterial:ColorMaterial = new ColorMaterial();
  7. cubeMaterial.specular = 0.8;
  8. cubeMaterial.alpha = 0.5;
  9. //因为要反射skybox的环境,所以共用skybox的贴图材质
  10. //如果你想反射别的东西,也可以使用别的材质
  11. cubeMaterial.addMethod(new EnvMapMethod(cubeTexture));
  12. var cubeMesh:Mesh = new Mesh(cubeGeometry, cubeMaterial);
  13. scene.addChild(cubeMesh);

复制代码

FresnelSpecularMethod
菲涅尔镜面贴图方法,我不想把这东西解释的太复杂,下面有一段摘录自百度百科的内容,相信大家一看就能明白....
(我们站在湖边的时候,低头看脚下的水,水是透明的,反射不是特别强烈;远处的湖面,你会发现水并不是透明的,并且反射非常强烈。这就是“菲涅尔效应”....摘自百度百科)
说白了就是把光线反射变得更柔和,可以使用在湖面材质上,也可以配合SSS散射方式使用在皮肤材质上

http://bbs.9ria.com/thread-134768-1-1.html

昨天从论坛里看到一个汽车演示的网站地址, 内心惊叹实在是没有比这更适合的教材了,

所以很不厚道的把所有资源都抓了下来,

花了一天破解,重构,加注释.....

然后,这就是你们现在所能看到的:
 

特性包括:
7大品牌车辆高清模型及贴图
车身随意换颜色
轮壳随意换颜色
手动全景360度旋转
自动全景360度旋转
模型加载
多Mesh组合
位图阴影实现
玻璃
反射
镜面
还有更多.....

这一切的一切,全部都在下面的源码里....

这已经可以说是一个完完整整的商业展示项目了....

希望各位给我一些反馈,以表示对我的支持,谢谢

源代码:

本帖隐藏的内容

http://115.com/file/e74eq556#CarDemo-source.zip

编译文件:

本帖隐藏的内容

http://115.com/file/c28j9q9t#CarDemo-bin.zip

这次提供的Demo使用了jiglib的物理引擎和瘳诚开发的Away3d粒子系统中的一个烟雾效果范例

jiglib地址
http://www.jiglibflash.com/blog/2012/03/21/jiglibflash-updated-for-away3d-4-0-beta/

瘳诚的Away3d粒子系统地址
https://github.com/liaocheng/away3d-particles-system

照例上图:

键盘的"上下左右"键控制移动,"空格"键刹车

我只为地板添加了刚体效果,建筑并没有,这是特意留给大家自己去添加的喔...heihei.....

源码我就不贴出来了,请大家自己下载吧

源码在此:

http://115.com/file/e781z3fu#%20CarDemo-jiglib.zip

Demo特性:
三种相机控制器(自动,手动,驾驶)
汽车转向时轮子会跟着动(这好像是废话....= =!)
物体加速时的力回馈效果
粒子特效
....
好像还有什么...
其它的与上次的Demo一样
剩下的忘掉了,大家自己去看吧....:p

顺便说一下,如果你刚接触Away3D,推荐还是看看这个内容:
Away3D4.0入门--高清汽车(1)
这是第一部,内容比较简单,没有物理引擎与粒子效果,代码比较容易看懂^^

好吧,好久好久好久没有露面了....最近忙着参加阿里云开发者大赛去了,并且有幸能进入Top100,可惜 Top20没我什么事,所以....悲剧啊......

前两天心血来潮研究了一下Away3d官方早期的demo,发现其中有个路径动画满有趣的,但可惜已经不能在新版本的Away3d引擎下正常运行了,稍微改了改跑起来后,发现....嗯.....那就顺便再加些功能吧.....

Ok,下面大家将看到,4种镜头切换方式,切换方法为按键盘上的数字1~4.....

1.全局显示

2.跟随飞车并显示指定方向

3.跟随飞车并显示前方

4.环绕跟随

演示地址1
-----------------------------------------------------------------

另外,再附赠路径变色Demo一枚

(其中银色为管道原色,金色为灯光,红色(会随机变化)为颜色动画)

2013-10-22 11:41:17 上传

下载附件 (142.31 KB)

演示地址2

本帖隐藏的内容

源码在此,请用力猛击

P.S:有人说源码缺两个文件,嗯....

如果你们研究过高清汽车的Demo的话,应该知道它们在哪里....:p

Away3D4.0入门教程相关推荐

  1. [Away 3D] Away3D4.0入门教程(1)--这个世界的基础

    大多数Flash程序员想要接触3D项目的时候,应该都和我一样,最关心的是怎么造一座山,怎么在场景里显示流动的河水,或是怎么让模型动起来(奔跑,攻击,或是跳舞),又或是怎么才能给人物换装,怎么让人物装备 ...

  2. air调用java,AIR2.0入门教程:与Java应用交互

    在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++ 的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的 ...

  3. pip更新失败_最全Tensorflow2.0 入门教程持续更新

    最全Tensorflow 2.0 入门教程持续更新: Doit:最全Tensorflow 2.0 入门教程持续更新​zhuanlan.zhihu.com 完整tensorflow2.0教程代码请看ht ...

  4. creo如何更改打开时显示方式_Creo4.0入门教程(3):设置工作目录和打开以及保存文件...

    原标题:Creo4.0入门教程(3):设置工作目录和打开以及保存文件 目标: 1.设置工作目录 2.文件的打开和保存 1.设置工作目录 工作目录是打开和保存文件的指定位置.通常默认工作目录为启动 Cr ...

  5. RxJava 2.0 入门教程

    RxJava 2.0 入门教程 RxJava 2.0 是来自NetFlix的开源java异步编程框架.和java 8 lambda表达式很接近,响应式编程的基本构建快是被观察对象(Observable ...

  6. c语言编程:vc++6.0入门教程及习题_百度文库,C语言编程:vc++6.0入门教程及习题.doc...

    C语言编程:vc++6.0入门教程及习题.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址 ...

  7. matlab 7.1教程pdf,MATLAB7[1].0入门教程.ppt

    <MATLAB7[1].0入门教程.ppt>由会员分享,可在线阅读,更多相关<MATLAB7[1].0入门教程.ppt(34页珍藏版)>请在人人文库网上搜索. 1.1/33,2 ...

  8. Web 3.0入门教程

    Web 3.0入门教程 课程英文名:What Is Web3? 此视频教程共5.5小时,中英双语字幕,画质清晰无水印,源码附件全 下载地址 百度网盘地址:​​​​​​​https://pan.baid ...

  9. python2.0教程_django2.0入门教程第一节

    什么django django是用python语言写的一个web框架.web框架的作用有以下几点: 减少重复的繁琐的工作,web开发中有很多重复的没有技术含量的工作,web工作可以将这些工作封装好,或 ...

最新文章

  1. cassandra命令
  2. 控制流分析-自然循环识别
  3. Paddle 网络中的Tensor 数据结构
  4. PHP + Redis 实现消息队列
  5. Scala操作外部数据
  6. Kafka 是如何保证数据可靠性和一致性
  7. 10鼎信诺为什么安装不了_鼎信诺审计软件一周常见问题(4.134.17)
  8. 高级php进修,PHP进修笔记一:PHP的数据类型与常量应用
  9. CSS 背景附着 background-attachment属性
  10. win7 查看计算机位数,Win7系统电脑操作系统位数的多种查看方法
  11. 运放 采集电压 电流高端采样
  12. 初创企业购买企业邮箱_什么是技术债务? 为什么几乎每个初创企业都拥有它?...
  13. 一分钟告诉你通话记录能查到多久前的!
  14. MFC添加界面的背景图片方法总结
  15. unity-shader-基于图像的光照IBL
  16. C、C++、java的区别
  17. 网络工程大一课程c语言,网络工程专业主要开哪些课程?
  18. 模型压缩,裁剪,量化
  19. springboot+easyexcel实现固定表头+动态表头的数据导出
  20. web实现消息推送及桌面提醒

热门文章

  1. 全民热衷“合成大西瓜”,游戏外挂上热搜,不愧是程序员!
  2. mybatis代码自动生成工具之maven插件mybatis-generator-maven-plugin(mybatis逆向工程)
  3. g.SetGDIHigh()错误
  4. Apache Curator
  5. 淘宝宝贝标题的优化设置技巧
  6. 你觉得创业失败后的那些人,再去公司上班,能待下去吗?
  7. 解决img撑大父盒子
  8. Flume采集数据利器
  9. mysql 快速入门,SOAR 101 快速入门指南
  10. 第127讲:Hadoop集群管理之安全模式解析及动手实战学习笔记