射线体积交叉点在OpenGL中

Ray-Volume Intersection in OpenGL

本文关键字:OpenGL 交叉点      更新时间:2023-10-16

我正在制作卷渲染器。我已经成功阅读了卷,并且从射线示踪剂中准备了几个课程。现在问题是如何做射线和音量(大小为256 * 256 * 256)交叉点,以找到坐标'Intersectfront'和'Intersextback'?

在我的射线课上,我能够启动射线的起源和方向。

我试图应用Liang Barsky算法,但无法考虑如何将其应用于盒子(Cube/Polume)。

看来,您所指的算法考虑了剪辑窗口要对齐的剪辑窗口。如果进行体积渲染,则可能需要在可视化过程中操纵音量的方向。这使多维数据集的非轴对齐。

另外,似乎您正在在CPU上进行射线铸造,而不是在OpenGL着色器上进行。在OpenGL着色器中,计算" Intersectfront"和Intersexback"点非常容易。您首先将卷的边界框渲染为两次纹理。第一个渲染是针对前脸的,第二个是用于后面的。边界框的顶点使用盒子的轴对准坐标进行着色。然后,这两个纹理可以重叠以根据3D纹理坐标找到相交射线。有关更多详细信息,请查看此帖子:用射线铸造算法渲染(使用GLSL)。

如果您在CPU上进行此操作,最好的选择是将立方体/边界框转换回,以使其与当前射线一致。然后,您可以使用框的扩展为x_min,x_max,y_min,y_max,z_min,z_max。