Можно ли отрендерить только часть того, что видит gluLookAt?

Можно ли "взглянуть" на сцену OpenGL, которая была визуализирована, например, под углом обзора 60 градусов по вертикали через усеченную вершину / коридор / отверстие, имеющее меньшее поле зрения - и заполнила полученную плоскость проекции?

Я думаю, что это не то же самое, что "приближение".

Задний план:

Я борюсь с конвейером преобразования OpenGL для оптического прозрачного дисплея AR. Возможно, у меня есть понимание того, что конвейер преобразования OpenGL моей установки действительно нужно перепутать... Я создаю графику, которая должна правильно отображаться в реальном мире при наложении через очки AR. Очки правильно отслеживаются в трехмерном пространстве. Для рендеринга графики я использую устаревший конвейер фиксированных функций OpenGL. Результаты хорошие, но я продолжаю бороться с ошибками регистрации, которые, похоже, связаны с моей комбинацией glFrustum() плюс glLookAt() неправильное воссоздание "впечатления перспективы".

Эти дисплеи AR обычно не заполняют все поле зрения пользователя, но область дисплея выглядит как меньшее "окно", плавающее в пространстве, обычно на расстоянии ~3-6 футов перед пользователем, прикрепленное к движению головы.

В OpenGL я использую макет, очень похожий на макет Бурка, где (надеюсь, я правильно резюмирую) соотношение сторон дисплея (например, 4:3) с шириной окна и высотой окна определяет вертикальное поле обзора. Таким образом, поле обзора образует фиксированную связь с размерами окна и "усеченной вершиной преобразования", используемой OpenGL - в то время как мне нужно объединить две усеченные вершины (?):

Я понимаю, что сцена OpenGL должна быть визуализирована с параметрами, эквивалентными "параметрам" человеческого глаза, чтобы соответствовать - поскольку очки AR позволяют пользователю смотреть сквозь нее. Предположим, фокусное расстояние человеческого глаза составляет 22 мм (Кларк, Р. Н. Заметки о разрешении и других деталях человеческого глаза. 2007.), а "размер сенсора" глаза составляет 16 мм x 13 мм (моя оценка). Рассчитанное вертикальное поле зрения составляет ~33 градуса, и мы передаем его в конвейер OpenGL.

Результатом такого конвейера будет то, что я получаю либо окно приложения, заполненное этим "представлением", либо я могу получить уменьшенную версию if, в зависимости от моих glViewport настройки.

Но поскольку очки AR требуют ввода только для части, "меньшего окна" всего поля зрения человека, носящего, я думаю, мне нужен способ "взглянуть" на меньшую часть всей визуализированная сцена - как если бы я смотрел на сцену через крошечную дырочку. Эти очки с их "окном дисплея" обеспечивают вертикальное поле зрения примерно под 20 градусами, но вводить это в конвейер OpenGL было бы неправильно. Итак, как я могу объединить эти конфликтующие поля зрения? ... или я здесь ошибаюсь?

0 ответов

Другие вопросы по тегам