当前位置: 首页 >服务端 > Away3d实例教程

Away3d实例教程

本篇会包含以下内容:

  • 嵌入外部图片(Away3D支持所有falsh支持的格式图片),用于贴图。
  • 贴图原理
  • 几种贴图类型:BitmapMaterial,TransformBitmapMaterial,PhongBitmapMaterial.

本例会用到的图片:

Away3d实例教程 _ JavaClub全栈架构师技术笔记 Away3d实例教程 _ JavaClub全栈架构师技术笔记 Away3d实例教程 _ JavaClub全栈架构师技术笔记 Away3d实例教程 _ JavaClub全栈架构师技术笔记

先看本例子最终效果:点击观看

再看完整代码(Flex):

1:  package
2:  {
3:  import away3d.cameras.Camera3D;
4:  import away3d.containers.Scene3D;
5:  import away3d.containers.View3D;
6:  
7:  import away3d.materials.BitmapMaterial;
8:  import away3d.materials.PhongBitmapMaterial;
9:  import away3d.materials.TransformBitmapMaterial;
  10:  
  11:  import away3d.primitives.Cube;
  12:  import away3d.primitives.Cylinder;
  13:  import away3d.primitives.Sphere;
  14:  import away3d.primitives.Torus;
  15:  import away3d.containers.ObjectContainer3D;
  16:  import away3d.lights.DirectionalLight3D;
  17:  
  18:  import away3d.core.math.Number3D;
  19:  import away3d.core.utils.Cast;
  20:  
  21:  import flash.display.Sprite;
  22:  import flash.events.Event;
  23:  
  24:  [SWF(width="700",height="600",backgroundColor="#000000")]
  25:  public class textmapping extends Sprite
  26:  {
  27:  //声明变量
  28:  private var view:View3D;
  29:  private var cam:Camera3D;
  30:  private var sce:Scene3D;
  31:  
  32:  private var group:ObjectContainer3D;
  33:  private var sphere:Sphere;
  34:  private var cube:Cube;
  35:  private var centerCube:Cube;
  36:  private var torus:Torus;
  37:  private var cylinder:Cylinder;
  38:  private var light:DirectionalLight3D;
  39:  
  40:  private var earthMaterial:BitmapMaterial;
  41:  private var checkerMaterial:BitmapMaterial;
  42:  private var away3dMaterial:PhongBitmapMaterial;
  43:  private var tiledAway3dMaterial:TransformBitmapMaterial;
  44:  private var woodMaterial:BitmapMaterial;
  45:  
  46:  private static const ORBITAL_RADIUS:Number = 150;
  47:  //插入图片资源用于贴图(分类flex里用Embed标签、Cast.bitmap嵌入、使用图片资源,flash cs3如何嵌入看附录1)
  48:  [Embed(source="resources/earth.jpg")] private var earthImage:Class;
  49:  [Embed(source="resources/away3D.png")] private var away3dImage:Class;
  50:  [Embed(source="resources/checker.jpg")] private var checkerImage:Class;
  51:  [Embed(source="resources/wood.jpg")] private var woodImage:Class;
  52:  public function textmapping():void
  53:  {
  54:  //3D初始化 
  55:  init3D();
  56:  //创建场景  
  57:  createScene();
  58:  //添加侦听器-逐帧执行onEF(渲染并产生运动)
  59:  this.addEventListener(Event.ENTER_FRAME,onEF);
  60:  }
  61:  
  62:  private function init3D():void
  63:  {
  64:  //初始化摄像机
  65:  cam=new Camera3D({zoom:25, focus:30, x:-200, y:400, z:-400});
  66:  cam.lookAt(new Number3D(0, 0, 0));
  67:  //初始化场景
  68:  sce=new Scene3D();
  69:  //初始化视口
  70:  view=new View3D({camera:cam,scene:sce,x:350,y:300});
  71:  addChild(view);  
  72:  };
  73:  private function createScene():void
  74:  {
  75:  //生成位图材质(78行定义的away3dMaterial是phongBitmapMaterial类型,该类型需要光源)
  76:  earthMaterial=new BitmapMaterial(Cast.bitmap(new earthImage())); 
  77:  checkerMaterial=new BitmapMaterial(Cast.bitmap(new checkerImage()));
  78:  away3dMaterial=new PhongBitmapMaterial(Cast.bitmap(new away3dImage()),{smooth:true, precision:2});
  79:  tiledAway3dMaterial=new TransformBitmapMaterial(Cast.bitmap(new away3dImage()),{repeat:true, scaleX:.5, scaleY:.5});
  80:  woodMaterial=new BitmapMaterial(Cast.bitmap(new woodImage()));
  81:  
  82:  //添加光源(有了光源phongBitmapMaterial才能有光影效果,有光影效果会在下节讲到)
  83:  light=new DirectionalLight3D();
  84:  light.position=new Number3D(100,100,-200);
  85:  sce.addChild(light);
  86:  //新建容器并显示
  87:  group=new ObjectContainer3D();
  88:  sce.addChild(group);
  89:  //新建3D元素,并使用material属性为3D元素添加贴图材质
  90:  //新建3D元素-centerCube
  91:  centerCube=new Cube({material:away3dMaterial,width:75,height:75,depth:75});
  92:  group.addChild(centerCube);
  93:  //新建3d 元素 - sphere
  94:  sphere=new Sphere({radius:50,segmentsW:10,segmentsH:10,material:earthMaterial});
  95:  group.addChild(sphere);
  96:  sphere.x=ORBITAL_RADIUS;
  97:   //新建3d 元素 - totrus
  98:   torus=new Torus({radius:50,tube:20,segmentsT:8,segmentsR:16,material:checkerMaterial});
  99:   group.addChild(torus);
 100:   torus.x=-ORBITAL_RADIUS;
 101:    //新建3d 元素 - cylinder
 102:  cylinder=new Cylinder({radius:25,height:100,segmentsW:16,material:woodMaterial});
 103:  group.addChild(cylinder);
 104:  cylinder.z=ORBITAL_RADIUS;
 105:   //新建3d 元素 - totrus
 106:   cube=new Cube({width:75,height:75,depth:75,material:tiledAway3dMaterial});
 107:   group.addChild(cube);
 108:   cube.z=-ORBITAL_RADIUS;
 109:  };
 110:  private function onEF(e:Event):void
 111:  {
 112:   // 旋转3D物体
 113:  group.yaw(1);
 114:  
 115:  sphere.yaw(-4);
 116:  cube.yaw(-4);
 117:  cylinder.yaw(-4);
 118:  torus.yaw(-4);
 119:  //一定要渲染哟
 120:  view.render();
 121:  };
 122:   
 123:  }
 124:  }
 
这些平面图片是如何贴到3D模型上的呢,看下图就明白了:
Away3d实例教程 _ JavaClub全栈架构师技术笔记 
更详细内容看:http://blog.tartiflop.com/2008/11/first-steps-in-away3d-part-3-texture-mapping/

 

附录1:在flash cs3或更早版本嵌入图片

  • 将图片导入库
  • 右击图片->链接-> 输入类名

    见图(以新建earthMaterial为例):

    Away3d实例教程 _ JavaClub全栈架构师技术笔记

    这样,我们只要将76行代码换成earthMaterial=new BitmapMaterial(new earth()); 就好了

作者:nooon
来源链接:https://www.cnblogs.com/nooon/archive/2009/05/28/1491248.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/server/113131.html

标签:Mapping
分享给朋友:

“Away3d实例教程” 的相关文章

实习第一周(Golang) 2022年05月14日 16:18:05
[C++]VC自定义发IP包例子 2022年05月17日 20:41:27
Logger的级别 2022年05月19日 20:04:12
Spring Boot+微信小程序 2022年05月20日 21:27:40
Hugo LoveIt主题配置与使用 2022年05月23日 21:56:27
关于设计模式 2022年05月23日 23:02:13
信息系统项目管理案例2 2022年05月24日 22:36:24