第五章Materials, Lights, and Shading

第五章Materials, Lights, and Shading

 

Cast工具类 在包away3d.utils

Cast.bitmap(data:*):BitmapData 得到某显示对象data的像素数据,<常用>

 

动态改变材质只需要切换3d对象的material属性即可

如:

             _cube.material = _ colorMaterial;

             _cube.material = _ bitmapMaterial;

可以在colorMaterialbitmapMaterial材质之间进行切换

这里和pv3d里的材质的切换一样都是赋予新的材质对象

 

另外还有一种是直接改变贴图而不new新材质 主要是通过改变materialmovie属性(material.movie=新的显示对象(Sprite类型))并且刷新 material.update()

pv3d中一样的:material.movie=新的显示对象

并且也要刷新 material.drawBitmap()

 

 

 

贴图进行baking可以产生shading阴影的效果,

 

WireframeMaterial

只显示网格mesh<即一些线和点>,而无任何其他材质的填充

创建:

var _wfMaterial:WireframeMaterial=new WireframeMaterial ();

_wfMaterial.wireColor = 0x000000;//设置线框的颜色默认为黑色

 

 

 

 

Using lights and shading materials

在现实生活中,光线通过物体的表面反射而进入我们的眼睛中进行成像,没有光我们将看不到任何东西,计算机通过模仿处理的这一过程叫做shading !

 

PointLight3D----点光源

点光源发射的光是四面八方,全方位的!并且物体反射的光的强度与距光源的距离有关距离越远,反射的光越弱 !反射光强:点光源光强 * 1/d^2 . 光强属性brightness

 

 

 

 

DirectionalLight3D-------平行光

平行光源发射的光只沿着一个方向。DirectionalLight3D的创建需要指定一个向量。该向量就是光线的方向。所属属性是direction.

AmbientLight3D-----环境光

AmbientLight3D照亮整个场景,照亮3d对象的每一个面,每一个网格线。也就是场景上所有的地方都能照射到

 

.

 

 

创建光源

下面的创建适合于所有的光源类

 

var light : PointLight3D = new PointLight3D();

light.color = 0xFF0000;//光的颜色

myView.scene.addLight(light);//将光添加进场景

 

每一种光都有color属性,即光的颜色!

 

 

brightness  光强属性 默认值为1

假如创建多个光源,光强会进行叠加(通过颜色).点光源的光强和距离有光 . brightness  代表的光强是距离光源500单位远的光强

 

 

brightness  光强的来源:

光源发射的光有三种属性 一是用于环境(环境光ambient)

二是 用于光的漫反射(散射光diffuse),三是用于反射光(反射光specular) 一般物体的呈现也是靠这三种光呈现的

三种:

1:环境光属性ambient:

直接来源于光源发出的环境光

2:散射光属性diffuse

直接从光源里发出

3:反射光属性specular

光源照到对象上反射回来的光

 

上面3个光属性决定了3d对象的shading 它们的值都是在0-1之间

例如下面的图片显示的各个光属性值是:

【注: 光中的三属性值 为0-1,shading material中也有这三属性在shading material中设置的是各个光属性的颜色值】

 

myPointLight.ambient = 0.3;//环境光,占了光源环境光的0.3

myPointLight.diffuse = 0.7;//漫反射 占了散射光的0.7

myPointLight.specular = 1;//反射光  完全反射

 

 

 

 

 

Shading materials

注:Shading materials要少用,因为它很耗性能

 

Flat shading materials

效率很高,也是最常用的shading材质

材质类是ShadingColorMaterial WhiteShadingBitmapMaterial

 

WhiteShadingBitmapMaterial的光的颜色是白色。不能改.

ShadingColorMaterial光的颜色可根据光的三属性设置

 

 

 

Shading material中的光的三属性设置 :

ShadingColorMaterial的创建

_cMaterial = new ShadingColorMaterial();

_cMaterial.ambient = 0xff0000;

_cMaterial.diffuse = 0x008800;

_cMaterial.specular = 0x0000ff;

WhiteShadingBitmapMaterial的创建

 

_bMaterial=new WhiteShadingBitmapMaterial(Cast.bitmap(new AppleImage()));

 

使用shading material 时还要配合光源使用

 

 

 

normal map shading

nomal map shading 就是在使用外部软件 如maya 3dmax  3d制作软件 在制作模型使所使用的贴图

 

DOT3 materials 就是使用的这种贴图

一般这种贴图都是已经在3d软件中制作好了的

我们只需要加载外部模型的mesh 以及贴图就可以了

 

一般和shading有关的材质也具有光的三属性ambient

Diffuse specular dot3d 材质也具该三属性 因为dot3d material 也是属于shading material 的。

 

     Dot3BitmapMaterial的创建

Dot3BitmapMaterialF10 类是fp10版的

Dot3BitmapMaterial fp9版的

推荐使用Dot3BitmapMaterialF10

sphereMaterial=new Dot3BitmapMaterialF10(texture, sphereMap);//texture是指模型的外貌颜色,即在3d模型轮廓上在贴一层图片 , sphereMap指定了3d模型的轮廓 (一般情况下,这两个图都是在3d软件中制作的) ,轮廓的图片(后一个参数)必须要来自3d软件制作  贴图外表可以自己根据情况切换

 

其他的Dot3 Materials类似

 

 

Using environment shading

environment shading

指的是 3d对象相当于镜子一样,周围的环境在3d对象表面呈现

相关材质类:

EnviroColorMaterial EnviroBitmapMaterial

第一个参数一个是颜色值,另一个时位图数据bitmapData  <其实位图就是不同的颜色值>

第二个参数都是环境图片数据bitmapData

 

参数reflectiveness 值在0-1之间 表示呈现环境图片的清晰度(饱和度)

 

 

 

创建:

var texture:BitmapData = Cast.bitmap(AppleImage);

var envMap:BitmapData = Cast.bitmap(EnviroMap);

_colorMaterial = new EnviroColorMaterial(0x225588,envMap);

_bitmapMaterial = new EnviroBitmapMaterial(texture,envMap);

_cube.material = _colorMaterial;

_sphere.material = _colorMaterial;

_ape.material = _bitmapMaterial;

//改变material的属性后 away3d会自动刷新的 相关3d对象

_colorMaterial.reflectiveness=0.5;

_bitmapMaterial.reflectiveness = 0.8;

 

 

 

 

MovieMaterial pv3d里的呈现一样.

 

属性用法:

interactive 属性设为true 使其具有交互性

smooth true;使动画图像变得清晰 以及文字变得清晰<在文字呈现方面一定要设为true 要不然呈现的文字很不清晰>

 

autoUpdate属性以及update()函数

 

autoUpdate默认为false,表示是否在每一帧都进行更新!一般当movieClip是只有一帧的话就设为flase  多帧动画的话就设为true

movieclip里面有多帧,但是需要通过交互显示里面的每一帧。这样的情况下我们将autoUpdate设为false 通过程序控制显示具体的某一帧,再使用update()函数刷新<pv3ddrawBitmap() 类似>

 

 

创建 :

 

[Embed(source="../assets/interactiveTexture.swf")]

private var InteractiveTexture : Class;

movieMat = new MovieMaterial(new InteractiveTexture());

_movieMat.interactive = true;

_movieMat.smooth = true;

_cube.material = _movieMat;

 

 

 

VideoMaterial

VideoMaterial继承于movieMaterial 可以播放flv格式的视频

file属性指定flv视频地址

创建:

var videoMat : VideoMaterial = new VideoMaterial();

videoMat.file = '../assets /Away3D_Showreel2010.flv'

_cube.material = videoMat;

该材质类还有其他的方法比如play() pause() seek()等 可以控制视频的播放

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值