Как получить относительный размер плоскости просмотра в собственных единицах opengl? Мне нужно выяснить ширину и высоту в «единицах opengl». Есть ли функция, которая будет получать эту информацию?
Я предполагаю, что одна единица (скажем, 1.0f) в Z
будет эквивалентно одной единице в X
Даже если преобразование в реальную измерительную систему бессмысленно.
Я знаю, что могу получить размер экрана либо с помощью GetSystemMetrics(SM_CXSCREEN)
или же glutGet(GLUT_SCREEN_WIDTH)
, но это в пикселях.
Для обработки вызовов графического окна я использую freeglut в операционных системах, отличных от Windows, и WinAPI в Windows.
Предполагая, что вы хотите нарисовать что-то вроде пользовательского интерфейса, установите матрицу проекции на Ортогональную матрицу с помощью glOrtho
, тогда у вас нет перспективы и у вас есть прямое ортографическое отображение между мировыми координатами и экранными координатами. Аргументы к вашему glOrtho
Позвоните, чтобы определить, насколько широко / высоко ваш порт просмотра находится в мировых координатах.
Если вы хотите нарисовать как пользовательский интерфейс, так и трехмерную сцену, нарисуйте glOrtho
и нарисовать сцену с glPerspective
используя обтравочную маску, чтобы убедиться, что вы не испортили свой интерфейс.
Если, с другой стороны, вы хотите узнать ширину порта вида в трехмерной сцене с перспективой, чтобы вы знали, насколько велика прорисовка вашего объекта, вам придется иметь дело с перспективной проекцией. Вы должны знать, по какой координате Z вы хотите знать ширину / высоту порта просмотра. Ты можешь использовать gluUnProject
рассчитать мировую координату, соответствующую заданной экранной координате и плоскости Z.
Однако, вероятно, было бы лучше сделать это наоборот, всегда рисовать ваш объект с заданным размером, а затем вычислять, какой должна быть матрица проекции, чтобы этот объект правильно отображался в вашем окне просмотра.
Других решений пока нет …