12345678910111213141516171819202122232425262728293031323334353637 |
- """
- Mesh with Random Vertex Colors
- ------------------------------
- """
- import bpy
- import gpu
- import numpy as np
- from random import random
- from gpu_extras.batch import batch_for_shader
- mesh = bpy.context.active_object.data
- mesh.calc_loop_triangles()
- vertices = np.empty((len(mesh.vertices), 3), 'f')
- indices = np.empty((len(mesh.loop_triangles), 3), 'i')
- mesh.vertices.foreach_get(
- "co", np.reshape(vertices, len(mesh.vertices) * 3))
- mesh.loop_triangles.foreach_get(
- "vertices", np.reshape(indices, len(mesh.loop_triangles) * 3))
- vertex_colors = [(random(), random(), random(), 1) for _ in range(len(mesh.vertices))]
- shader = gpu.shader.from_builtin('3D_SMOOTH_COLOR')
- batch = batch_for_shader(
- shader, 'TRIS',
- {"pos": vertices, "color": vertex_colors},
- indices=indices,
- )
- def draw():
- batch.draw(shader)
- bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')
|