A3D教程2 Building geometry(A3D官网教程翻译).doc_第1页
A3D教程2 Building geometry(A3D官网教程翻译).doc_第2页
A3D教程2 Building geometry(A3D官网教程翻译).doc_第3页
A3D教程2 Building geometry(A3D官网教程翻译).doc_第4页
A3D教程2 Building geometry(A3D官网教程翻译).doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Tutorial 2 Building geometry在本讲中,我们要用A3D提供的方法来建一座房子。我们的房子十分简单,只包括四面墙和一个屋顶,但是通过它,我们将学会如何创建点和面片(face)以及如何利用面片来生成表面(surface)。先建立一个名为GeometryTutorial的工程,然后把源代码加进去,再导入A3D的SWC类库。在前一讲中,我们已经了解主类的结构,包括场景设置,相机添加及必要的事件侦听。本讲与前一讲的不同之处在于我们要用一个House类的实例来代替之前的立方体图元。House类House类是alternativa.engine3d.core.Mesh类的子类。Mesh类已经为我们提供了多边形对象的创建方法在创建对象之前我们首先要创建各个点。为了知道房子有几个点,我们在XY平面YZ平面分别画出房子的投影,如下所示:a.XY平面投影 b.YZ平面投影很显然,我们要画的房子有16个点。有8在个四个墙面的墙角上,另外8个在屋顶的各个角上。我们先来约定一套点名字的命名规则:一个点的名字由它所在的平面的名字和所属的XY平面内象限的编号共同组成。图(a)各个象限的编号,图(b)给出了各个平面的名字。因此,东墙(此处东指的是X轴的指向)由以下各点组成:box_bottom_3,box_bottom_0,box_top_0,ox_top_3。现在,我们来写一个在房子平面上创建点的方法:/矩形宽度沿X方向,长度沿Y轴方向/参数依次为:矩形宽度,矩形长度,矩形Z坐标,点的名字private function addRectangleVertices(rectWidth:Number, rectLength:Number, rectZ:Number, idPrefix:String):void var hw:Number = rectWidth / 2;var hl:Number = rectLength / 2; /添加第一象限里的点createVertex(hw, hl, rectZ, idPrefix + _0);/添加第二象限里的点createVertex(-hw, hl, rectZ, idPrefix + _1);/添加第三象限里的点createVertex(-hw, -hl, rectZ, idPrefix + _2);/添加第四象限里的点createVertex(hw, -hl, rectZ, idPrefix + _3);现在我们用这一方法创建房子所需的所有点。/生成box底部的矩形各顶点addRectangleVertices(houseWidth, houseLength, 0, box_bottom);/生成box顶部的矩形各顶点addRectangleVertices(houseWidth, houseLength, wallsHeight, box_top);/生成roof底部的矩形各顶点addRectangleVertices(roofBottomWidth, roofBottomLength, wallsHeight, roof_bottom);/生成roof顶部的矩形各顶点addRectangleVertices(roofTopWidth, roofTopLength, wallsHeight + roofHeight, roof_top);下一步:创建面片。面片是由各个点按逆时针顺序(沿着面的法向看去)连接在一起而确定的。/wall面数组var wallsFaces:Array = ;/roof面数组var roofFaces:Array = ;/roof底面数组var roofBottomFaces:Array = ;/为XY平面的每一象限创建面for (var i:int = 0; i 4; i+) /用与运算来确定j值var j:int = (i + 1) & 3; /创建wall面,并存入数组中以备之后生成表面/前三个参数为所需顶点,第四个为面片的名字wallsFaces.push(createFace(box_bottom_ + i, box_bottom_ + j, box_top_ + j, box_top_ + i, wall_ + i); /创建roof斜面,并存入数组中以备之后生成表面roofFaces.push(createFace(roof_bottom_ + i, roof_bottom_ + j, roof_top_ + j, roof_top_ + i, roof_slope_ + i);/创建roof底面,并存入数组中以备之后生成表面roofBottomFaces.push(createFace(roof_bottom_ + j, roof_bottom_ + i, box_top_ + i, box_top_ + j, roof_bottom_ + i);/创建roof顶面roofFaces.push(createFace(roof_top_3, roof_top_0, roof_top_1, roof_top_2, roof_top);/创建box底面createFace(box_bottom_3, box_bottom_2, box_bottom_1, box_bottom_0, box_bottom);至此,房子的几何架构已经完成。为了使房子在屏幕上呈现出来,我们需要给不同的面片添加材质。因为在A3D中,我们只能在表面(面片的集合)上添加材质,所以我们要先为房子创建各个表面,然后再进行贴图。代码如下:/创建表面。这里我们用到了之前建好的点数组/创建wall表面,参数分别为面数组,表面名字createSurface(wallsFaces, walls);/创建roof斜表面和顶表面createSurface(roofFaces, roof);/创建roof底表面createSurface(roofBottomFaces, roof_bottom);/创建box底表面createSurface(box_bottom, box_bottom);/设置表面材质。我们使用线框材质以保持房子简洁。/把wall设置为白色setMaterialToSurface(new WireMaterial(1, 0xFFFFFF), walls);/把roof设置为黄色setMaterialToSurface(new WireMaterial(1, 0xFFFF00), roof);/把roof bottom这是为红色setMaterialToSurface(new WireMaterial(1, 0xFF0000), roof_bottom);/把box bottom设置为绿色setMaterialToSurface(new WireMaterial(1, 0x00FF00), box_bottom);把以上代码写入House类中,编译运行后结果如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论