[我正在尝试使用3D + 2D(鸟瞰图迷你地图)创建一个简单的机器人模拟器,如下图所示。
我的地图文件只是多边形的顶点和圆的中心/半径的列表(所有对象的高度均为1,z = 0)。
[我发现python VTK绘图仪确实使可视化简单对象变得非常容易,但是缺少用于多视图窗口的文档。我也尝试过open-cv,但它会在单独的窗口中创建2D图像。
实现如下所示的模拟器最简单的方法是什么?地图上的物体很少,因此效率不是我的问题。
我制作这样的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曲面上。将Surface转换为glDrawPixels
可用的原始图像数据,如下所示:
minimap_image = pygame.image.tostring(minimap_surface, "RGBA", True)