private static bool IsSphereInFrustum(Vector3d sphereCenter, double sphereRadius, PlaneD[] frustum)
        {
            Vector4d center4 = new Vector4d(sphereCenter.X, sphereCenter.Y, sphereCenter.Z, 1.0);

            for (int i = 0; i < 6; i++)
            {
                if (frustum[i].Dot(center4) < -sphereRadius)
                {
                    return false;
                }
            }

            return true;
        }
 public bool IsSphereInViewFrustum(SharpDX.Vector3 center, float radius)
 {
     Vector4d centerV4 = new Vector4d(center.X, center.Y, center.Z, 1f);
     for (int i = 0; i < 6; i++)
     {
         if (frustum[i].Dot(centerV4) + radius < 0)
         {
             return false;
         }
     }
     return true;
 }
 public static bool IsPlanetInFrustum(RenderContext11 renderContext, float rad)
 {
     rad *= 2;
     var frustum = renderContext.Frustum;
     var center = new Vector3d(0, 0, 0);
     var centerV4 = new Vector4d(0, 0, 0, 1f);
     for (var i = 0; i < 6; i++)
     {
         if (frustum[i].Dot(centerV4) + rad < 0)
         {
             return false;
         }
     }
     return true;
 }
Beispiel #4
0
        public virtual bool IsTileInFrustum(PlaneD[]frustum)
        {
            InViewFrustum = false;
            Vector3d center = sphereCenter;

            if (this.Level < 2 && (dataset.Projection == ProjectionType.Mercator || dataset.Projection == ProjectionType.Toast))
            {
                return true;
            }

            Vector4d centerV4 = new Vector4d(center.X , center.Y , center.Z , 1f);
            Vector3d length = new Vector3d(sphereRadius, 0, 0);

            double rad = length.Length();
            for (int i = 0; i < 6; i++)
            {
                if (frustum[i].Dot(centerV4) + rad < 0)
                {
                    return false;
                }
            }
            InViewFrustum = true;

            return true;
        }
 //   public static Plane Normalize(Plane p);
 //   public static Vector3 IntersectLine(Plane p, Vector3 v1, Vector3 v2);
 //   public static Plane FromPointNormal(Vector3 point, Vector3 normal);
 //   public static Plane FromPoints(Vector3 p1, Vector3 p2, Vector3 p3);
 //    public void Transform(Matrix m);
 //    public static Plane Transform(Plane p, Matrix m);
 //    public void Scale(float s);
 //    public static Plane Scale(Plane p, float s);
 //   public float Dot(Vector3 v);
 public double Dot(Vector4d v)
 {
     //return ((((planeRef[4] * *(((float*) (&v + 4)))) + (planeRef[8] * *(((float*) (&v + 8))))) + (planeRef[12] * *(((float*) (&v + 12))))) + (planeRef[0] * *(((float*) &v))));
     return B * v.Y + C * v.Z + D * v.W + A * v.X;
 }