⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vrml第十二章到第二十二章.txt

📁 VRML虚拟现实开发电子书
💻 TXT
📖 第 1 页 / 共 4 页
字号:
				ccw域指定了一个TRUE值或FALSE值,这个值说明了放样图形(以及那些为挤出过程面自动产生的表面)究竟是用逆时针方向(TRUE)中指定的坐标指针来定义还是用顺时针方向(FLASE)中的坐标指针来定义。如果坐标指定沿逆时针(TRUE)或顺时针(FALSE)方向的周界运动,看到的面就是正面。依照solid域中的值,背面的绘制可以被跳过,从而节省制图时间。正面总是要绘制的,ccw域的默认值为TRUE,它说明将使用周界为逆时针方向的面为正面。
				convex域指定了一个TRUE值或FALSE值,这个值说明了放样图形是否是凸面(它不含有插入物或洞)。当使用FALSE值时,VRML浏览器在建立顶盖表面或底盖表面时,自动地把凹隐的放样图形面分割为若干凸面。当使用TRUE值时,VRML浏览器假定不需要分割凹面,节省了这个过程的时间。
				convex域的值只能影响是否建立顶盖面或底盖面。如果使用beginCap和endCap域撤掉了顶盖和底盖,那么顶盖和底盖面就不被建立,同时convex域值是无效的。
				solid域的值指定了一个TRUE值或FALSE值,它说明了挤出过程中定义的几何形状是否是实体造型。当实体造型被建立时,实体邻近表面的正面总是遮蔽了实体上距离稍远的表面的背面。当定义挤出过程产生的是一个实体时,浏览器可以跳过背面的绘制,加快了绘制速度。solid域的默认值,这说明了面构成的是实体造型,同时背面可以不绘制。
				★使用技巧:使用封闭的放样图形而且建立封盖的挤出产物总是实体。如果把solid域值设置成TRUE,那么VRML浏览器就可以更好地完善制图。带有开放的放样图形并且没有封盖的挤出产物被认为是非实体。如果观察者既可以看到造型的外部也可以看到造型的内部,那么需要把solid域值设置设置成FALSE,当观察者向造型内部看时,背面已经被绘出了。如果观察者看不到内部,那么solid域值就可以设置成TRUE,这就使VRML浏览器节省了绘制背面的时间。
				creaseAngle域值指定了一个折痕角的阀值,它以弧度来表示。如果相邻表面之间的夹角比折痕角的阀值小,那么它们将被平滑绘制,从而使它们之间的边界变得模糊。如果这个夹角大于折痕角的阀值,那么这两个表面绘制时将不具有任何平滑的效果,同时它们之间的边界也显得清晰,就像造型上的一个明显折痕。折痕角必须大雨或等于0。creaseAngle域的默认值就是0,它表明任何造型都不进行平滑绘制。
				
				Shape节点的appearance域可以通过Apearance节点为挤出的表面指定了一个整体的色彩。
						[挤压空间造型.wrl]
						[放样路径为空间螺旋线.wrl]

	2、海拔栅格造型
			通过ElevationGrid节点在虚拟世界中创建一个崎岖不平的空间曲面。
			海拔栅格造型方法的原理就是给定空间中的一个Z-X平面栅格,并且用一个列表给出这个平面栅格上每一个栅格点在Y轴方向上的高度。在创建栅格时的参数主要包括所要创建的栅格平面的大小,即给出在X轴和Z轴方向上的栅格点数;栅格点之间的间距,即给出在在X轴和Z轴方向上的栅格间距;还有就是每个栅格点的Y轴方向上的高度。
		ElevationGrid节点语法
				ElevationGrid {
								xDimension			0		#域值类型	SFInt32
								xSpacing			0.0		#域值类型	SFFloat
								zDimension			0		#域值类型	SFInt32
								zSpacing			0.0		#域值类型	SFFloat
								height				[]		#域值类型	MFFloat
								color				NULL	#域值类型	SFNode
								colorPerVertex		TRUE	#域值类型	SFBool
								normal				NULL	#域值类型	SFNode
								normalPerVertex		TRUE	#域值类型	SFBool
								texCoord			NULL	#域值类型	SFNode
								ccw					TRUE	#域值类型	SFBool
								solid				TRUE	#域值类型	SFBool
								creaseAngle			0.0		#域值类型	SFFloat
								set_height					#输出接口	MFFloat
										}

				ElevationGrid节点创建了几何表面,并且可以用作Shape节点的geometry域值。xDimension和zDimension的域值分别指定了X和Z方向中栅格点的数量。用来形成栅格的这些域值都要大于1。海拔栅格中的栅格点的总体数量就是(xDimension×zDimension)。这些域中默认的零值表示没有栅格建立。
				xSpacing和zSpacing域值指定了栅格中行和列间的距离。xSpacing域值指定了X方向计算的列间的距离。zSpacing域值指定了Z方向计算的行间的距离。所有这些值必须大于或等于0。在X和Z方向,默认的栅格空间就是0.0单位。
				height域值指定了一些Y方向上计算的海拔,其中一个值对于每一个栅格点都适用。为了形成zDimension行,海拔值被一行行的列出来,并且每一个都带有xDimension高度值。高度值可以是相对的或绝对的。默认值表示它没有海拔栅格建立。
				当建立海拔栅格时,第1行的第1个栅格点就放在了坐标体系的开端。第1行的第2个栅格点放在了X轴的右测,其相对距离由xSpacing域值指定。第1行中的第3个栅格点置于X轴同样距离处。第1行上所有的xDimension栅格点依此类推。
				海拔栅格的第2行放在第1行的前面,而且沿着Z轴的前方放置,其相对距离由zSpacing域值指定。第3行置于沿Z轴的相同距离处,并且置于第2行前,栅格的所有zDimension行都依此类推。
				表面被自动地建立在栅格的行和列之间。ccw指定了一个TRUE值或FALSE值,这个值表明为海拔栅格建立的表面应当用逆时针(TRUE)或顺时针(FALSE)的周界来创建。当ccw域的值是TRUE时,表面的正面都沿Y轴朝上。依靠solid域值背面都被略去,以节省制图的时间。表面的正面都要被画出。
				solid域包括了一个TRUE值或FALSE值,这个值表明海拔栅格指定的几何形状是否被当做实体造型。实体造型相邻表面的正面总是使这个造型上距离较远的表面的背面隐藏起来。当VRML浏览器认定这个造型是实体时,它可以跳过实体表面的背面,从而加快了绘图速度。solid域的默认值,表明了海拔栅格是实体,同时实体表面的背面可以被跳过。
				
				实际上,没有办法去忽略体积而构造一个实体海拔的栅格。solid域的名称被选择用IndexedFaceSet节点中的名称来组合。在海拔栅格的内容里,solid域要被认为它表明了海拔域将只能从顶部看到。如果是这样,栅格表面的前面将永远看不到,就像IndexedFaceSet节点创建的实体造型一样。既然区域显然只能从顶部看到,那么solid域的值很明显就是TRUE。
				creaseAngle域的值指定了一个折痕角的阀值,它以弧度来表示。如果栅格中相邻表面之间的夹角比折痕的阀值小,那么它们将被平滑缓制,从而使它们之间的边界变得模糊。如果这个夹角大于折痕角的阀值,那么这两个表面绘制时将不具有任何平滑的效果,同时它们之间的边界也显得清晰,就像造型上的一个明显折痕。折痕必须大于或等于0。creaseAngle域的默认值就是0,它表明任何物体都不进行平滑绘制。
				通过发送一系列所需要的高度值给set_height输入接口可以改变高度列表。
					
					[海拔栅格造型.wrl] 一个海拔栅格创建的山脉造型。是个10×10的栅格平面,即总共有100个栅格点,在height域的高度列表中就给出了这100个栅格点的高度。
				
				另外,可以看到在上面的VRML文件中通过Shape节点的appearance域值将整个的栅格造型指定为亮绿色。
				海拔栅格可以在虚拟空间中创建各种不规则的表面造型,当然通过精确地调整每一个栅格点同样也可以创建出一些规则和有趣的空间表面造型。
				
					[一个太阳的造型.wrl]

	3、点线面造型
			从理论上说,通过点线面造型可以创建出虚拟空间中任意的三维造型,因为点线面造型可以创建出空间中任意的一个点、一条线和一个面。
			VRML中点线面造型节点分别是:PointSet节点(点)、IndexedLineSet节点(线)和IndexedFaceSet节点(面)。Coordinate节点给出前面提到的用来创建空间点线面造型的空间参数。
		
		1.Coordinate节点
				创建了一张坐标列表并且被作为基于坐标的几何节点(诸如PointSet,IndexedLineSet和IndexedFaceSet节点)的coord域值使用。
				
				Coordinate {
							point	[]	#域值类型	MFVec3f
								}

				point可见域的值提供了一张被用作一个造型的几何坐标的三维坐标列表。每一个坐标都包含3个浮点值,其中每一个都分别表示坐标点在X,Y和Z方向上与原点之间的距离。(可以使用事件接口)
				几何节点一般使用坐标的索引,在Coordinate节点的坐标列表中的第1个坐标其索引值为0,第2个坐标的索引值为1,依此类推。
		
		2.PointSet节点
				通过PointSet节点可以在虚拟空间中创建出一系列的点,通常作为Shape节点的geometry域的域值。可以通过Shape节点的appearance域值为其着色,也可以通过PointSet节点中的color域为单独的每个点指定所需要的颜色。
				
				PointSet {
							coord	NULL	#域值类型	SFNode
							color	NULL	#域值类型	SFNode
								}

				coord可见域的值提供了一个节点,这个节点列出了用来定位点集中每个点的坐标。典型的,coord域值包含Coordinate节点。这个域的缺省值表示一张空的坐标列表,同时表示这个PointSet节点不创建任何点。这些点的创建顺序是从coord域列表中的第1个坐标开始,直到所有的坐标。(可以使用事件接口)
				★使用技巧:Material节点的emissiveColor域值在缺省情况下为黑色。为了避免这种情况,通常将点集造型的Material节点的emissiveColor域设定为其他的颜色。
				
				[VRML空间点造型.wrl] 这个例子创建了5个点,用Coordinate节点作为PointSet节点中coord域值来给出了这5个点的空间位置。


		3.IndexedLineSet节点
				创建空间折线几何造型,同时可以被用作造型节点的geometry域值。
					
					IndexedLineSet {
									coord				NULL	#域值类型	SFNode
									coordIndex			[]		#域值类型	MFInt32
									color				NULL	#域值类型	SFNode
									colorIndex			[]		#域值类型	MFInt32
									colorPerVertex		TRUE	#域值类型	SFBool
									set_coordIndex		[]		#输入接口	MFInt32
									set_colorIndex		[]		#输入接口	MFInt32
											}

					coord可见域的值提供了一个节点,这个节点列出了构造线集中所有线的坐标。典型的coord域值包含坐标节点。
					coordIndex提供了一张描述一条或多条折线路径的列表。其中每一个值都是整型的索引,并且每个索引值都指定了在coord域内的坐标列表中的一个坐标。
					一张坐标索引列表可以提供一条或多条直线。每条折线的连接方式都是从坐标索引列表的索引值顺序向后,直到索引列表的末尾或者一个为-1的索引值。下一条折线的范围是从-1的索引值开始,直到索引列表的结束或另一个为-1的索引值。
					坐标节点的值可以通过coord域的事件接口来改变和输出。
					坐标索引表可以通过向输入接口set_coordIndex发送一张坐标索引列表来改变。
					
						[VRML空间折线造型.wrl] 将前面一个例子所示的空间5个点连接起来。此例中可以看到coorIndex域值为0,4,2,1,0,3,4,1,3,2,0,-1给出了一个有序的坐标索引,将上面Coordinate节点中给出的空间顶点用直线依次连接在了一起。

		4.IndexedFaceSet节点
				IndexedFaceSet节点创建空间面几何造型,同时可以被用作造型节点的geometry域值。
					IndexedFaceSet {
									coord					NULL	#域值类型	SFNode
									coordIndex				[]		#域值类型	MFInt32
									texCoord				NULL	#域值类型	SFNode
									texCoordIndex			[]		#域值类型	MFInt32
									color					NULL	#域值类型	SFNode
									colorIndex				[]		#域值类型	MFInt32
									colorPerVertex			TRUE	#域值类型	SFBool
									normal					NULL	#域值类型	SFNode
									normalIndex				[]		#域值类型	MFInt32
									normalPerVextex			TRUE	#域值类型	SFBool
									ccw						TRUE	#域值类型	SFBool
									convex					TRUE	#域值类型	SFBool
									solid					TRUE	#域值类型	SFBool
									creaseAngle				0.0		#域值类型	SFFloat
									set_coordIndex					#输入接口	MFInt32
									set_texCoordIndex				#输入接口	MFInt32
									set_colorIndex					#输入接口	MFInt32
									set_normalIndex					#输入接口	MFInt32
											}

					coord可见域的值提供了一个节点,这个节点列出了构造面集中所有面的坐标。典型的coord域值包含坐标节点。
					coordIndex提供了一张描述一张或多张面的周界的列表。其中每一个值都是整型的索引,并且每个索引值都指定了在coord域内的坐标列表中的一个坐标。
					一个坐标索引列表可以提供一张或多张面的周界。每张面周界的连接方式都是从坐标索引列表的索引值顺序向后,直到索引列表的末尾或者一个为-1的索引值。面的周界会通过将最后一个在-1前的索引值对应的坐标点与第1个索引值对应的坐标点连起来而自动地闭合。下一条面的周界的范围是从上一个-1的索引值开始,直到索引列表的结束或另一个为-1的索引值。如此类推。
					ccw域值的TRUE或FALSE表示了面集中的面是按顺时针方向(TRUE)索引还是按逆时针方向或是未知的方向(FALSE)索引。面的正面是其周界的坐标索引轨迹为顺时针(TRUE)方向或逆时针(FALSE)方向的那一面。与solid域值有关,面的反面绘制也许会被跳过以便节省绘画时间。面的正面总是会被画出。ccw的缺省值为TRUE,表示周界为逆时针方向的面为正面。
					convex域值的TRUE或FALSE表示了是否面集中所有的面都是凸面。当此值为FALSE时,VRML浏览器自动地将这些凹面分割为许多较小的凸面。当此值为TRUE时,VRML浏览器假设不需要对这些面进行分割,从而能够节省时间。缺省值表示面集中的所有面都为凸面而不必进行分割。
					solid域值的TRUE或FALSE表示了是否面集中的面组成了一个实体。组成一个实体造型正面的面能够将组成这个实体造型背面的所有面挡住。当VRML浏览器认为一个面集是实体时,就会跳过对面背面的绘画,从而节省绘画时间。缺省值表示面集中的面构成了一个实体造型,同时对面背面的作画会被跳过。
					creaseAngle域的值指定了一个用弧度表示的折痕角的阀值。相邻面间的夹角如果小于折痕角的阀值,那么这两个面的边界就会模糊,也就是进行平滑绘制。相邻面间的夹角如果大于折痕角的阀值,那么这两个面的边界就会保持原来的样子,也就是不进行平滑绘制。折痕角的值必须大于或等于0.0。缺省值表明了任何造型都不会进行平滑绘制。
					
					坐标节点的值可以通过coord域的事件接口来改变和输出。
					坐标索引表可以通过向输入接口set_coordIndex发送一张坐标索引列表来改变。
					
						[VRML空间面造型.wrl] 引用了上面例子的空间坐标系参数列表,最后创建了一个由5个面所组成的空间方锥体造型。
						[VRML凹面造型.wrl] 将IndexedFaceSet节点中的convex域值设置为FALSE则可以创建空间凹面造型。
						[VRML复杂面空间场景.wrl] 用VRML面创建的更加复杂的空间造型。

	4、对点线面着色
				本节介绍在VRML中通过Color节点为空间造型的点线面分别指定所需要的颜色。
				通过Color节点着色空间场景的方法和前面介绍的Coordinate节点给出的空间坐标参数的方法完全相同,也是通过给出一系列有序的颜色值来对应已经创建的空间中的每一个点、每一条空间折线以及每一个空间曲面,并为其着色。并且通过Color节点给出的颜色优先级高于Material节点的diffuseColor域值颜色值,但除了diffuseColor域之外其他的Material节点的其他域值将继续保持一致。
				
			Color {
					color	[]	#域值类型	MFColor
						}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -