2013-02-12 2 views
0

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

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

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

Чтобы обрабатывать вызовы графического окна, я использую freeglut для не-оконных ОС и WinAPI для Windows.

+1

Что именно вы здесь пытаетесь сделать – Aesthete

+0

Вопрос недействителен, как указано. Предполагая, что вы используете перспективную проекцию, нет «плоскости просмотра». Ширина экрана зависит от того, на каком расстоянии Z вы его измеряете. Если вы говорите о фиксированном известном расстоянии (например, -1.0 Z), то это ответственно. –

+0

Я предполагаю, что другой способ сказать, что я пытаюсь выяснить самую большую линию, которую я могу провести параллельно оси X в плоскости экрана, которая не превышает размеры порта просмотра. – user2063669

ответ

0

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

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


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

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

Смежные вопросы