Python 在同一个 window 中渲染 3D、2D 图像

Python rendering 3D, 2D images within a same window

我正在尝试使用 3D + 2D(鸟瞰图迷你地图)创建一个简单的机器人模拟器,如下图所示。

我的地图文件只是多边形的顶点列表和圆的 center/radius(所有对象的高度均为 1,其中 z = 0)。

我发现 python VTK 绘图仪使简单对象的可视化变得非常容易,但是缺少多视图的文档 windows。我也试过 open-cv 但它在单独的 window.

中创建了一个 2D 图像

实现如下模拟器的最简单方法是什么?地图上的对象很少,所以效率不是我关心的。

我制作这样的 2D 迷你地图叠加层的策略是使用 glWindowPos2dglDrawPixels,我发现它非常成功。您需要关闭常见的 OpenGL 功能,例如纹理、光照和深度测试。在下面的例子中,minimap_xminimap_y是小地图左上角的window坐标。

例如:

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 表面上。将 Surface 转换为 glDrawPixels 可用的原始图像数据如下所示:

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