我有一个用python写的程序,它使用pygame沿着pyopengl。唯一的问题是,我不能用pygame.draw在屏幕上画任何东西,而pygame.draw是我用来与程序接口的。我想知道是否有一种方法可以使用pygame的系统进行绘制,同时还可以使用pyopengl在其后面绘制3D。
pgccezyw1#
你不能直接这么做。但是,您可以使用pygame.draw模块或pygame.Surface.blit在pygame.Surface对象上绘制。使用pygame.PixelArray直接访问曲面上的像素。使用像素生成OpenGL Texture对象。这个纹理可以在OpenGL中使用。
pygame.draw
pygame.Surface.blit
pygame.Surface
pygame.PixelArray
def surfaceToTexture(pygame_surface): rgba_surface = pygame.image.tostring(pygame_surface, 'RGBA') width, height = pygame_surface.get_size() texture_obj = glGenTextures(1) glBindTexture(GL_TEXTURE_2D, texture_obj) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgba_surface) glBindTexture(GL_TEXTURE_2D, 0) return texture_obj image = pygame.image.load('my_image.png') texture = surfaceToTexture(image)
在另一个方向上,您可以渲染为OpenGL Renderbuffer或Texture对象(请参见Framebuffers)。使用glReadPixels或glGetTexImage从GPU加载纹理,并使用pygame.image.frombuffer创建pygame.Surface。
glReadPixels
glGetTexImage
pygame.image.frombuffer
size = screen.get_size() buffer = glReadPixels(0, 0, *size, GL_RGBA, GL_UNSIGNED_BYTE) pygame.display.flip() screen_surf = pygame.image.fromstring(buffer, size, "RGBA")
image_buffer = glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE) image_surf = pygame.image.fromstring(image_buffer, (width, height), "RGBA")
Pygame可以3d吗?、PyGame and ModernGL library、PyGame and OpenGL 4或PyGame and OpenGL immediate mode (Legacy OpenGL)。
1条答案
按热度按时间pgccezyw1#
你不能直接这么做。
但是,您可以使用
pygame.draw
模块或pygame.Surface.blit
在pygame.Surface
对象上绘制。使用pygame.PixelArray
直接访问曲面上的像素。使用像素生成OpenGL Texture对象。这个纹理可以在OpenGL中使用。在另一个方向上,您可以渲染为OpenGL Renderbuffer或Texture对象(请参见Framebuffers)。使用
glReadPixels
或glGetTexImage
从GPU加载纹理,并使用pygame.image.frombuffer
创建pygame.Surface
。Pygame可以3d吗?、PyGame and ModernGL library、PyGame and OpenGL 4或PyGame and OpenGL immediate mode (Legacy OpenGL)。