Makepad 图形和特效 logo

Makepad 图形和特效

打开

Makepad 中的 GPU 加速着色器、SDF 绘图、动画和视觉效果。学习着色器基础、SDF 形状、动画系统和缓动函数。

分享:

Makepad 图形和特效

Makepad 中的 GPU 加速着色器、SDF 绘图和动画。

快速导航

类别 描述
着色器基础 结构、变量、数学函数
SDF 绘图 圆形、矩形、胶囊、路径绘制
动画 动画器、缓动、关键帧、循环
视觉效果 悬停、渐变、阴影、发光

着色器结构

live_design! {
    MyShader = {{MyShader}} {
        fn pixel(self) -> vec4 {
            let sdf = Sdf2d::viewport(self.pos * self.rect_size);

            // 绘制形状
            sdf.circle(50.0, 50.0, 20.0);
            sdf.fill(#FF0000);

            return sdf.result;
        }
    }
}

SDF 操作

// 基本形状
sdf.circle(x, y, radius)
sdf.box(x, y, width, height, border_radius)
sdf.capsule(x1, y1, x2, y2, width)

// 填充和描边
sdf.fill(color)              // 填充形状
sdf.stroke(color, width)     // 描边轮廓
sdf.fill_keep(color)         // 填充,保持形状用于更多操作

动画系统

live_design! {
    <Button> {
        animator: {
            hover = {
                default: off
                off = { from: {all: Forward {duration: 0.15}} }
                on = { from: {all: Snap} }
            }
        }

        draw_bg: {
            color: #2196F3
            color_hover: #42A5F5
        }
    }
}

缓动函数

缓动 使用场景
OutQuad 进入动画
InQuad 退出动画
InOutQuad 平滑过渡
ExpDecay {d1: 0.8, d2: 0.97} 物理运动

动画示例

live_design! {
    LoadingSpinner = {{LoadingSpinner}} {
        animator: {
            spin = {
                default: on
                on = {
                    from: {all: Loop {duration: 1.0}}
                    apply: { draw_bg: { rotation: 360.0 } }
                }
            }
        }

        draw_bg: {
            fn pixel(self) -> vec4 {
                // 旋转弧着色器
                let sdf = Sdf2d::viewport(self.pos * self.rect_size);
                let angle = self.rotation * PI / 180.0;
                // 绘制旋转弧
                return sdf.result;
            }
        }
    }
}

渐变效果

draw_bg: {
    fn pixel(self) -> vec4 {
        // 线性渐变
        let grad = self.pos.y;
        let color = mix(#FF0000, #0000FF, grad);
        return vec4(color, 1.0);
    }
}

资源

评论

还没有评论。成为第一个评论的人!