【问题标题】:Efficiency of perspective projection vs raytracing/ray casting透视投影与光线追踪/光线投射的效率
【发布时间】:2009-10-08 11:06:38
【问题描述】:

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

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

谢谢你的期待

【问题讨论】:

    标签: c++ matrix projection raytracing


    【解决方案1】:

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

    在透视投影的情况下所需的矩阵变换(本质上是世界到相机的矩阵)在光线追踪时需要以完全相同的方式进行。然而,使用透视投影,您只是变换角点,而使用光线追踪,您正在变换图像中的所有点。

    【讨论】:

    • 感谢您的快速响应:但是我仍然需要以某种方式确定“角点”的子集 - 大概是垂直于“相机镜头”轴的最大距离?
    • “角点”是指多边形的顶点。我假设您的多边形是由顶点列表定义的。 (如果不是这样,你的多边形是如何定义的?)要在多边形上执行透视投影,投影顶点就足够了;这是因为透视投影总是将空间中的直线映射到图像中的直线。
    • 确定那些(顶点)是 50*300 (x,y,z) 点:我在那儿有点慢!再次感谢!
    【解决方案2】:

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

    现在,如果您需要计算眼睛(相机的原点)与通过相机视图可见的几何形状之间的距离,我不明白为什么您不能将任何样本的深度值用于任何像素在图像中,并使用透视投影矩阵的逆来找到它在相机空间中的距离。

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

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

    【讨论】:

      猜你喜欢
      • 2011-08-29
      • 2019-02-26
      • 2016-08-09
      • 2021-07-24
      • 2018-12-19
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多