Opengl: подгонять квад к экрану, учитывая значение Z - PullRequest
4 голосов
/ 04 января 2011

Краткая версия вопроса:

Я поставлю квад. Я знаю ширину и высоту экрана в координатах окна, я знаю Z-координаты четырехугольника в 3D. Я знаю ФУТОВ, я знаю аспект. Квадрат будет располагаться вдоль оси Z, Моя камера не двигается (помещается в 0, 0, 0). Я хочу узнать ширину и высоту четырехугольника в 3D КООРДИНАТАХ, который точно поместится на моем экране.

Длинная версия вопроса:

Я хотел бы поместить квад по оси Z с указанным смещением Z , я хотел бы выяснить ширину и высоту квадра, который будет точно заполнять весь экран.

Раньше у меня был пост на gamedev.net, в котором использовалась формула, подобная следующей:

* dist = Z * tan (FOV / 2) *

Теперь я никогда не смогу найти пост! Хотя это похоже, но все же отличается, потому что я вспомнил, что в этой рабочей формуле они используют screenWidth и screenHeight, которые являются шириной и высотой экрана в координатах окна.

Я не очень знаком с такими понятиями, как frustum, fov и аспект, поэтому я не могу разработать формулу самостоятельно. Кроме того, я уверен, что мне не нужен gluUnproject (я пробовал, но результаты далеко). Это не некоторые вызовы gl, это просто математическая формула, которая может определить ширину и высоту в трехмерном пространстве, которые могут заполнить весь экран, известны смещение IF Z, ширина в координатах окна и высота в координатах окна.

1 Ответ

4 голосов
/ 04 января 2011

Предполагая, что FOV измеряется в плоскости Y-Z, тогда:

Height = Z * tan(fov/2)

width = height * aspect_ratio

...