我正在制作体积渲染器。我已经成功阅读了这本书,并且我的光线追踪器已经准备好了一些课程。现在的问题是如何做Ray和Volume(它的大小是256 * 256 * 256)相交以找到坐标'intersectFront'和'intersectBack'?
在我的射线课程中,我能够获取射线的原点和方向。
我尝试应用Liang Barsky 算法,但无法想到如何将其应用于盒子(立方体/体积)。
我正在制作体积渲染器。我已经成功阅读了这本书,并且我的光线追踪器已经准备好了一些课程。现在的问题是如何做Ray和Volume(它的大小是256 * 256 * 256)相交以找到坐标'intersectFront'和'intersectBack'?
在我的射线课程中,我能够获取射线的原点和方向。
我尝试应用Liang Barsky 算法,但无法想到如何将其应用于盒子(立方体/体积)。
您所指的算法似乎认为裁剪窗口是轴对齐的。在体积渲染的情况下,您可能希望在可视化期间操纵体积的方向。这使得立方体非轴对齐。
此外,您似乎是在 CPU 上而不是在 openGL 着色器中进行光线投射。在 openGL 着色器中,计算 'intersectFront' 和 intersectBack' 点非常容易。您首先将体积的边界框两次渲染到纹理中。第一次渲染用于正面,第二次渲染用于背面。边界框的顶点使用框的轴对齐坐标着色。然后可以将这两个纹理重叠,以根据 3D 纹理坐标找到相交光线。有关更多详细信息,请查看这篇文章: volume rendering (using glsl) with ray cast algorithm。
如果您在 CPU 上执行此操作,最好的办法是将立方体/边界框转换回来,使其与当前光线轴对齐。然后,您可以使用框的扩展作为 x_min、x_max、y_min、y_max、z_min、z_max 来应用提到的 Liang Barsky 算法。