Working render to numpy array

This commit is contained in:
MrDiver 2023-09-11 03:41:32 +02:00
commit f73b35d86c
3 changed files with 17 additions and 25 deletions

View file

@ -19,9 +19,7 @@ from manim.renderer.opengl_renderer import OpenGLRenderer
if __name__ == "__main__":
with tempconfig({"renderer": "opengl"}):
win = Window(width=1920, height=1080)
renderer = OpenGLRenderer(1920, 1080)
renderer.use_window_fbo()
# vm = OpenGLVMobject([col.RED, col.GREEN])
vm = Circle(
radius=1, stroke_color=col.YELLOW, fill_opacity=1, fill_color=col.RED
@ -36,16 +34,13 @@ if __name__ == "__main__":
camera = OpenGLCameraFrame()
renderer.init_camera(camera)
# image = renderer.render(camera, [vm, vm2])
# print(image.shape)
# Image.fromarray(image,"RGBA").show()
label = pyglet.text.Label('Hello, world',
font_name='Times New Roman',
font_size=36,
x=0, y=0,
anchor_x='center', anchor_y='center')
renderer.render(camera, [vm, vm2])
image = renderer.get_pixels()
print(image.shape)
Image.fromarray(image,'RGBA').show()
exit(0)
win = Window(width=1920, height=1080,vsync=True, config= Config(double_buffer=True,samples=4))
renderer.use_window_fbo()
@win.event
def on_close():
win.close()
@ -54,7 +49,7 @@ if __name__ == "__main__":
@win.event
def on_mouse_motion(x, y, dx, dy):
vm.move_to((14.2222*(x/1920-0.5),8*(y/1080-0.5),0))
vm.set_color(col.RED.interpolate(col.GREEN,x/1920))
# vm.set_color(col.RED.interpolate(col.GREEN,x/1920))
# print(x,y)
@win.event

View file

@ -362,12 +362,12 @@ class OpenGLRenderer(Renderer):
vao.release()
self.ctx.enable(gl.BLEND)
# self.ctx.blend_func = (
# gl.SRC_ALPHA,
# gl.ONE_MINUS_SRC_ALPHA,
# gl.ONE,
# gl.ONE,
# )
self.ctx.blend_func = (
gl.SRC_ALPHA,
gl.ONE_MINUS_SRC_ALPHA,
gl.ONE,
gl.ONE,
)
# self.ctx.enable(gl.DEPTH_TEST)
# TODO: Handle Submobjects
render_shader(
@ -378,10 +378,8 @@ class OpenGLRenderer(Renderer):
)
def get_pixels(self) -> ImageType:
raw = self.output_fbo.read(components=4, dtype="f4") # RGBA, floats
buf = np.frombuffer(raw, dtype="f4").reshape(
(self.pixel_height, self.pixel_width, 4)
)
raw = self.output_fbo.read(components=4, dtype='f1',clamp=True) # RGBA, floats
buf = np.frombuffer(raw, dtype=np.uint8).reshape((1080,1920,-1))
return buf

View file

@ -24,7 +24,7 @@ class Renderer(ABC):
(ImageMobject, self.render_image),
]
def render(self, camera, renderables: list[OpenGLVMobject]) -> ImageType: # Image
def render(self, camera, renderables: list[OpenGLVMobject])->None : # Image
self.pre_render(camera)
for mob in renderables:
for type, render_func in self.capabilities:
@ -36,7 +36,6 @@ class Renderer(ABC):
f"The type{type(mob)} is not supported in Renderer: {self.__class__}"
)
self.post_render()
return self.get_pixels()
def pre_render(self, camera):
raise NotImplementedError