蕃茄牛肉
体绘制(VolumeRendering)概述之2:体数据详解
摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中⽂ 名“GPU编程与CG语⾔之阳春⽩雪下⾥巴⼈”
体数据( Volume Data )
学习任何⼀门技术,⾸先要弄清楚这项技术的起源以及数据来源。技术的起源也就是技术最原始的需求,最原始的发展动⼒,了解了这⼀点就了解了这项技术的价值。⽽了解⼀门技术的数据来源,就把握了技术的最初脉络,是 “ 持其⽜⽿ ” 的⼀种⽅法,正如软件⼯程中的数据流分析⽅法⼀般。
我很想说,体数据与⾯数据的区别,就好像⼀个实⼼的铁球和⼀个空⼼的兵乓球的区别。不过这个⽐喻很显然有点俗,很难让⼈相信作者(我)是⼀个专业⼈⼠。于是我决定还是将与体数据相关的专业术语都阐述⼀遍。
不过,在此之前,我需要先消除⼤家的恐惧感,研究表明,动物对于未知事物总是存在恐惧感,这也是阻碍进⼀步学习的关键所在。体数据不是什么特别⾼深的⽕星符号,它是对⼀种数据类型的描述,只要是包含了体细节的数据,都可以称之为体数据。举个例⼦,有⼀堆混凝⼟,其中包含了碳物质( C )若⼲,⽔分⼦( H20 )若⼲,还有不明化学成分的胶状物,你⽤这种混凝⼟建造了块⽅砖,如果存在⼀个
三维数组,将⽅砖 X 、 Y 、 Z ⽅向上的物质分布表⽰出来,则该数组可以被称为体数据。不要⼩看上⾯这个⽐喻,体数据本质上就是按照这个原理进⾏组织的!
体数据⼀般有 2 种来源:
1. 科学计算的结果,如:有限元的计算和流体物理计算;
建国大业观后感300字
2. 仪器测量数据,如: CT 或 MRI 扫描数据、地震勘测数据、⽓象检测数据等。
与体数据相关的专业术语有:体素( Voxel )、体纹理( Volume Texture )。尤其要注意:所谓⾯数据,并不是说⼆维平⾯数据,⽽是说这个数据中只有表⾯细节,没有包含体细节,实际上体数据和⾯数据的本质区别,在于是否包含了体细节,⽽不是在维度⽅⾯。
14.4.2 体素( Voxel )
Wikipedia 中对体属 voxel 的介绍为:
A voxel (a portmanteau of the words volumetric and pixel ) is a volume element, reprenting a value on a regular grid in three dimensional space. This is analogous to a pixel , which reprents 2D image data in a bitmap 。
即 “ 体素,是组成体数据的最⼩单元,⼀个体素表⽰体数据中三维空间某部分的值。体素相当于⼆维空间中像素的概念 ” 。 图 42 中每个⼩⽅块代表⼀个体素。体素不存在绝对空间位置的概念,只有在体空间中的相对位置,这⼀点和像素是⼀样的。
通常我们看到的体数据都会有⼀个体素分布的描述,即,该数据由 n m t 个体素组成,表⽰该体数据在 X 、 Y 、 Z ⽅向上分别有 n 、 m金字旁各
、 t 个体素。在数据表达上,体素代表三维数组中的⼀个单元。假设⼀个体数据在三维空间上 256256256 个体素组成,则,如果⽤三维数组表⽰,就必须在每⼀维上分配 256 个空间。
在实际的仪器采样中,会给出体素相邻间隔的数据描述,单位是毫⽶( mm ),例如 0.412mm 表⽰该体数据中相邻体素的间隔为书本图片唯美
0.412毫⽶ 。
北京居住证申请
14.4.1 体纹理( Volume Texture )
体数据最主要的⽂件格式是 “ 体纹理( volume texture ) ” !故⽽,⾮常有必要对体纹理的概念进⾏详细的阐述。
⽬前,学术性⽂章中关于体纹理的概念描述存在不⼩的混乱,很多书籍或者⽹页资料没有明确的区分 2d texture , 3d texture ,
volume texture 之间的区别。导致不少⼈认为 “ 只要是⽤于三维虚拟或仿真技术中的纹理都称之为 3d texture” 。这是⼀个误会。纹理上的 2 , 3 维之分本质上是根据其所描述的数据维数⽽定的,所谓 2d texture 指的是纹理只描述了空间的⾯数据,⽽ 3d texture 则是描述了空间中的三维数据。 3d texture 另⼀个较为学术化的名称是: volume texture 。⽂献【 22 】上对体纹理的定义是:
3D texture (Three Dimensional Texture), also known as “volume texture,” is a logical extension of the traditional (and better known) 2D texture. In this context, a texture is simply a bitmap image that is ud to provide surface coloring for a
3D model. A 3D texture can be thought of as a number of thin pieces of texture ud to generate a three dimensional image map. 3D textures are typically reprented by 3 coordinates.
翻译成中⽂就是 “ 三维纹理,即体纹理,是传统 2D 纹理在逻辑上的扩展。⼆维纹理是⼀张简单的位图图⽚,⽤于为三维模型提供表⾯点的颜⾊值;⽽⼀个三维纹理,可以被认为由很多张 2D 纹理组成的,⽤于描述三维空间数据的图⽚。三维纹理通过三维纹理坐标进⾏访问
” 。
从上⾯这句话,可以得到两点信息:
1. 三维纹理和体纹理是同⼀概念;三维纹理和⼆维纹理是不同的;
2. 三维纹理通过三维纹理坐标进⾏访问。
这时可能会有⼈提出问题了,图⽚都是平⾯的,怎么能表⽰三维数据?请注意,我们通常所看到的图⽚确实都是平⾯的,但是并不意味着x,y 平⾯上的像素点不能存放三维数据,举⼀个例⼦:在⾼级语⾔编程中,我们完全可以⽤⼀维数组去存放三维数组中的数据,只要按照⼀定规则存放即可!
按照⼀定规则将三维数据存放在 XY 像素平⾯所得到的纹理,称之为 volume texture 。浙大分数线
台湾的美食体数据通常是由 CT 仪器进⾏扫描得到的,然后保存在图⽚的像素点上。⽬前国际上⽐较常⽤的体纹理格式有,基于 DirectX 的 .dds 格式和 .raw 格式。注意,很多⼈会将 .raw 格式当作摄像器材使⽤的
那种格式,其实这两个格式的后缀虽然都是 .raw ,但是其数据组织形式是不同的。⽤于体纹理的 .raw 格式,存放的是三维数据,⽤于摄像器材的 .raw 格式只是普通的⼆维图⽚。 图 43 从左到右分别是University of Tübingen ( Germany )、 Viatronix Inc.(USA) 、 Walter Reed Army Medical Center (USA) 三家机构的通过仪器扫描得到的体纹理数据的体绘制图⽚。
这三个体纹理数据的描述分别是: 256 x 320 x 128 /0.66, 0.66, 0.66 ; 512 x 512 x 174/0.8398, 0.8398, 3.2 ; 512 x 512 x 463/0.625, 0.625, 1.0 。
由于在国内的⽹站上很难找到体数据,所以下⾯我给出⼏个国外的⽹址,这些⽹址提供⽤于教学和研究只⽤的体纹理数据(只能⽤于教学和研究)。
手机流量怎么查询体绘制算法
国际上留下的体绘制算法主要有:光线投射算法( Ray-casting )、错切 - 变形算法( Shear-warp )、频域体绘制算法( Frequency Domain )和抛雪球算法( Splatting )。其中⼜以光线投射算法最为重要和通⽤。
究其原因,⽆外乎有三点:其⼀,该算法在解决⽅案上基于射线扫描过程,符合⼈类⽣活常识,容易理解;其⼆,该算法可以达到较好的绘制效果;其三,该算法可以较为轻松的移植到 GPU 上进⾏实现,可以达到实时绘制的要求。
本书的第 15 章将重点阐述光线投射算法。