OpenGL中的光线交集

时间:2016-12-29 14:49:13

标签: c++ opengl visualization volume-rendering

我正在制作一个体积渲染器。我已经成功读取了音量,并且我的光线追踪器已准备好几个课程。现在问题是如何做Ray和Volume(它的大小是256 * 256 * 256)交叉点以便找到坐标'intersectFront'和'intersectBack'?

在我的光线类中,我能够获取光线的原点和方向。

我尝试应用Liang Barsky Algorithm但无法考虑如何将其应用于盒子(立方体/体积)。

1 个答案:

答案 0 :(得分:0)

您所指的算法似乎认为剪裁窗口是轴对齐的。在体积渲染的情况下,您可能希望在可视化期间操纵体积的方向。这使得立方体非轴对齐。

此外,您似乎在CPU上进行光线投射,而不是在OpenGL着色器中。在openGL着色器中,计算'intersectFront'和intersectBack'点非常容易。首先将卷的边界框渲染两次到纹理中。第一个渲染用于正面,第二个渲染用于背面。使用框的轴对齐坐标对边界框的顶点着色。然后可以重叠两个纹理以根据3D纹理坐标找到交叉光线。 有关详细信息,请查看此帖子: volume rendering (using glsl) with ray casting algorithm

如果您在CPU上执行此操作,最好的办法是将多维数据集/边界框转换回来,使其与当前光线轴对齐。 然后你可以使用框的扩展来应用提到的Liang Barsky算法,如x_min,x_max,y_min,y_max,z_min,z_max。