基于三维纹理的体绘制算法【转】

图形学的两大方向

      在此首先要说明一下图形学的两大方向:基于面元(surface)的图形学、基于体(volume)的图形学。

      面元图形学主要是基于面片的方式构造、显示几何体,可以是三角面片、四边形面片。。。,但归根结底都是三角形(图形硬件只支持三角面片)。简单的例子,如正方体有6个面,那么这个正方体的模型就可以通过这6个面来表示,复杂一点的如一个建筑体,可能有很多墙、门组成,其实每堵墙简单的说就是一个长方体,门也一样。几何体(模型)的构造有些是手工进行的,如使用3Dmax,creator等建模工具,可以方便地建立各种模型;也有从数据体中直接提取几何体表面的算法,如march cube等算法。OpenGL实际上是基于面元图形学的工业标准的图形库。

      基于面元的算法由于直接的图形硬件的支持,所以效率较高,能达到实时的要求,并且能支持较大场景的交互式可视化(普通的PC,基本上几十万个三角面片没有问题)。凡事都是一分为二的,这种方法在某些场合下不能满足要求,例如绘制云、地下地层等。这些模型并不是简单的面就能表现,因为他们的结构极其复杂又无规律;而且面元的方法,无法对模型内部结构进行透视。

       体元图形学中的主要概念是体素(Voxel)。一个体素对应于模型中某个位置的一种属性(温度、物质组成等)。

体绘制算法

      对体绘制算法研究,是当前图形学领域的热点,目前已经从单机的方式发展到了网络模式,分布式体绘制、远程体视化均有众多研究人员在深入研究。目前体绘制算法主要有:(1)基于纹理的算法;(2)光线投射(ray casting)算法;(3)splating算法;(4)shear-warp算法;(5)傅立叶频域变换算法。

      其中基于纹理的方法包括二维纹理和三维纹理的算法。

      二维纹理的方法相对简单,它和shear-warp算法的思想类似,不过由于硬件的直接支持,速度快。 对于一个体,可以分别从x,y,z三个方向依次浏览模型体的各个剖面,剖面是对模型体的并且垂直于坐标轴的截面。二维纹理的方法,将X方向所有剖面依次保存到二维纹理内存中,然后将所有纹理以混合(blend)的方式进行绘制,这样看上去就象是一个三维体了。这种算法首先初始化三套纹理,分别是X、Y、Z三个方向的所有剖面集合。之所以需要三个方向的剖面集合,是因为假如只有X方向的剖面,则从X方向观察模型时,效果较好,但从Y方向观察模型时会出现断裂现象。所以在对模型进行旋转观察时,需要根据观察的视线方向,动态的决定绘制哪个方向的纹理序列,以视线和三个方向最小夹角为原则进行选择。

      二维纹理的算法适用性好,因为几乎所有的图形卡都支持二维纹理;速度较快,达到实时交互的要求。但是二维纹理的缺点是:(1) 需要3倍于模型体的纹理内存。(2)沿坐标轴方向的纹理序列显示模型体,视觉效果不是非常好,因为它只进行双线性插值。

       三维纹理的体绘制算法则利用了图形卡的三维纹理功能。三维纹理是体纹理,直接地讲,就是一个三维数组空间。首先将体数据进行预处理后装入三维纹理内存中,然后计算观察的视线方向,取的与视线方向垂直的平面,依次截取模型体,得到一系列相交多边形(需要较复杂的数学知识)。将三维纹理映射到这些多边形上,从后往前进行混合。

      这种方法利用了图形卡直接支持的三线性插值功能,并且相交多边形始终是垂直于视线方向的,所以视觉效果比二维纹理好。而且不需要多余的存储空间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值