Как узнать, сколько единиц в плоскости экрана в OpenGL

Как получить относительный размер плоскости просмотра в собственных единицах opengl? Мне нужно выяснить ширину и высоту в «единицах opengl». Есть ли функция, которая будет получать эту информацию?

Я предполагаю, что одна единица (скажем, 1.0f) в Z будет эквивалентно одной единице в XДаже если преобразование в реальную измерительную систему бессмысленно.

Я знаю, что могу получить размер экрана либо с помощью GetSystemMetrics(SM_CXSCREEN) или же glutGet(GLUT_SCREEN_WIDTH), но это в пикселях.

Для обработки вызовов графического окна я использую freeglut в операционных системах, отличных от Windows, и WinAPI в Windows.

0

Решение

Предполагая, что вы хотите нарисовать что-то вроде пользовательского интерфейса, установите матрицу проекции на Ортогональную матрицу с помощью glOrtho, тогда у вас нет перспективы и у вас есть прямое ортографическое отображение между мировыми координатами и экранными координатами. Аргументы к вашему glOrtho Позвоните, чтобы определить, насколько широко / высоко ваш порт просмотра находится в мировых координатах.

Если вы хотите нарисовать как пользовательский интерфейс, так и трехмерную сцену, нарисуйте glOrtho и нарисовать сцену с glPerspective используя обтравочную маску, чтобы убедиться, что вы не испортили свой интерфейс.


Если, с другой стороны, вы хотите узнать ширину порта вида в трехмерной сцене с перспективой, чтобы вы знали, насколько велика прорисовка вашего объекта, вам придется иметь дело с перспективной проекцией. Вы должны знать, по какой координате Z вы хотите знать ширину / высоту порта просмотра. Ты можешь использовать gluUnProject рассчитать мировую координату, соответствующую заданной экранной координате и плоскости Z.

Однако, вероятно, было бы лучше сделать это наоборот, всегда рисовать ваш объект с заданным размером, а затем вычислять, какой должна быть матрица проекции, чтобы этот объект правильно отображался в вашем окне просмотра.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]