Я на этапе оптимизации рендерера, о котором я писал в OpenGL, и мой следующий шаг - отобрать все, что я не вижу. При чтении этого и других ресурсов, я вижу визуальное изображение усеченного контура как:
Изображение из: https://www.scratchapixel.com/images/upload/perspective-matrix/camsetup1.png
И поэтому подумал, что мы передаем что-то вроде glm::radians(90.0f)
. Однако я столкнулся с проблемами отбраковки с помощью своего алгоритма, потому что думал, что буду идти под углом 45 градусов влево и вправо по плоскостям ... но потом я начал получать ложноположительный отбор. Как только я изменил его на использование угла fov
, переданного в glm::perspective
, тогда отбор начинает работать нормально.
Однако есть две вещи, в которых я не уверен:
- Верно ли то, что я сказал? Как в значении fov должна быть половина зеленого угла на изображении, размещенном выше?
- Если (1) верно, то почему коэффициент 90 не показывает мне все слева и справа?
Это важно для меня понять, потому что я хочу, чтобы мои алгоритмы отбраковки отбирались как можно больше без ложных срабатываний. Как вы можете догадаться, я получал ложноположительные отбраковки, потому что я подумал: «Мне нужно снова разделить первый аргумент, который я использую для glm::perspective()
, на два, чтобы получить половину угла», что привело к более жесткому усечению, которое отбраковало бы намного больше, чем должно быть.
Способ, которым я сейчас отбираю, - это вычисление левого и правого краев усеченного контура и отбраковка любых 2D-линий, которые не видны левым или правым краем (как если бы они были отрезками), через точечные произведения. , Вот почему более узкий угол давал мне горе. Кроме того, если есть лучший способ сделать это, дайте мне знать, хотя я думаю, что два продукта с точками, вероятно, самый дешевый, который я собираюсь получить в отношении эффективности вычислений для линии, которую я должен проверить.