Python рендеринг 3D, 2D изображений в одном окне - PullRequest
1 голос
/ 11 февраля 2020

Я пытаюсь создать простой симулятор робота с 3D + 2D (мини-карта с высоты птичьего полета), как показано на рисунке ниже.

Файл моей карты - это просто список вершин для многоугольника и центра / радиус для кругов (все объекты имеют высоту 1, где z = 0).

Я обнаружил, что python VTK-плоттер действительно упрощает визуализацию простого объекта, но для мульти-просмотра не хватает документации windows. Я также пробовал open-cv, но он создает 2D-изображение в отдельном окне.

Какой самый простой способ создать симулятор, как показано ниже? На карте было бы очень мало объектов, поэтому эффективность меня не беспокоит.

enter image description here

1 Ответ

1 голос
/ 08 марта 2020

Моя стратегия создания наложения 2D-мини-карты, подобного этой, заключается в использовании glWindowPos2d и glDrawPixels, и я считаю, что это очень успешно. Вы захотите отключить общие функции OpenGL, такие как текстурирование, освещение и тест глубины. В следующем примере minimap_x и minimap_y - это координаты окна верхнего левого угла миникарты.

Например:

glDisable(GL_TEXTURE_2D)
glDisable(GL_LIGHTING)
glDisable(GL_DEPTH_TEST)

glWindowPos2d(minimap_x, window_height - (minimap_y + minimap_height))
glDrawPixels(minimap_width, minimap_height, GL_RGBA, GL_UNSIGNED_BYTE, minimap_image)

glEnable(GL_TEXTURE_2D)
glEnable(GL_LIGHTING)
glEnable(GL_DEPTH_TEST)

Вам необходимо указать данные minimap_image.

В моих приложениях я обычно использую PyGame, поэтому миникарта находится на поверхности PyGame. Преобразование поверхности в необработанные данные изображения, используемые glDrawPixels, выглядит следующим образом:

 minimap_image = pygame.image.tostring(minimap_surface, "RGBA", True)
...