Example #1
0
    private float[] TargetProjectionHits(Vector3 target, ProjectionEdgeHits alongAxis, float projectionPlaneDistance, float halfFovRad)
    {
        float distanceFromProjectionPlane = projectionPlaneDistance - target.z;
        float projectionHalfSpan          = Mathf.Tan(halfFovRad) * distanceFromProjectionPlane;

        if (alongAxis == ProjectionEdgeHits.LEFT_RIGHT)
        {
            return(new[] { target.x + projectionHalfSpan, target.x - projectionHalfSpan });
        }
        else
        {
            return(new[] { target.y + projectionHalfSpan, target.y - projectionHalfSpan });
        }
    }
Example #2
0
 private ProjectionHits ViewProjectionEdgeHits(IEnumerable <Vector3> targetsRotatedToCameraIdentity, ProjectionEdgeHits alongAxis, float projectionPlaneZ, float halfFovRad)
 {
     float[] projectionHits = targetsRotatedToCameraIdentity
                              .SelectMany(target => TargetProjectionHits(target, alongAxis, projectionPlaneZ, halfFovRad))
                              .ToArray();
     return(new ProjectionHits(projectionHits.Max(), projectionHits.Min()));
 }