Пример #1
0
        /**
             * Checks if the frustum of this camera intersects the given Cuboid.
             *
             * @param c The cuboid to check the frustum against.
             * @return True if the frustum intersects the cuboid.
             */
        public bool intersects(Cuboid c)
        {
            Vector3[] vertices = c.getVertices();
                for (int i = 0; i < 6; i++)
                {
                    if (frustum[i, 0] * (vertices[0].X - position.X) + frustum[i, 1] * (vertices[0].Y - position.Y) + frustum[i, 2] * (vertices[0].Z - position.Z) + frustum[i, 3] > 0)
                    {
                        continue;
                    }

                    if (frustum[i, 0] * (vertices[1].X - position.X) + frustum[i, 1] * (vertices[1].Y - position.Y) + frustum[i, 2] * (vertices[1].Z - position.Z) + frustum[i, 3] > 0)
                    {
                        continue;
                    }

                    if (frustum[i, 0] * (vertices[2].X - position.X) + frustum[i, 1] * (vertices[2].Y - position.Y) + frustum[i, 2] * (vertices[2].Z - position.Z) + frustum[i, 3] > 0)
                    {
                        continue;
                    }

                    if (frustum[i, 0] * (vertices[3].X - position.X) + frustum[i, 1] * (vertices[3].Y - position.Y) + frustum[i, 2] * (vertices[3].Z - position.Z) + frustum[i, 3] > 0)
                    {
                        continue;
                    }

                    if (frustum[i, 0] * (vertices[4].X - position.X) + frustum[i, 1] * (vertices[4].Y - position.Y) + frustum[i, 2] * (vertices[4].Z - position.Z) + frustum[i, 3] > 0)
                    {
                        continue;
                    }

                    if (frustum[i, 0] * (vertices[5].X - position.X) + frustum[i, 1] * (vertices[5].Y - position.Y) + frustum[i, 2] * (vertices[5].Z - position.Z) + frustum[i, 3] > 0)
                    {
                        continue;
                    }

                    if (frustum[i, 0] * (vertices[6].X - position.X) + frustum[i, 1] * (vertices[6].Y - position.Y) + frustum[i, 2] * (vertices[6].Z - position.Z) + frustum[i, 3] > 0)
                    {
                        continue;
                    }

                    if (frustum[i, 0] * (vertices[7].X - position.X) + frustum[i, 1] * (vertices[7].Y - position.Y) + frustum[i, 2] * (vertices[7].Z - position.Z) + frustum[i, 3] > 0)
                    {
                        continue;
                    }
                    return false;
                }

                return true;
        }