【问题标题】:3D intersection (Radiosity) - OpenGl3D 交叉点(辐射) - OpenGL
【发布时间】:2014-03-02 00:06:28
【问题描述】:

我正在尝试计算两个平面或补丁之间的可见性。

我有一个四边形线框。每个四边形都有一个带有 X、Y 和 Z 坐标的法线向量。每个四边形有 4 个顶点。每个顶点都有 X、Y 和 Z 坐标。

给定两个四边形,我怎么知道这两个补丁(四边形)之间是否有遮挡物或其他物体。

因此,我需要创建一个方法,如果补丁没有遮挡器,则返回 1;如果补丁有遮挡器,则返回 0。

我想象的方法是这样的:

GLint visibility(Patch i, Patch j) {

    GLboolean isVisible;
    vector<Patch> allPatches; // can be used to get all patches in the scene

    // Check if there is any occluder between patch i and patch j
    Some computations here

    if(isVisible) {
        return 1;
    } else {
        return 0;
    }
}

我听说过 z-buffer 算法和可以完成这项工作的 hemicube 实现。我已经计算了外形尺寸。我只需要完成这一步即可获得阴影。

确保你用图表或方法给出某种形式的答案,因为我不是那个天才

【问题讨论】:

  • 您如何处理部分可见性?我见过的关于这个的大多数讨论只是发送随机射线和针对这些的测试
  • 您可以测试包含两个四边形的体积之间的交集...换句话说,创建一个以 Patch i 和 Patch j 结尾的盒子,然后测试场景中是否有任何对象此框内的一个点,或者该对象以任何方式与该框相交。
  • 这并没有帮助很多人:x
  • 为什么不呢?这是从补丁 i 到补丁 j 中的所有可能点有效执行无限数量的射线测试的最简单方法。将两个补丁之间的空间变成一个体积,然后对该体积进行交叉测试以找到遮挡。但是您还必须考虑完全在体积内的对象(它们会被遮挡但不会相交)。由于在这个例子中两个补丁是四边形,所以体积是一个盒子,交集与盒子是微不足道的。
  • 抱歉,我的数学不太好。我明白你的意思,但无论如何我都无法实现这一点。你能至少写一些伪代码让我明白吗?不知道如何创建你所说的这个卷!我从 12 月开始就这样做了,如果这对我来说很容易,我永远不会来这里:x

标签: opengl visibility patch


【解决方案1】:

我找到了解决方案。基本上我需要使用光线追踪技术。将光线从一个补丁投射到另一个补丁,并通过重心方程计算检查光线是否与平面相交。找到控制点后,您需要检查控制点是否位于您的四边形上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2018-07-13
    • 2021-08-03
    相关资源
    最近更新 更多