То, что вы ищете, это перспективная проекция . В дополнение к положению камеры и размерам коробки вам также понадобится «экран» где-то между камерой и коробкой, на которую будет проецироваться коробка. Расстояние от камеры до этого экрана будет соответствовать размеру проецируемого окна.
Допустим, камера находится в исходном положении и на z
единицах от коробки, экран находится на расстоянии одной единицы от камеры, а на поле были глубина d
, ширина 2w
и высота 2h
.
В трехмерном окружающем пространстве верхний левый угол рамки находится в позиции (-w, h, z)
. Луч между камерой и этой точкой пересекает проекционный экран на (-w/z, h/z, 1)
.
Верхний левый угол пола коробки находится в положении (-w, h, z+d)
, которое проецируется на (-w/(z+d), h/(z+d), 1)
.
Точно так же вы можете найти позиции других проецируемых точек. Поэтому ширина внешнего поля на экране равна 2w/z
, ширина внутреннего поля 2w/(z+d)
и аналогично для высот. Таким образом, внутренняя коробка - это всего лишь равномерно масштабированная версия внешней коробки, размеры внутреннего блока которой в 1021 раз больше размеров внешнего блока.
Обратите внимание, что диагонали, соединяющие два прямоугольника, не ориентированы под углом 45 градусов, если квадрат не прямоугольный.