基于VRML和JavaScript的数码摄影虚拟实验系统的设计与实现
在实验2中,要求能模拟真实的数码相机的操作,允许学习者通过转动曝光模式调节环,选择不同的曝光模式。每一种曝光模式都有各自的特点以及适用的场合。实现这一效果,是在VRML中使用CylinderSensor(圆柱传感器)与Script节点的结合实现了用户与曝光模式选择盘的交互。CylinderSensor节点也可以感知一个观察者的拖动动作,并且计算转轴和角度,通过它的rotation_changed域(eventOut出事件)输出。其代码如下:
CylinderSensor{
exposedField SFFloat minAngle 0
exposedField SFFloat maxAngle -1
exposedField SFBool enabled TRUE
exposedField SFFloat diskAngle 0.262
exposedField SFFloat offset 0
exposedField SFFloat autooffset TRUE
eventOut SFBool isActive
eventOut SFVce3f trackPoint_changed
eventOut SFRotation rotation_changed
}
观察者每次改变轨迹点时,autoOffset、offset、maxAngle和minAngle域值在一起作用把轨迹点转化成为旋转值,并通过rotation_changed域(eventOut出事件)输出。然后通过旋转角度的不同改变LCD显示屏上不同的曝光模式画面。同时也向浏览器环境传递不同的旋转角度,浏览器根据不同的旋转角度来显示不同的模式说明。
3.3 光圈与快门的调节模块的设计与实现
实验3和实验4分别是针对光圈大小和快门大小进行调节,然后在模拟的场景中进行拍摄,比较不同的光圈值和快门速度对画面成像效果的影响。这样,既让学生掌握了光圈和快门值的调整方法,又让他们理解了光圈值和快门速度与画面成像效果的关系。这两部分实现的方法相似,所以在此一并说明。
以快门速度的调整为例,通过设置不同的快门速度,模拟了不同的成像效果。首先通过机身上的调节按钮设置快门速度,如图1所示,分别设置快门速度为1/200 s与1/1 000 s。
然后到模拟的三维场景中进行取景操作。由于不同的快门速度对成像效果的影响主要是体现在动态被摄对象上,所以,在场景中模拟了一辆奔跑的汽车,按下拍摄,即可得到模拟的成像效果,如图2所示。
具体实现方法如下:
if(a==4){
M_e.Nodes("tv_sensor").Fields("offset")=-4.125;
M_e.Nodes("tv_sensor").Fields("enabled")=-1;
M_e.Nodes("start_t4_script").Fields("show")=-1;
}
else{
M_e.Nodes("tv_sensor").Fields("enabled")=0;
if(a==1||a==2){
M_e.Nodes("start_t4_script").Fields("show")=0;
}else{
M_e.Nodes("start_t5_script").Fields("show")=0;
}
document.getElementById("left_content").style.display="none"
也就是用JavaScript启动了VRML中快门传感器和控制放在VRML中快门传感器的动作。
4 网络发布与插件的自动安装
VRML 文件可以采用超级链接的方式把HTML文件和VRML 文件链接到一起,这对于三维模型的虚拟展示具有十分重要意义。HTML文件格式的标准并不支持对VRML文档的嵌入,但非标准HTML提供<EMBED>标记可实现VRML文档的嵌入。例如下面的语句实现了VRML文档camera.wrl在HTML文件中的嵌入,其中SRC域指定关联的URL,"camera.wrl"是一个VRML文件。
<OBJECT CLASSID="CLSID:4B6E3013-6E45-11D0-9309-0020AFE05CC8" WIDTH=600px HEIGHT=400px; >
<PARAM NAME="SRC" VALUE="vrml/camera.wrl">
<EMBED name=camera id=camera src="vrml/camera.wrl" TYPE="application/x-cc3d" onmousemove="test1_contactVW();"/>
</OBJECT>
在网页中要进行对VRML的操作只进行上述嵌入是远远不够的,还要通过javaScript中的M_e=camera.Engine,获取对相机VRML场景的句柄并赋给M_e。这样,就可以对VRML场景中的每一个节点中的每一个域和事件的值进行获取了。
为了保证用户机器上能正常播放,需要在用户机器上安装VRML浏览器。可通过以下代码实现自动安装:
<OBJECT CLASSID="CLSID:4B6E3013-6E45-11D0-9309-0020AFE05CC8" WIDTH=600px HEIGHT=400px;
codebase="source/cortvrml.exe">
<PARAM NAME="SRC" VALUE="vrml/camera.wrl">
<EMBED name=camera id=camera src="vrml/camera.wrl" pluginspage="source/cortvrml.exe" type="application/x-shockwave-flash" TYPE="application/x-cc3d" onmousemove="test1_contactVW();"/>
</OBJECT>
虚拟实验是开展网络教学的一个瓶颈,而其中最关键的是没能较好地解决交互性的问题。利用VRML技术,结合支持VRML的开发工具构建一个虚拟实验环境,并利用Java提供的支持VRML的开发包,实现了用户与虚拟环境之间的交互,可以满足数码摄影虚拟实验教学的需要。实验常常是一种协作性的活动,合作是实验过程中一个至关重要的环节,因此,要充分利用现代网络技术,增强对虚拟实验的协同操作,进一步体现网上实验的优势[4]。
- 单片机虚拟实验室的建立(10-15)
- 单片机实验教学仿真软件设计(04-24)
- 一种51单片机虚拟实验室的建立方法(12-12)