透视投影与光线追踪/光线投射的效率

时间:2009-10-08 11:06:38

标签: c++ matrix projection raytracing

我有一个非常普遍的问题。我希望确定多个物体的边界点(包括30-50个闭合多边形(z),每个具有大约300个点(x,y,z))。我正在使用一个固定的视口,它围绕x,y和z轴旋转(alpha,beta,gamma),这是多边形坐标系的原点。

我认为有两种可能性:透视投影或光线追踪。透视投影似乎需要对每个点进行大量矩阵运算,以确定其位置是否在视口内。 或者给定大量的点我会更好地将视口像素光线追踪到对象?  即,确定是否存在交叉点,然后确定交叉是在对象内还是在对象内发生。 在任何一种情况下,我都会将此结果写为0(外部)或1(内部)到200x200表示视口的整数矩阵

感谢您的期待

2 个答案:

答案 0 :(得分:6)

透视投影(然后扫描转换​​图像坐标中的多边形)将更快地批次

在光线追踪时,透视投影(基本上是世界到相机矩阵)所需的矩阵变换需要完全相同。但是,使用透视投影,您只需要转换角点,而使用光线追踪,您可以转换所有图像中的点。

答案 1 :(得分:0)

您应该能够使用透视投影和透视投影矩阵来计算屏幕空间中顶点的位置吗?很难理解你想要做的事情。如果你想创建一个3D场景的图像,那么只有很少的多边形,如果你的代码被优化了,那么在光线跟踪和光栅化之间很难看到任何差异(你仍然需要使用加速结构来进行光线追踪方法但是,无论如何,是的光栅化可能会更快。

现在,如果你需要计算眼睛(相机的原点)与通过相机视图可见的几何形状之间的距离,我就不知道为什么你可以&#39 ; t对图像中的任何像素使用任何样本的深度值,并使用透视投影矩阵的倒数来找到它在相机空间中的距离。

为什么速度是问题的一个问题?否则确实使用RT。

大部分信息可在www.scratchapixel.com上找到