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 迷你地图叠加层的策略是使用 glWindowPos2d
和 glDrawPixels
,我发现它非常成功。您需要关闭常见的 OpenGL 功能,例如纹理、光照和深度测试。在下面的例子中,minimap_x
和minimap_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)
我正在尝试使用 3D + 2D(鸟瞰图迷你地图)创建一个简单的机器人模拟器,如下图所示。
我的地图文件只是多边形的顶点列表和圆的 center/radius(所有对象的高度均为 1,其中 z = 0)。
我发现 python VTK 绘图仪使简单对象的可视化变得非常容易,但是缺少多视图的文档 windows。我也试过 open-cv 但它在单独的 window.
中创建了一个 2D 图像实现如下模拟器的最简单方法是什么?地图上的对象很少,所以效率不是我关心的。
我制作这样的 2D 迷你地图叠加层的策略是使用 glWindowPos2d
和 glDrawPixels
,我发现它非常成功。您需要关闭常见的 OpenGL 功能,例如纹理、光照和深度测试。在下面的例子中,minimap_x
和minimap_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)