Python在同一窗口内渲染3D,2D图像

问题描述 投票:1回答:1

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

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

[我发现python VTK绘图仪确实使可视化简单对象变得非常容易,但是缺少用于多视图窗口的文档。我也尝试过open-cv,但它会在单独的窗口中创建2D图像。

实现如下所示的模拟器最简单的方法是什么?地图上的物体很少,因此效率不是我的问题。

enter image description here

vtk game-development pyopengl
1个回答
1
投票

我制作这样的2D小地图叠加层的策略是使用glWindowPos2dglDrawPixels,我发现它非常成功。您将需要关闭通用的OpenGL功能,例如纹理,照明和深度测试。在下面的示例中,minimap_xminimap_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)
© www.soinside.com 2019 - 2024. All rights reserved.