Есть ли способ отобразить окно пигмея над OpenGL? - PullRequest
1 голос
/ 01 мая 2020

Я вмешивался в PyOpenGL и pygame, и мне удалось создать объект камеры в стиле FPS. Теперь я хочу добавить перекрестие в середине экрана и, возможно, развернуть его, чтобы отобразить статистику по бокам окна.

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

Мне кажется, что это должно быть очень легко, так как все, что я хочу, это что-то, что находится над всем остальным, и никогда не двигается. Неужели нет способа заставить Pygame рисовать поверх OpenGL, чтобы я мог просто нарисовать две линии в середине экрана?

1 Ответ

2 голосов
/ 01 мая 2020

Нет, не существует указанного способа сделать это. Делать это в OpenGL не так уж сложно.

В соответствии с вашими предыдущими вопросами, я предполагаю, что вы хотите сделать это в немедленном режиме, используя glBegin - glEnd последовательности.
В следующем я предполагаю, что width - ширина окна. и height его высота. Вы должны отключить проверку глубины и создать резервную копию текущих матриц на glPushMatrix / glPopMatrix. Загрузите Идентификационную матрицу для матрицы вида модели и настройте ортографическую проекцию c, соответствующую размеру окна (glOrtho):

cross_size = 100

glMatrixMode(GL_MODELVIEW)
glPushMatrix()
glLoadIdentity()

glMatrixMode(GL_PROJECTION)
glPushMatrix()
glLoadIdentity()
glOrtho(0, width, height, 0, -1, 1)

glDisable(GL_DEPTH_TEST)

glColor3ub(128, 128, 128) # color of the crosshair
glBegin(GL_LINES)
glVertex2f(width/2 - cross_size/2, height/2)
glVertex2f(width/2 + cross_size/2, height/2)
glVertex2f(width/2, height/2 - cross_size/2)
glVertex2f(width/2, height/2 + cross_size/2)
glEnd()

glEnable(GL_DEPTH_TEST)

glMatrixMode(GL_PROJECTION)
glPopMatrix()
glMatrixMode(GL_MODELVIEW)
glPopMatrix()

Убедитесь что двумерное текстурирование отключено (glDisable(GL_TEXTURE_2D))

...