在 Blender 视图中绘制自定义网格
Draw custom grid in Blender view
我正在尝试添加将在 blender 的视口中绘制的自定义网格,就像默认网格一样。
问题是,我不明白我应该如何连续 运行 绘图代码,以及我应该如何以正确的方式将它附加到按钮上。
我这里有绘图代码:
def create_batch(self, context):
self.shader = gpu.shader.from_builtin('3D_UNIFORM_COLOR')
self.batch = batch_for_shader(self.shader, 'LINES', {'pos': [(0,0,0), (1,0,0)]})
def draw_callback(self, context):
self.shader.bind()
self.shader.uniform_float('color', context.scene.cdtrk_grid.color)
self.batch.draw(self.shader)
这里是 属性 class
class CDTRKGridProps(bpy.types.PropertyGroup):
enabled : bpy.props.BoolProperty (
name = 'enabled',
default = False
)
color : bpy.props.FloatVectorProperty (
name = 'color',
subtype = 'COLOR',
default = (0.13, 0.25, 0.03)
)
def register():
bpy.types.Scene.cdtrk_grid = bpy.props.PointerProperty(type=CDTRKGridProps)
我尝试创建一个运算符来 运行 绘图代码,但我不确定我应该在哪里调用该运算符以便它从一开始就可以工作,而且我不明白如何制作它 运行 每次而不是一次。
找到了答案,但我不确定它在性能方面是否正确。每次都获取着色器似乎是错误的。
def register():
handle = bpy.types.SpaceView3D.draw_handler_add(
draw_callback, (), 'WINDOW', 'POST_VIEW')
def draw_callback():
if bpy.context and bpy.context.area:
settings = bpy.context.scene.cdtrk_grid
if settings.enabled:
shader = gpu.shader.from_builtin('3D_SMOOTH_COLOR')
batch = batch_for_shader(shader, 'LINES', {'pos': [(0,0,0), (1,0,0)],
'color': [(1,0,0, 1), (0,1,0, 1)]})
shader.bind()
batch.draw(shader)
我正在尝试添加将在 blender 的视口中绘制的自定义网格,就像默认网格一样。 问题是,我不明白我应该如何连续 运行 绘图代码,以及我应该如何以正确的方式将它附加到按钮上。
我这里有绘图代码:
def create_batch(self, context):
self.shader = gpu.shader.from_builtin('3D_UNIFORM_COLOR')
self.batch = batch_for_shader(self.shader, 'LINES', {'pos': [(0,0,0), (1,0,0)]})
def draw_callback(self, context):
self.shader.bind()
self.shader.uniform_float('color', context.scene.cdtrk_grid.color)
self.batch.draw(self.shader)
这里是 属性 class
class CDTRKGridProps(bpy.types.PropertyGroup):
enabled : bpy.props.BoolProperty (
name = 'enabled',
default = False
)
color : bpy.props.FloatVectorProperty (
name = 'color',
subtype = 'COLOR',
default = (0.13, 0.25, 0.03)
)
def register():
bpy.types.Scene.cdtrk_grid = bpy.props.PointerProperty(type=CDTRKGridProps)
我尝试创建一个运算符来 运行 绘图代码,但我不确定我应该在哪里调用该运算符以便它从一开始就可以工作,而且我不明白如何制作它 运行 每次而不是一次。
找到了答案,但我不确定它在性能方面是否正确。每次都获取着色器似乎是错误的。
def register():
handle = bpy.types.SpaceView3D.draw_handler_add(
draw_callback, (), 'WINDOW', 'POST_VIEW')
def draw_callback():
if bpy.context and bpy.context.area:
settings = bpy.context.scene.cdtrk_grid
if settings.enabled:
shader = gpu.shader.from_builtin('3D_SMOOTH_COLOR')
batch = batch_for_shader(shader, 'LINES', {'pos': [(0,0,0), (1,0,0)],
'color': [(1,0,0, 1), (0,1,0, 1)]})
shader.bind()
batch.draw(shader)