4 交互功能的实现
在交互功能的实现过程中,首先使用 VisuaC++中的 MFC框架来设计服务器的用户界面根据界面定义的功能,使用网络类作为基类来设计一个专门处理自己窗口通信消息的网络对象通过消息函数(CRemoteTestDlg::()nButtonStartVrp())调入设计的三维场景,通过控件定义相应事件处理函数来驱动三维场景,从而实现对j维场景 中模型的控制 。
在=三维虚拟文件与 H'I’MI 网页结合上采用超链接的方式:在 HTMI 网页中,通过超链 接的设置来实现同维虚拟文件的结合。浏览者可以通过激活超链接来实现网页与虚拟现实场景的转换,双方的平面显示空间不受约束,为场景中的一些重要细节呈现提供更广阔的空间。例如,当用户点击视点切换文本框 中的一个超链接 ,维虚拟场景中的视点就会 自动切换到相对应的场景。 以辅锅炉水位控制算法程序为例说明交互的实现机制 。
水位控制的算法分为水位控制的运动算法和模拟水的行为算法。水位控制的运动算法相对简单 ,根据锅炉的运行状态 ,水位做相应的变化 ,可以匀速上升、匀速下降、加速上升、加速下降以及在某一水平线的波动。模拟水的行为算法是实现水位控制虚拟化的核心,采用四连通的五位区域采样方法,将四连通周围的五个点求平均值;通过引入阻尼系数来模拟水波上升或下降的震动效果,并反映到导航图中;然后通过激活水波使整个水位控制更接近实际,真正达到虚拟仿真的效果以下是模拟水的行为算法的部分程序:
for Y:一1 toM AXY一 ]do again
for x:一 1 to MAXY一 1 do again
xDiff:一Trunc(WaveMapEx+1,y]一WaveMapEx);
yDiff:一Trunc(WaveMapE X,y+1]一WaveMapE xy2);
xAngle:arctan(xDiff);
xRefraction:一aresin(sin(xAngle)/rlndex);
xDisplace:一Trunc(tan(xRefraction) xDiff);
yAngle:arctan(yDiff);
yRefraction:一arcsin(sin(yAngle)/rlndex);
yDisplace:==Trunc(tan(yRefraction) yDiff);
if xDiff<0 then begin//当处在高水位时 ,歼始下降
if yDiff< 0 then
newcolor:==BackgroundImage[X— xDisplace,Y~yDisplace];
else
newcolor:一Backgroundhnage[x x1)isplace,Y+yDisplace];
if yDiff<0 then//当处于低低水位时,开始上升
newcolor:一 Backgroundlmage[x—xI)isplace,Y~yDisplace];
else
newcolor:-_Backgroundlmage[X xI)isplace,Y+yDisplace];Targetlmage[x,y]
end;
end;