Esempio n. 1
0
        public void CalculateFrustumPointsWorldPosByProjection(out FrustumPointsPositions FrustumPointsPositions, out bool IsFacing, TransformStruct FrustumTransform, Vector3 WorldStartAngleProjection)
        {
            Vector3 C1 = this.LocalToWorld(FrustumTransform, (new Vector3(-this.F1.Width, this.F1.Height, 0) + this.F1.FaceOffsetFromCenter).Mul(0.5f));
            Vector3 C2 = this.LocalToWorld(FrustumTransform, (new Vector3(this.F1.Width, this.F1.Height, 0) + this.F1.FaceOffsetFromCenter).Mul(0.5f));
            Vector3 C3 = this.LocalToWorld(FrustumTransform, (new Vector3(this.F1.Width, -this.F1.Height, 0) + this.F1.FaceOffsetFromCenter).Mul(0.5f));
            Vector3 C4 = this.LocalToWorld(FrustumTransform, (new Vector3(-this.F1.Width, -this.F1.Height, 0) + this.F1.FaceOffsetFromCenter).Mul(0.5f));

            Vector3 frontFaceNormal = Vector3.Cross(C2 - C1, C4 - C1).normalized;

            IsFacing = Vector3.Dot(frontFaceNormal, C1 - WorldStartAngleProjection) >= 0;

            //We abort calculation if not facing
            if (IsFacing)
            {
                Vector3 C5 = C1 + ((C1 - WorldStartAngleProjection) * this.FaceDistance);
                Vector3 C6 = C2 + ((C2 - WorldStartAngleProjection) * this.FaceDistance);
                Vector3 C7 = C3 + ((C3 - WorldStartAngleProjection) * this.FaceDistance);
                Vector3 C8 = C4 + ((C4 - WorldStartAngleProjection) * this.FaceDistance);
                FrustumPointsPositions = new FrustumPointsPositions(C1, C2, C3, C4, C5, C6, C7, C8);
            }
            else
            {
                FrustumPointsPositions = default;
            }
        }
Esempio n. 2
0
        public void CalculateFrustumWorldPositionyFace(out FrustumPointsPositions FrustumPointsPositions, TransformStruct FrustumTransform)
        {
            Vector3 C1 = this.LocalToWorld(FrustumTransform, (new Vector3(-this.F1.Width, this.F1.Height, 0) + this.F1.FaceOffsetFromCenter).Mul(0.5f));
            Vector3 C2 = this.LocalToWorld(FrustumTransform, (new Vector3(this.F1.Width, this.F1.Height, 0) + this.F1.FaceOffsetFromCenter).Mul(0.5f));
            Vector3 C3 = this.LocalToWorld(FrustumTransform, (new Vector3(this.F1.Width, -this.F1.Height, 0) + this.F1.FaceOffsetFromCenter).Mul(0.5f));
            Vector3 C4 = this.LocalToWorld(FrustumTransform, (new Vector3(-this.F1.Width, -this.F1.Height, 0) + this.F1.FaceOffsetFromCenter).Mul(0.5f));
            Vector3 C5 = this.LocalToWorld(FrustumTransform, (new Vector3(-this.F2.Width, this.F2.Height, 0) + this.F2.FaceOffsetFromCenter).Mul(0.5f));
            Vector3 C6 = this.LocalToWorld(FrustumTransform, (new Vector3(this.F2.Width, this.F2.Height, 0) + this.F2.FaceOffsetFromCenter).Mul(0.5f));
            Vector3 C7 = this.LocalToWorld(FrustumTransform, (new Vector3(this.F2.Width, -this.F2.Height, 0) + this.F2.FaceOffsetFromCenter).Mul(0.5f));
            Vector3 C8 = this.LocalToWorld(FrustumTransform, (new Vector3(-this.F2.Width, -this.F2.Height, 0) + this.F2.FaceOffsetFromCenter).Mul(0.5f));

            FrustumPointsPositions = new FrustumPointsPositions(C1, C2, C3, C4, C5, C6, C7, C8);
        }