VRML---第四章第一部分(空间背景)

       

空间节点

  在VRML中,天空、地面的场景都是以背景的形式出现的。虚拟空间背景分为全景空间背景和天体空间背景两种。
        全景空间背景是一个将造型包围在里面的空间立方体,具有前、后、左、右、上、下六个平面,可以根据需要设置不同的材质和图片。
       天体空间背景可以理解为包围在VRML空间周围无限大的球体外壳。分为天空背景和地面背景两部分,这两部分是通过地平线来分开的。
       地平线位于VRML空间的垂直方向上的中线上,也就是以VRML空间的中心为原点的坐标系的X-Z平面上。
       在X-Z平面以上的为天空背景,在X-Z平面下的为地面背景,而X-Z平面和背景球体的相接处,就是地平线。
       空间模型:以VRML空间坐标系的原点为中心的无限大球体,以XOZ平面为地平面。


      Y+向为天空,Y-向为地面。
    天空角:天空位置与Y+的夹角
    地面角:地面位置与Y-的夹角
语法:




      skyAngle域的域值用于设定天空背景上需要着色位置的空间角。两个天空角之间的颜色逐渐过渡形成颜色梯度。该域值必须以升序的方式排列。
      skyColor域的域值用于设定天空着色的颜色,该域值是一系列RGB颜色。
      groundAngle域的域值用于设定地面背景上需要着色位置的空间角。如果最后一个地面角小于180°,则地面背景剩下的部分保持最后的地面颜色。该域值中地面角必须以升序的方式排列。没有设置地面时浏览器只对天空着色。
      groundColor域的域值用于设定对地面背景着色的一系列RGB颜色。
      利用frontUrl、backUrl、leftUrl、rightUrl、topUrl和bottomUrl这6个域的域值分别在前、后、左、右、上、下六个侧面添加背景图像,通常上、下侧面不设置背景图像从而可以看到天空和地面,也可以设置任何一个侧面的透明度,以便透过全景图像看到天空和地面。
      在VRML中使用的背景图像只能是JPEF、GIF和PNG格式。
     set_bind入事件和isBound出事件在使用背景变换时被用来接收事件和发送事件。




天空色0为0度天空位置的颜色
地面色0为0度地面位置的颜色
天空色1,2,……对应天空角1,2,……
地面色1,2,……对应地面角1,2,……
系统自动过渡相邻位置的颜色
角度的单位为弧度
颜色由r、g、b分量合成
颜色分量的数值范围:0.0~1.0 

   空间背景在空间变换中,仅受坐标系旋转的影响,不受坐标系平移和缩放的影响。
   浏览者在任何情况下都不可能靠近背景,只能从不同的角度观察空间背景的不同侧面或天体背景中的天空和地面的颜色。
例子:

#VRML V2.0 utf8
Background{
	skyAngle [                   #设置天空角
		1.2  1.57
	]
	skyColor[   #设置天空角对应的颜色
	  	0 0 1
		0 0.5 0.8
		1 1 1
	] 
	groundAngle[              #设置地面角
		1.2  1.571
	] 
	groundColor[              #设置地面角对应的颜色
		0.1 0.1 0.1 
		0.4 0.3 0.2
		0.8 0.8 0.8
	]
	frontUrl  "frontpicture.JPG"    #设置前景图片
	backUrl  "backpicture.JPG"    #设置后景图片
	leftUrl  "leftpicture.JPG"      #设置左景图片
	rightUrl  "rightpicture.JPG"    #设置右景图片
}

在VRML空间中可以设定多个BackGround节点,以便在不同的情况下,比如早晨和黄昏,使用不同的空间背景。利用背景链接就可以在各个Background节点之间切换。


雾节点

    雾化效果主要控制两个因素:一是雾的颜色,二是雾的浓度。
   由Background节点设定的背景图像不会受雾的遮蔽效果的影响。
语法:

Fog{

#设定雾的颜色,默认为白色。

  exposedField SFColor  color       1.0 1.0 1.0

#fogType设置密度类型,"LINEAR" --浓度与距离成正比(线性雾),“EXPONENTIAL” --浓度与距离的平方成正比(指数雾)。

  exposedFieldSFString fogType   "LINEAR"

#visibilityRange设置可视距离,在可视距离以内物体可见。0.0表示无穷远。set_bind和isbind用于切换当前Fog雾节点。

  exposedFieldSFFloat visibilityRange  0.0

  eventIn        SFBool  set_bind

  eventOut     SFBool  bind_changed

}


例子:

#VRML V2.0 utf8
Background {
	skyColor[1 1 1]
}
Transform {
	translation 0 -2 0
	children[
		Shape {
			appearance Appearance {
				material Material {
					diffuseColor 0.5 0.5 0.7
				}
			}
			geometry Box {size 25 0.2 25}
		}
	]
}
DEF  T  Transform{
	children[
		Transform{
			translation  1.8 0 0
			children[
				DEF  g  Shape {
					appearance  Appearance {
						material Material{
							diffuseColor 0.4 0.2 0
							ambientIntensity 0.28
							shininess 0.1
							specularColor 0.8 0.4 0
						}
					}
					geometry Cylinder {
						radius 0.2
						height 4
					}
				}
			]
		}
		Transform{
			translation  -1.8 0 0
			children[USE  g ]
		}
		Transform{
			rotation  0 0 1 1.571
			translation  0 2 0
			children[USE  g ]
		}
	]
}
Transform{
	translation -6 0 6
	children [USE T ]
}
Transform{
	translation -3 0 3
	children [USE T ]
}
Transform{
	translation 3 0 -3
	children [USE T ]
}
Transform{
	translation 6 0 -6
	children [USE T ]
}
Transform{
	translation 9 0 -9
	children [USE T ]
}
Fog{
	color 1 1 1
	fogType "LINEAR"
	visibilityRange 15
} 


  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值