http://blog.csdn.net/taigw/article/details/28418847

Raycasting的核心是从每一个屏幕像素处发射一条光纤,然后让其穿过整个体数据。基于GPU的Raycasting可以独立,并行地计算每条光线,从而能大大提高速度,实现实时绘制效果。绘制时的过程一般是绘制一个长方体,并且以体数据作为三维纹理。根据光线的方向和终点的确定方法的不同,Raycasting有两种实现:

1,基于光线起点和相机位置。将相机位置由世界坐标通过模型视图投影矩阵反变换到长方体的局部坐标空间。每个fragment的坐标作为光线的起点,由变换后的相机位置与光线起点确定光线的方向,在沿着光线方向从起点前进时,每到达一个新的点,判断其是否在长方体内,如果不在,则结束这条光线。

2,基于光线的起点和终点。事先算好了光线的起点和终点,根据这两个点可以确定光线的方向。同时根据这两个点之间的距离与光线前进的步长可以计算出光线上有多少个采样点。在起点与终点之间的每一个采样点处,不需要判断这个点是否在长方体内。起点和终点的计算可通过帧缓冲对象(framebuffer object, FBO)来实现。

该方法先画两个立方体到不同的FBO对象,将立方体的坐标作为该点的颜色,一个FBO对象中只画出该立方体的可见面,而另一个FBO对象中只画出该立方体的不可见面。在得到的两个FBO对象中,每一个相对应的fragment处,其颜色rgb值分别表示了光线的起点坐标和终点坐标。然后这两个FBO对象再作为纹理,传递给绘制立方体的片段着色器中。

第一种方法需要逐点判断,比较花费时间。特别是当用户再添加一些剪裁平面时,判断运算特别频繁,会导致运算速度很慢。第二种方法实际上时进行了三次绘制。但是前两次绘制的速度很快,而第三次绘制时由于不需要再判断光线上的各个点是否在长方体内,其运算速度也较快。当数据量很大,采样率很高时,采用第二种方法会快得多。

参考网址:http://www.daimi.au.dk/~trier/?page_id=98

GPU Raycasting的两种实现方法相关推荐

  1. 快速排序的两种实现方法(c语言版本)

    经过调研发现,对任意无序整数数组,快速排序有两种实现方法,这里简单阐述下思路: 思路一:随意选择一个基准元,一般选择数组的起始元或末尾元,Weiss这本书上特意搞了个算法来选择基准元,--,总之就是基 ...

  2. R语言生存分析COX回归分析实战:两种治疗方法发生肾功能损害的情况

    R语言生存分析COX回归分析实战:两种治疗方法发生肾功能损害的情况 目录

  3. mysql workbench kernelbase.dll_电脑出现kernelbase.dll错误的两种解决方法

    KernelBase.dll是Windows操作系统的重要文件,它为各种应用程序提供服务.如果电脑提示kernelbase.dll错误,这该怎么处理?大家可以用电脑自带的防火墙或者是第三方软件来进行故 ...

  4. 使用定制的NSDictionary的方法,对NSArray进行排序(附:数组排序两种常见方法)

    NSArray中存放的是NSDictionary,可以使用策略的方法对NSDictionary进行定制,增加比较的方法.然后调用NSArray的sortUsingSelector方法对数组进行排序,这 ...

  5. Ext.Ajax.request和formPanel.getForm().submit()两种提交方法的异同:

    Ext.Ajax.request和formPanel.getForm().submit()两种提交方法的异同: 1. 相同点: a) 都是使用异步提交的方式: b) 默认都是使用POST方式来提交数据 ...

  6. java代码二进制转为十六进制_Java 中二进制转换成十六进制的两种实现方法

    Java 中二进制转换成十六进制的两种实现方法 每个字节转成16进制,方法1 /** * 每个字节转成16进制,方法1 * * @param result */ private static Stri ...

  7. python ioc di_Spring介绍,IOC(控制反转),DI(依赖注入)介绍及两种注入方法

    Spring介绍,IOC(控制反转),DI(依赖注入)介绍及两种注入方法 第一中方法:在xml文件中注入: (1)开源的轻量级的应用开发框架 特点:a.简化开发:b.解耦:c.集成: 原理对象与对象之 ...

  8. Json返回时间中出现乱码问题的两种解决方法

    Json返回时间中出现乱码问题的两种解决方法 参考文章: (1)Json返回时间中出现乱码问题的两种解决方法 (2)https://www.cnblogs.com/hanyinglong/archiv ...

  9. css之文本两端对齐的两种解决方法

    css之文本两端对齐的两种解决方法 参考文章: (1)css之文本两端对齐的两种解决方法 (2)https://www.cnblogs.com/wl0804/p/11265225.html 备忘一下.

最新文章

  1. Erlang模块gen_tcp翻译
  2. ubuntu9.10 qq自动退出修复
  3. 【转】ZooKeeper原理及使用
  4. 抛开约束,增强模型:一行代码提升 ALBERT 表现
  5. pil库修改图片大小_Gvcode库:一个更简单的、华人开源的、自动生成验证码的python库...
  6. 安卓开发替换json字符串中的数据_22个JavaScript开发技巧合集
  7. 微软 Edge 浏览器将推出 iOS 和 Android 版
  8. structured Streaming
  9. 多校赛 Barareh on Fire
  10. java查询mongodb数据_从mongodb中查询数据
  11. 2022你不容错过的软件测试项目实战(web+app+h5+小程序)免费版
  12. Adobe Dreamweaver CS6快捷键使用
  13. python高效控制模拟器_使用Python实现RISCV模拟器(一)
  14. chrome插件,常用插件,必备插件,黑科技
  15. (两百五十六)学习perfetto(一)
  16. Flink HA配置
  17. 【无法完成更新 正在撤销更改 请不要关闭你的计算机】更新失败解决方案
  18. 图数据库——大数据时代的高铁
  19. 小伙整容成雷锋后亮相,网友:快做好事去吧
  20. 《第一行代码 Android 第2版》下载

热门文章

  1. wireshark网络分析就这么简单 pdf_用了这么久才发现!原来PDF提取文字这么简单,看完涨知识了...
  2. 安卓10可用的性能监视器_iPad 秒变监视器,无线图传设备真的有用吗?
  3. vb隐藏指定程序系统托盘图标_Windows环境设置系统托盘图标默认显示
  4. hadoop 单机单间_初学Hadoop之单机模式环境搭建
  5. oracle导入大量csv_Oracle导入数据到表(支持插入大量数据)
  6. Xcode中c语言读键盘,使用Objective-C自定义键盘-Xcode8
  7. c++ vscode 第三方库_请教下,vscode中怎么编译带第三方库的文件呢?谢谢! - C++程序设计语言 - CPlusPlus - 水木社区...
  8. centos7.6查看什么进程跑的流量_Spark的提交方式有哪些?有什么区别?
  9. python消息中间件activemq_消息中间件ActiveMQ和JMS基础
  10. php投影,box-shadow实现不同角度的投影