首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >光线投射体素和OpenGL

光线投射体素和OpenGL
EN

Stack Overflow用户
提问于 2011-06-26 19:40:23
回答 2查看 4.3K关注 0票数 3

我目前正在研究光线投射和体素,这是一个很好的组合。塞巴斯蒂安·肖尔茨的体素渲染器很好地实现了这一点,但也使用了OpenGL。我想知道他的公式是如何工作的;你如何将OpenGL与光线投射和体素一起使用?光线投射的想法不是为每个像素(或Doom中的直线)投射一条光线,然后绘制结果吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-26 20:33:00

前面提到的raycaster是一个体素渲染器,也就是说,一种可视化体积数据的方法,比如存储在3D纹理中的不透明度。Doom的光线投射算法还有另一个目的:对于屏幕上的每个像素,找到地图的第一个平面,并在那里绘制颜色。现代GPU的光栅化功能取代了这种光线投射器的使用。

实时可视化体积数据仍然是一项由特殊硬件完成的任务,通常在医学和测地成像系统中找到。基本上,这些都是巨大的RAM块(几十GB),保存着体积RGBA数据。然后,对于屏幕上的每个像素,都会投射一条光线穿过体积,并在该光线上集成RGBA数据。GPU体素渲染器通过片段着色器执行相同的操作;伪代码:

代码语言:javascript
复制
vec4f prev_color;
for(i=0; i<STEPS; i++) {
    p = ray_direction * i*STEP_DELTA;
    voxel = texture3D(volumedata, p);
    prev_color = combine(voxel, prev_color);
}
final_color = finalize(prev_color);

finalizecombine取决于您想要可视化的数据类型和内容。例如,如果要对密度进行积分(就像在X射线图像中一样),combine将是一个求和操作并最终完成规格化。如果你要可视化一个云,你应该在体素之间进行alpha混合。

票数 5
EN

Stack Overflow用户

发布于 2017-02-25 19:40:08

在体素空间中进行光线投射不会使用像素,这将是低效的。

您已经有了一个数组来说明哪些空间是空的,哪些空间有一个体素立方体。

因此,一个快速版本是跟踪一条线,检查该线方向上每个体素的清空情况,直到它达到一个完整的体素。

这将需要从存储器中进行数百次读取操作,并对每个读取操作进行2-3次光线向量的乘法。

读取体素的十亿个内存位置大约需要1秒,因此几百个体素的位置将非常快,并且始终在一帧内。

光线投射通常使用优化来检测空间中数学公式星形的分数位置,其中网格顶点基于其边界框,然后是网格,在体素中,它只是逐步检查整数数组中的一条线,直到找到一个非空。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6483664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档