如果相交则停止网格渲染

时间:2016-12-20 10:36:02

标签: c# unity3d mesh

我通过代码生成相机视锥网格,它工作正常。

现在我正在寻找一个解决方案(基于着色器或其他)来限制 相机平截头体网格如果与任何对象相交。正如你在图像中看到的那样,我的平截头体正在穿过不正确的平面。

我该如何控制它?我搜索并尝试应用不同类型的着色器,但似乎没有任何效果。

enter image description here

1 个答案:

答案 0 :(得分:2)

获取相机的平截头体。

Plane[] frustumPlanes = GeometryUtility.CalculateFrustumPlanes(Camera.main); //Or whatever camera you are using

对于场景中的每个GameObject,如果有的话,请获取Renderer组件的bounds

Renderer renderer = GetComponent<Renderer>();
if (renderer != null) 
{
  //get renderer.bounds
}

测试渲染器边界是否与任何平截头体平面相交。

bool canSee = GeometryUtility.TestPlanesAABB(frustumPlanes, renderer.bounds);

if (canSee) 
{
  //do something
}

这应该是你的相机能否“看到”网格的一个很好的近似值(即截头体是否与任何物体相交)