`
qnf782rm
  • 浏览: 14867 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

第五章Materials, Lights, and Shading

 
阅读更多

第五章Materials, Lights, and Shading
2010年10月08日
  第五章Materials, Lights, and Shading
  Cast工具类 在包away3d.utils中
  Cast.bitmap(data:*):BitmapData 得到某显示对象data的像素数据,
  动态改变材质只需要切换3d对象的material属性即可
  如:
  _cube.material = _ colorMaterial;
  _cube.material = _ bitmapMaterial;
  可以在colorMaterial和bitmapMaterial材质之间进行切换
  这里和pv3d里的材质的切换一样都是赋予新的材质对象
  另外还有一种是直接改变贴图而不new新材质 主要是通过改变material的movie属性(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;使动画图像变得清晰 以及文字变得清晰
  autoUpdate属性以及update()函数
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics