/// <summary> /// Recorta el portal en base al frustum. /// Este método se realiza haciendo un clipping del Frustum contra la cara del portal. /// El recorte se hace en 3D. /// Existen técnicas más eficientes para realizar el clipping en 2D, utilizando la proyección del BoundingBox del portal. /// Ver Capítulo 13 - Portal Rendering, del libro Core Techniques and Algorithms in Game Programming, para optimizar la estrategia. /// </summary> private Vector3[] doPortalClipping(Plane[] frustumPlanes, TgcConvexPolygon portalPoly) { Vector3[] clippedPortalVerts = portalPoly.BoundingVertices; foreach (Plane plane in frustumPlanes) { //Clipping con algoritmo de Sutherland-Hodgman if (!TgcCollisionUtils.clipConvexPolygon(clippedPortalVerts, plane, out clippedPortalVerts)) { return(null); } } return(clippedPortalVerts); }