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; }
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; }