123456789101112131415161718192021222324252627282930313233343536373839404142 |
- """
- Rendering the 3D View into a Texture
- ------------------------------------
- The scene has to have a camera for this example to work.
- You could also make this independent of a specific camera,
- but Blender does not expose good functions to create view and projection matrices yet.
- """
- import bpy
- import bgl
- import gpu
- from gpu_extras.presets import draw_texture_2d
- WIDTH = 512
- HEIGHT = 256
- offscreen = gpu.types.GPUOffScreen(WIDTH, HEIGHT)
- def draw():
- context = bpy.context
- scene = context.scene
- view_matrix = scene.camera.matrix_world.inverted()
- projection_matrix = scene.camera.calc_matrix_camera(
- context.evaluated_depsgraph_get(), x=WIDTH, y=HEIGHT)
- offscreen.draw_view3d(
- scene,
- context.view_layer,
- context.space_data,
- context.region,
- view_matrix,
- projection_matrix)
- bgl.glDisable(bgl.GL_DEPTH_TEST)
- draw_texture_2d(offscreen.color_texture, (10, 10), WIDTH, HEIGHT)
- bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL')
|