摘 要: 在数控加工仿真真实感图形显示中,通用的消隐算法用起来,效率相对较低,难以达到实时动态真实感图形显示的要求。专用的消隐算法有的计算仍然比较复杂,难以在微机上满足实时真实感图形显示的需要。作者在总结前人研究成果的基础上,充分运用了OpenGL的显示机制,提出了一种快速局部消隐算法,该算法不仅速度快,而且非常稳定,可以在微机上显示高质量的真实感图形。
关键词: 真实感图形 消隐算法 显示机制 局部
1.前言
实时动态仿真需要很快的显示速度。消隐计算所耗费的时间,在显示真实感图形过程中占有相当大的比重。消隐问题又是计算机图形学中一个十分重要的内容,至今仍然在不断研究和完善之中。提出的消隐算法很多,如画家算法,Z缓存算法,扫描线算法,等等[1],但是这些消隐算法往往非常复杂。为特殊的应用,人们也常常开发一些具有针对性的专用消隐算法[2],[3]。我们研究了数控仿真的图形显示的特性,发现通用的消隐算法用起来,效率相对较低,难以达到实时动态真实感图形显示的要求。本文根据数控仿真的消隐和图形显示的特点,充分利用图形显示中的缓存技术[4],提出一种用于数控仿真的快速消隐算法。
2.通用的消隐算法
生成真实感图形,消隐是必须解决的问题之一。因此消隐是计算机图形学的重要研究内容之一。至今提出了非常多的消隐算法如:深度缓存算法又称Z缓存算法、扫描线算法、多边形区域排序算法、画家算法,等等。这些算法各有优缺点,因OpenGL采用的是深度缓存算法,所有这里着重介绍深度缓存算法。如图1,在屏幕坐标系中,Z轴的方向为观察方向。屏幕上任意一像素点(i,j)作平行于Z轴的射线R,与物体表面上的多边形相交于pl点和p2点。pl和p2为多边形屏幕上对应像素(i,j)的点,pl和p2的Z值称为该点的深度值。
图1 深度缓存消隐
深度缓存法比较pl和p2的Z值,将最小的Z值存入深度缓存,最小的Z值所对应的多边形颜色存入显示器的颜色缓存。其算法步骤如下:
初时化深度缓存ZB和颜色缓存FB,使ZB(i,j)=机器最大值,FB(i,j)=背景颜色,FOR j=1,n,FOR k=1,m,令Zi j=机器最大值,判断点(i,j)是否在多边形P在XOY面上的投影多边形内;若是,则计算多边形P在点(i,j)处的深度数值Zij;比较Zij与ZB(i,j)的大小,若Zij
3.OpenGL的模板缓存和深度缓存
屏幕是由象素的矩形阵列所组成,每个象素在图像中显示一个小方格的颜色。全部象素的存储器称为缓存(buffer)。存储每个象素的显示颜色的缓存称为颜色缓存。空间几何元素通过一系列的变换在屏幕上显示出来,屏幕上一个象素对应空间几何元素上被显示的点。存储象素对应空间几何元素上被显示的点的深度信息的缓存称为深度缓存。为了更好地控制空间几何元素的显示,又增加了模板缓存。
深度缓存存储每个象素的深度值。这个深度值是利用眼睛(观测点)的距离来度量的,所以有较大深度缓存数值的空间点被较小深度缓存数值的点所覆盖。在显示每一个象素前比较该象素和深度缓存中原先象素的深度值,如果当前象素的深度值小于原象素的深度缓存数值,那么显示当前象素,并且用当前象素的深度缓存数值代替原先象素的深度缓存数值。这样深度缓存数值大的象素不被显示。
模板缓存是将绘图局限于屏幕的某些部分。如同我们用卡纸模板来简化和加快喷涂标语或图案一样。例如,要绘制一个由内向外从行进中汽车窗口所看见的变动的场景,因为汽车内部没有变化,可以利用模板缓存使得显示的改变仅仅发生在窗口范围内。这样可以大大加快显示的速度。方法是激活模板缓存,并设置全屏幕模板缓存内容为0。一次绘制汽车内部图像并且改变所绘制范围内模板缓存为1,以后每次仅仅显示汽车外部变化的场景,并且绘图时检查模板缓存内容,只有在模板缓存内容小于1的范围才发生绘图。
4.快速局部消隐算法
数控铣削的加工代码少的有数百上千行,多的则上万行甚至数十万行代码,铣削加工的零件形状也多种多样,有些形状相当复杂。用普通的消隐算法很难达到仿真显示所需要的运行速度。数控加工过程仿真显示是动态显示刀具运动和毛坯的材料去除,每一次切削,显示图像仅仅是刀具切削的局部发生了变化,所以特别适合用局部刷新的方式进行真实感图形的显示。本文提出的利用OpenGL显示缓存、深度缓存和模板缓存机制的消隐算法是一种适应局部刷新显示要求的快速消隐算法。
具体算法描述如下:1.用模板为0画毛坯。2.启动深度缓存检验,画刀具运动包络体。设置颜色缓存的内容为不能修改,所画刀具运动包络体不显示,但是模板缓存中相应内容变为1。3.关闭深度缓存检验,启用模板缓存检验,设置模板1的范围内可以显示图形。4.按有远到近的顺序,显示刀具轨迹中每一个小长方体的可见部分。5.将全部模板缓存内容设置为0。6.如果还有刀具轨迹显示需要,返回2,如果没有刀具轨迹需要显示,程序结束。
这个消隐算法的主要思路是:在第2步时激活深度缓存,利用Z缓存消隐算法消除刀具切削刀痕被其他结构遮挡时的情况。同时避免将刀具切入毛坯部分的模板缓存改为1,从而出现图2的错误消隐结果。利用第3步关闭深度缓存检验,启用模板缓存检验。第4步在模板缓存容许的范围内,按有远到近的顺序显示小立方体来显示凹陷的刀具切削刀痕。
如图3所示,执行第2步画刀具包络体,模板缓存改变成1的范围。因为颜色缓存的内容不能更改,所以屏幕上并不显示如图6所示的深色的刀具的包络体,为了便于说明模板缓存内容改变的范围,我们在图3上画出了深色刀具的包络体,用于表示模板缓存改变的范围。因为是激活了深度缓存,所以离视点远的刀具切入毛坯的部分,其包络体范围的模板缓存不改变。这样凹陷的刀具切削刀痕中靠近视点的边缘遮挡的部分不显示,因此这部分的模板缓存内容保持为0。如图4为所显示的刀具切削轨迹。图5是在前景物体遮挡时画刀具包络体的情况,因为是激活深度缓存,所以包络体有一部分消隐,相应的模板缓存内容不改变,保持为0。因此,图5所显示的刀具切削轨迹相对应的部分不显示。用这种方法,避免了一般消隐算法中的大量的求交计算,提高了显示速度。
图2 错误的消隐结果
图3 深色部分模板内容为1
图4 刀具轨迹痕迹
图5 有遮挡时的模板内容
5.结语
消隐算法是计算机图形学的重要研究内容之一,至今已提出了很多算法,并且仍然是计算机图形学的研究热点之一。本文提出的专用于数控加工仿真的局部快速消隐算法,不仅速度快、稳定,为在微机上实时显示真实感图形提供了前提条件,而且克服了等轴测投影的消隐算法不能在任意显示工件加工过程的缺陷,具有一定的先进性。
参考文献:
[1]孙家广,杨长贵.计算机图形学.北京:清华大学出版社,1995,5.
[2]詹梅,刘郁丽,扬合.适用于三维有限元网格的逐步消隐法.西北工业大学学报,1998,10:641—664.
[3]焦法成,唐树忠,梁锦文,和柏超.智能化二维消隐技术.计算机辅助设计与图形学学报,1996,1:12—17.
[4]Jackie Nelder,Tom Davis,and Mason Woo,,t openGL Programlning Guide”Addison—Wesle