Это будет работать.Тем не менее, обычно лучше выделить плоскости усеченного конуса и рассчитать расстояния до них.Вы сказали, что «скорость не имеет большого значения», но в конце концов вы можете обнаружить, что это так.В конце концов, мы делаем выборку усеченного контура, чтобы ускорить процесс.
Умножение вершины на матрицу требует эквивалента четырехточечных произведений, поэтому вам необходим эквивалент 32-точечных произведений, чтобы проверить все 8 углов.Для вычисления расстояния от точки до плоскости требуется скалярное произведение и сложение, что несколько более эффективно в худшем случае и намного более эффективно в среднем (поскольку вы часто можете выбросить объект после отсечения после одной или двух плоскостей,и не более трех).Существует ряд оптимизаций для плоскостей отсечения, использующих временную когерентность, которые я не буду вдаваться в более глубокие детали.
Кроме того, вы можете заранее выполнить грубую выборку, рассчитав расстояние от центральной точки до плоскости ипроверьте, больше ли это, чем радиус ограничительной рамки.Это отбраковывает объекты, которые явно "в" или "из" очень дешево.Или, в качестве альтернативы, вы можете сравнить точечное произведение вектора вашего вида с косинусом значения вашего поля зрения плюс некоторую «подстановку» (или, альтернативно, просто посмотрите, является ли она положительной) в качестве первой очень грубой проверки.Как вы помните, скалярное произведение двух векторов говорит вам, сколько они указывают в одном направлении.То, что имеет отрицательный точечный продукт с вектором вашего взгляда, безусловно, можно безопасно отбросить, потому что оно позади вас.