【问题标题】:Draw custom grid in Blender view在 Blender 视图中绘制自定义网格
【发布时间】:2021-03-04 17:01:48
【问题描述】:

我正在尝试添加将在搅拌机的视口中绘制的自定义网格,就像默认网格一样。 问题是,我不明白我应该如何连续运行绘图代码,以及我应该如何以正确的方式将它附加到按钮上。

这里有绘图代码:

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 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)

我尝试创建一个可以运行绘图代码的运算符,但我不确定我应该在哪里调用该运算符以便它从​​一开始就工作,我不明白如何让它每次都运行而不是一次。

【问题讨论】:

    标签: python api blender


    【解决方案1】:

    找到了答案,但我不确定这在性能方面是否正确。每次都获取着色器似乎是错误的。

    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)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      相关资源
      最近更新 更多