Текстовая позиция OpenGL под Windows - PullRequest
0 голосов
/ 05 июня 2009

Я занимаюсь разработкой приложения OpenGL с двумя режимами работы: оконный режим и полный экран.

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

Приложение создает шрифты с помощью wglUseFontBitmap и отображает текстовые строки с помощью glCallLists (оно устанавливает позицию текста с помощью glRasterPos2i). Перед отображением текста я корректирую положение текста, добавляя смещение к координате Y. Я получаю это смещение с помощью вызова API GetDCOrgEx Win32.

Ответы [ 3 ]

0 голосов
/ 05 июня 2009

Вот код для вычисления смещения Y:

POINT vOffset;

m_hdc = GetDC(m_hWnd);
if (m_hdc)
{
  GetDCOrgEx(m_hdc, &vOffset);
  m_iYOffset = vOffset.y;
}

Вышеуказанный код вызывается после того, как программа настроила полноэкранный режим. Я пытался вызывать GetDCOrgEx каждый раз, когда мне нужно написать текстовую строку, но текст пишется в тех же позициях, что когда GetDCOrgEx вызывается только один раз.

0 голосов
/ 08 июня 2009

Schnaader, большое спасибо за ваши ответы.

Я решил проблему, изменив способ вычисления смещения, которое мне нужно добавить к координате Y. Теперь смещение вычисляется с помощью следующего кода:

m_iYOffset = GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYBORDER);

Приведенный выше код решает проблему для моего приложения.

0 голосов
/ 05 июня 2009

Я думаю, вам нужно снова вызвать GetDCOrgEx после перехода в полноэкранный режим, или вы уже это делаете? Было бы полезно, если бы вы могли опубликовать код, где вы вызываете GetDCOrgEx, и рассчитать смещение Y.

РЕДАКТИРОВАТЬ: Другая идея: Может ли быть так, что вы можете использовать то же смещение Y, но отрицательное? Или, возможно, рассчитать позицию Y и затем использовать height-ypos? Здесь есть исходный код , который использует glRasterPos2i по-разному в полноэкранном режиме:

  if(!state->fullScreen)
    // if fullScreen (don't forget the image/GL y-coord vertical flip)
    glRasterPos2i((w - state->img->cols())/2, (h - state->img->rows())/2);
  else
    // for non-fullscreen images
    glRasterPos2i(0,h);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...