第八讲三维标量场体可视化.PPT

第八讲三维标量场体可视化

8.4.2 光线投射法 光线投射的体绘制算法是目前使用最广泛的一种体绘制方法,如图8.15所示,对于图像平面上的每一象素,从视点投射出一穿过该象素的视线,该视线穿过体数据空间,算法直接利用该视线上的采样值计算该象素的光强. 整个算法分为光线生成、光强计算与组合、图像显示三部分。 图8.15 光线投射法 设体数据中每一位于(i,j,k)的体素值为f(x)(x=(i,j,k)),位于视平面(u,v)处象素的光线为R(u,v),其强度值为C(u,v). 首先由f(x),根据光照明模型计算出对应的光强值C(x)和不透明度值a(x).沿光线R,进入图像空间与体数据包围盒相交,在两相交点之间设置一系列采样点S1,S2,…Sm。根据C(x)和a(x) ,通过再采样计算出对应的C(Si)和a(Si),将C(Si)和a(Si)沿光线组合在一起就是当前象素点处的光强度值,如图8.16所示过程. 图8.16 光线投射流程 根据光线的方向,组合可分为从后到前和从前到后两种组合方式。 设光线穿过体素前颜色和不透明度为Cin和Ain,穿过体 素后为Cout和Aout (见图8.17), 光线从后到前的组合为: Cout=Cin(1-Ain) + C(Si)* A(Si) 光线从前到后的组合为: Cout=Cin+C(Si) (1-Ain) 两种组合前者直接计算, 后者要计算Aout,但后者 可利用Aout优化累加过程, 故一般还是多采用后者. 图8.17 光线组合方式 光线投射体绘制算法: C(R)=0 a(R)=0 X1=First(R) 求出在对象空间中光线进入和离开的位置 X2=Last(R) Ul=Image(X1) 转换到图像空间中的位置 U2=Image(X2) 对所有在该对象空间的采样点S For S=U1 to U2 Do Sx=Object(S) 转换到对象空间他置 求出Sx处的不透明度值a(Sx) If a(Sx)>0 Then C(Sx)=采样点处的颜色(c*a) C(R)=C(R)十C(Sx)(1 - a(R)) a(R)=a(R)十a(Sx)(1-a(R)) End If End For 8.5 体单元投影法 体单元投影法是以对象空间为序的一种体绘制方法,它从对象空间的三维数据场出发,依次计算每个数据点对屏幕上各象素点的贡献,将同一平面和不同平面上各数据点对各象素点光亮度的贡献合成起来得到最后的图像,其过程如图8.20所示. . 图8.20 体单元投影 8.5.1 V-Buffer算法 该算法是基于正交网格点上计算单元的投影绘制方法.算法扫描整个对象空间,依次逐个处理每一单元,由视点和单元的相对位置来决定单元的扫描次序,为每一单元定义一个包围盒,用扫描线裁剪生成单元投影贡献的象素区域.对每条扫描线上的象素点计算出光照强度和不透明度,然后进行累加,可见性由不透明度所决定.该方法类似于消隐中的Z-Buffer算法,故称为V-Buffer算法。 (1) 扫描次序的决定 由于在V—Buffer中保存的是每一象素不透明度的累加值,后续单元对该象素的贡献受该累加不透明度的影响,因而单元扫描次序的决定是决定算法正确组合的基础. 单元的处理,由接近视点的平面开始,逐个平面处理,直至最远的平面.在每个平面内的单元处理次序是根据单元与视点距离,从最近的单元开始,然后处理相邻单元,这样就形成了一个类似同心圆式的扫描过程. 由于是正交网格单元,单元之间不会相互重叠,从而保证了上述处理次序的正确性,同时该算法也更易实现并行. 图8.21显示了算法单元的处理次序,在同一平面内由l-9决定了扫描次序,同一次序号的单元可并行处理. (2)单元的处理 在逐个单元的处理中,首先为每一单元决定一个包围盒.由该包围盒在图像平面上的投影,决定该单元投影的扫描线范围.对于包围盒内的每条扫描线,计算由扫描线所确定的扫描平面与单元的交多边形,该交多边形是一凸多边形,投影到扫描线上形成至多五段区间(见图8.22). (3)光亮度贡献的累加 对于与单元有交多边形的各条扫描线上的每一象素,要计算单元对它的光亮度贡献和不透明度的贡献,其中各象素点不透明度的值作为V-Buffer的内容保留在V-Buffer中.光亮度和不透明度的计算在每个象素的四个顶点上进行.首先求出当前象素上的投影线与交多边形的交点,如图8.22中P点的投影线与交多边形有两个交点A和B,由交点可求出交线长,由交线长可计算出当前单元对该象素的贡献,再将贡献累加到图像平面上.

文档评论(0)

1亿VIP精品文档

相关文档