3D纹理展示方式之Slice(切片)

Demo:http://www.artvily.com/renderCase?sample=tex3D

3D纹理在基于volume rendering的渲染机制的相关应用中有着广泛的应用。应用的领域非常广泛,例如考古、医学、材料科学,游戏等等。

一般来说3D纹理,可以理解为具有三个维度(width,height,depth)的数据类似于三维数组。一般的2D纹理我们可以认为它就是一张图片(实际就是一段内存(主内存和显存)中的数据), 那么3D纹理可以理解为在depth维度叠在一起的若干张图。那么描述3D纹理数据的大小就是width*height*depth * stride,这个stride具体要看你用多少个字节来表示3D纹理数据中的一个(voxel)。在片段着色器中访问的时候使用(s,t,r)或者(x,y,z)纹理空间坐标,采样器就会依据你自定义的NEAREST或者LINEAR来获得插值结果->当前片段通过纹理坐标(x,y,z)对应得到的纹理数据。这个数据可以可以直接展示出来也可以作为其他计算的输入数据例如光照或者体积光/雾/流体等。上图使用Slice(切片)的方式展示3D纹理数据。上图竖直向上的方向为+Y轴,位于地表的点Y坐标为0。上图是由几十个平面组成,通过显示每个平面对应的3D纹理数据,就构成了立体造型。每个面只是Y坐标不同罢了。每个面上的每个像素点在世界空间的坐标都可以计算得到得到对应的3D纹理坐标,那么一个面就相当于对应一个切片,理论上面越密集越能完整显示,但是实际上像素的尺寸决定了即使面更密集意义也不大。从这个角度讲,每个面的相关计算也就很简单了。实际运行效果,请看上面的Demo.

Slice机制是一种有效的原理,至于如何实现有很多方式,这个具体因一个用而定。

猜你喜欢

转载自blog.csdn.net/vily_lei/article/details/87306506