数据体透视技术

        体透视技术,即在三维视图中,透视一个数据体,从数据体中剥离不感兴趣的部分,留下感兴趣的部分,并且给部分属性设置不透明度,使得可以直观的透视到数据体内部。主要使用场景有:医院的核磁数据,地质的地震数据、地质建模数据等。

技术采用光线追踪算法完成数据体到图像的渲染。但是为了显示速度,为了能够在三维空间中达到实时旋转操作的目的,算法要运行在显卡上,即采用Shader的编程技术。 具体编程语言和平台可以自由。我采用的是VC+OGRE+CG实现。VC主编程语言,OGRE三维显示引擎库,CG显卡编程语言。

下面说一下主要实现步骤:

1、首先要有一个三维矩阵的数据体,类似于核磁或者地震数据,对于地质建模数据而言可以重新采样得到三维数据体。

 2、按照数据体实际显示的范围,构造一个立方体盒子显示对象。OPenGL中通过绘制六个矩形面完成,渲染时盒子顶点颜色采用立方体三维纹理坐标,最小(0,0,0),最大(1,1,1),这样Shader中的直接得到的颜色值实际是三维纹理的纹理坐标。

3、渲染立方体的背面的到二维纹理,称为背面深度纹理。(采用Shader渲染得到),二维纹理的值是三维纹理的坐标

4、将三维数据体采样到三维纹理,称为三维纹理。(CPU中构建)

5、将三维纹理值和颜色的映射关系,映射成一个一维纹理。称为调色板纹理

6、正常渲染立方体(采样光线追踪算法渲染立方体表面颜色值)

      在这个过程中,采用Shader技术,将背面深度纹理,调色板纹理,三维纹理传入Shader程序。在Shader中获取当前像素点的三维纹理坐标,通过当前二维纹理坐标和背面深度纹理得到背面深度信息(背面三维纹理坐标)。从当前深度到背面深度,相当于得到一个从某个可视角度,屏幕上某个像素沿视角方向的一个射线,射线从立方体正表面开始,到立方体背面结束。我们在这个射线上按照等距采样,每个样点到三维纹理中采样得到数据属性值,通过调色板纹理得到此点的RGBA值(颜色值和不透明度),累计混色直到不透明度累计超过1,或者射线采样完毕,最终得到平面像素的颜色值。通过这个Shader,将透视图渲染直接渲染屏幕。

通过上面六个步骤,实现直接渲染体数据,实现数据体的实时透视。取得了良好的应用效果。当然,如果体透视和其它数据共同渲染,比如油田地质中的地震数据体和断层面混合渲染,地震数据体需要透视,但是断层面不透明,并且直接插入数据体内。这种情况需要在体透视过程中做剪裁和混合渲染。我们需要知道立方体的背面深度值,除了立方体外,其它内容的场景颜色和深度值,立方体正面深度值,在光线投射过程中,如果光线到场景深度是还没有结束,则混合场景颜色和深度,场景不透明为1。这样就可以得到数据体透视和其它场景的混合渲染效果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值