Почти во всех теоретических материалах, которые я читал о проекционных матрицах, первый элемент равен 2n/(r-l)
, но в большинстве реализаций с открытым исходным кодом, которые я видел, он имеет значение 2n/((t-b)*a)
, что поначалу кажется мне логичным, поскольку (r-l)
должно быть ((t-b)*a)
, но когда Я на самом деле прогоняю цифры, что-то не так.
Если у нас есть вертикальное поле зрения 65 градусов, ближняя плоскость 0,1 и соотношение сторон 4: 3, то я, кажется, получаю:
2n/(r-l) = .2 / (tan(65*(4/3)*.5) * .2) = 1.0599
но
2n((t-b)*a) = .2 / (tan(65*.5) * (4/3) * .2) = 1.1773
Почему существует разница между всем, что я читаю, и тем, что я вижу в реализации? Я не замечал, пока не начал реализовывать ту же аналитическую инверсию, которую я вижу, первый элемент которой равен (r-l)/2n, что не является инверсией этих других реализаций.