1、第三章 VRML三维立体造型,大纲,创建三维立体造型 造型的空间变换,基本的三维立体造型,在VRML中,创建三维立体造型是最重要、最基础的工作; Shape节点是VRML核心节点;学会了Shape造型节点,就掌握了vrml设计的基本内容。 Shape空间造型模型节点: Shape节点定义了立体造型的几何形状、尺寸、色彩、材质、纹理等外观特征;语法格式: Shape appearance NULL #exposedField SFNode 外观节点 geometry NULL #exposedField SFNode 几何节点 exposedField SFNode 表示为暴露域,其域值是节点。
2、,基本的三维立体造型,appearance 域 定义立体造型的外观特征,值可为空或Appearance节点; 当为空,表示立体造型外观为白色无光照效果; 当为Appearance节点时,可以为造型设置材质、色彩、纹理等外观属性。,基本的三维立体造型,geometry域 定义立体造型的几何形状,域值可以选择为空或十种造型节点: 四种简单的几何造型节点: Box立方体节点; Sphere球体节点; Cone圆锥体节点; Cylinder圆柱体节点; 五种复杂几何造型节点: PointSet点集节点 IndexedLineSet线集节点 IndexedFaceSet面集节点 Extrusion挤出造
3、型节点 ElevationGrid网格标高造型节点 一种文本造型节点: Text文本造型节点,本节课的主要内容: appearance域 geometry域的四种简单的造型节点,geometry域的四种简单的造型节点,1.Box立方体节点 用来创建以坐标原点为中心的正方体、长方体几何造型。 格式: 节点名称 域名称 域值 #域值类型 Boxsize 2.0 2.0 2.0 #SFVce3f size域的域值设定了三维立方体几何造型的尺寸大小,默认值为2.0 2.0 2.0,是一个以坐标原点为中心,长、宽、高为2.0单位的立方几何造型。 举例 3-1box.wrl,2.Sphere球体节点 创建
4、以坐标原点为中心的球体几何造型; 格式: 节点名称 域名称 域值 #域值类型 Sphereradius 2.0 #SFFloat radius域的域值表示球体的半径,默认值为1.0单位; 举例:3-2 sphere.wrl,geometry域的四种简单的造型节点,3.Cone立方体节点 创建以原点为中心,以Y轴为对称轴的圆锥体几何造型 格式: 节点名称 域名称 域值 #域值类型 ConebottomRadius 1.0 # SFFloatheight 2.0 # SFFloatside TRUE # SFBoolbottom TRUE # SFBool bottomRadius设置了圆锥体底面
5、半径尺寸 height设定圆锥体的高度 side是否创建圆锥体的锥面,默认值为TRUE bottom是否创建圆锥体的底面,默认值为TRUE 举例: 3-3cone.wrl,geometry域的四种简单的造型节点,4.Cylinder圆柱体节点 创建以坐标原点为中心,以Y轴为对称轴的圆柱体几何造型 格式: 节点名称 域名称 域值 #域值类型 Cylinderradius 1.0 #SFFloatheight 2.0 #SFFloatside TRUE # SFBoolbottom TRUE # SFBooltop TRUE # SFBool top是否创建圆柱体的顶面,默认值为TRUE 举例:3
6、-4cylinder.wrl,geometry域的四种简单的造型节点,appearance域,Appearance节点 语法格式: Appearancematerial NULL #exposedField SFNode texture NULL #exposedField SFNode textureTransform NULL #exposedField SFNode 1. material域用于设定立体造型外观的材质属性,包括颜色、透明度、发光度、反光度等。域值包含一个Material材质节点或者取NULL空值,造型外观材质属性是通过Material材质节点来设置的。(1)该域值的默认值
7、为空,即appearance Appearance 或者appearance Appearancematerial NULL,表示几何体本身为发白光的材质,造型为纯白色,无亮度对比。,(2)如果要设置为appearance Appearancematerial Material ,则表示包含一个默认材质节点,几何体采取默认材质的光照,呈现浅灰色造型,有亮度比。 举例:,造型的外观设计,Material材质节点:设置有关材质的属性,可以创建出金属、玻璃、石头等属性。 Material节点 语法 Material diffuseColor 0.8 0.8 0.8 #exposedField SFC
8、olorambientIntensify 0.2 #exposedField SFFlotspecularColor 0 0 0 # exposedField SFColoremissiveColor 0 0 0 # exposedField SFColorshininess 0.2 #exposedField SFFlosttransparency 0 #exposedField SFFlot ,造型的外观设计,diffuseColor域 设定物体的漫反射颜色:当光照射在物体表面时,物体表面向各个方向反射的基本色彩。 域值由三个浮点值组成,分别代表红、绿、蓝三原色(RGB)。 默认值为0.8
9、 0.8 0.8,浅灰色。ambientIntensity域 设定有多少环境光线被物体表面反射。 环境光各向同性,以diffuseColor*ambientIntensity来计算。 默认值为0.2。,造型的外观设计,specularColor域 设定镜面反射光的颜色。 入射角等于反射角是镜面反射的基本原理。 设置了镜面反射,会因观察角度变化感受到强弱不同的反射效果。 默认值为0 0 0 ,反射光为黑色。emmisiveColor域 设定发光物体产生光的颜色。 默认值为0 0 0,表示不发光。,造型的外观设计,shininess域 设定物体表面的亮度。 取值范围从漫反射表面的0到高度抛光表面的
10、1; 较小的取值表示像纤维材质; 较大的取值表示像金属材质。 默认值为 0.2。Transparency域 设定物体的透明度。 取值范围从不透明的0到完全透明的1。 默认值为0.0,表示不透明。自由练习,2.texture域的域值用来设定立体造型表面静态或者动态的纹理贴图。该域包括三种不同类型的纹理节点:ImageTexture图像纹理节点、MovieTexture电影纹理节点和PixelTexture像素纹理节点。默认值为空,表示无纹理贴图。(后面章节介绍) 3.textureTransform域的域值用于对使用的纹理贴图进行坐标变换。该域包含一个TextureTransform纹理坐标变换
11、节点,对texture域中纹理节点指定的纹理贴图进行裁剪、旋转设置,使相同的纹理贴图产生不同的纹理效果。(后面章节介绍),appearance域,造型的空间变换Transform,VRML中创建的立体造型都是以默认坐标系的原点为中心进行的,当创建多个时,会重叠在一起,而且不可能多个模型都在空间的同一个位置,因而需要进行相关的变换。 Transform坐标变换节点用于创建一个新的坐标系,通过对坐标系的平移、旋转、缩放操作,实现对立体造型位置、角度、缩放比例的改变。,造型的空间变换,Transform变换节点用于创建一个或多个不同于默认(原始)坐标系的新坐标系。 Transform结点的语法 Tr
12、ansformchildren #exposedField MFNode 参与变换的造型节点集translation 0 0 0 #exposedField SFVec3f 新坐标系的平移值rotation 0 0 1 0 #exposedField SFRotation 新坐标系的旋转scale 1 1 1 #exposedField SFVec3f 新坐标系的缩放系数scaleOrientation 0 0 1 0 #exposedField SFRotation bboxCenter 0 0 0 #SFVec3fbboxSize -1 -1 -1 #SFVec3fcenter 0 0 0
13、 #exposedField SFVec3f addChildren #eventIn MFNoderemoveChildren #eventIn MFNode ,造型的空间变换,children域(数组) 设定参与坐标变换的所有子节点; 默认值为空,表示不含任何节点;translation域 (三维) 变换后,新坐标系的原点与原始坐标系原点在XYZ方向上的距离。 默认值为0 0 0 ,与原始坐标系重合,没有偏移。,造型的空间变换,rotation域 (4维) 设定新坐标系与原始坐标系进行旋转的旋转轴和旋转角度。前三个值,表示在原坐标系中的一点; 旋转轴为原坐标系的原点与前三个值表示的点的连线
14、; 旋转轴的方向为原坐标系的原点指向与前三个值表示的点;旋转方向,按右手法则,由第四个值的正、负来确定旋转方向; 旋转角度由第四个值来确定,按照弧度值来确定。0 30 45 60 90 120 135 150 180 0 0.524 0.785 1.047 1.571 2.094 2.356 2.618 3.141默认值为0.0 0.0 1.0 0.0,表示新坐标系以Z轴为旋转轴,但不发生旋转。,造型的空间变换,scale域 (三维) 设定新坐标系在 XYZ方向上的缩放系数。 默认值为1.0 1.0 1.0,表示在XYZ方向上均无缩放。,造型的空间变换,scaleOrientation域 (4
15、维) 用于设定旋转轴和旋转角度。 scaleOrientation域的域值类型与与rotation域的域值类型相同,即scaleOrientation域值制定的是一个旋转轴、旋转方向和旋转角度。与rotation域不同之处在于scaleOrientation域并不能真正地旋转坐标系。 即: 新坐标系的旋转是为了方便缩放操作,先按照旋转后的新坐标系进行缩放,然后再将坐标系旋转回原方位 默认值是0.0 0.0 1.0 0.0,表示旋转轴为Z轴,缩放操作前坐标系无旋转。,造型的空间变换,Center域 设定了一个三维坐标点来指定一个适当的空间旋转中心。 默认值是0.0 0.0 0.0,表示变换的中心
16、点为原始坐标系的原点。 注意:center域是一个旋转和缩放时公用的域值。,造型的空间变换,请记住:在VRML文件中规定了一个固定的坐标系变化顺序。当Transform节点中指定了translation、rotation、scale、scaleOrientation、center域等多个操作时,无论编辑程序中各个域值的排列顺序如何,浏览器默认执行顺序为 先缩放 再旋转 后平移,造型的空间变换,bboxCenter域 设定包含该变换全部子节点的区域的中心坐标点。 默认值是0.0 0.0 0.0,表示默认包围区域的中心点位于坐标系的原点。,造型的空间变换,bboxSize域 设定包含该变换全部子节
17、点的区域在XYZ方向上的尺寸。如果设定该区域,其尺寸必须大到足以涵盖所有子节点。一般不人为设置,由系统自动给出。 默认值为-1.0 -1.0 -1.0,表示不人为设置该区域。,造型的空间变换,addChildren 入事件 将指定的节点增加到子节点列表中。若该节点已在子节点列表中,则事件将被忽略。removeChildren入事件 将指定的节点从组节点的子节点列表中删除。若该节点不在子节点列表中,则事件将被忽略。,造型的空间变换,应用举例: 例3-5.在原始坐标系下创建一个圆柱体和圆锥体的组合造型,蓝色圆柱体和绿色圆锥体的定位点在同一个坐标原点上。,作业:,1.添加Transform坐标变换节
18、点,设定translation 0 1 0,将圆锥体的定位坐标原点在Y方向上平移了1.5个VRML单位,使圆锥体平移到圆柱体的顶端,组合成烟囱的造型。 2.添加Transform坐标变换节点,设定rotation 1 0 0 3.141,将上题中的圆锥体围绕X轴旋转180,形成椎体倒置。 3.银色十字棒造型,添加Transform坐标变换节点,设定域值rotation 0 0 1 1.571,将第二根银色圆柱体沿Z轴旋转90,使两根圆柱体形成十字交叉造型 4.椭圆造型。白色和红色两个定位点相同的球体,白色的圆球没有经过缩放处理,作为参考物。红色球体利用Transform坐标变换节点设定域值为:scale 2 1.1 1.1,X轴的比例放大到两倍,Y、Z轴的比例各放大1.1倍,缩放成椭圆球,材质设置为半透明,形成将白色圆球包围在里面的效果。,