2014-02-27 74 views
1

我正在尝试计算两个平面或修补程序之间的可见性。3D交叉点(Radiosity) - OpenGl

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

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

enter image description here

因此,我需要创建一个返回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缓冲算法和半立方体的实现,将完成这件事。我已经计算了外形因素。我只需要完成这一步即可获得阴影。

确保你给了某些形式的图形或方法的答案,因为我不是天才

+0

你是如何处理局部可视性的?我所见过的大多数讨论只是发送随机光线和对这些测试 –

+0

您可以测试包含两个四元组的音量之间的交集...换言之,创建一个包含结束补丁i和补丁j的盒子,然后测试查看场景中的任何对象是否在此框内有一个点,或者对象是否以任何方式与框交叉。 –

+0

这并没有帮助很多家伙:x –

回答

0

我找到了解决办法。基本上我需要使用光线追踪技术。将光线从一个贴片投射到另一个贴片上,并检查光线是否用重心方程计算截取平面。一旦找到控制点,您需要检查控制点是否位于四方。