frame_effect

class janim.items.frame_effect.FrameEffect(*items: Item, fragment_shader: str, cache_key: str | None = None, root_only: bool = False, **kwargs)

基类:Item

将传入的着色器 fragment_shader 应用到 items

着色器基本格式:

#version 330 core

in vec2 v_texcoord; // 传入的纹理坐标
out vec4 f_color;   // 输出的颜色

uniform sampler2D fbo; // 传入的纹理(承载了 items 的渲染结果)

// used by JA_FINISH_UP
uniform bool JA_BLENDING;
uniform sampler2D JA_FRAMEBUFFER;

void main()
{
    // 进行处理,例如
    f_color = texture(fbo, v_texcoord); // 读取纹理颜色
    f_color.rgb = 1.0 - f_color.rgb; // 反色

    #[JA_FINISH_UP]
}

其中 #[JA_FINISH_UP] 是一个占位符,JAnim 会在这里做一些额外的操作

上述代码最核心的是 main 中“进行处理”的部分,其余的代码作为固定的写法照抄即可

如果懒得抄,可以用 SimpleFrameEffect,这个类只要写“进行处理”这部分就好了,因为它把其余代码都封装了

完整示例请参考 样例学习 中的对应代码

renderer_cls

FrameEffectRenderer 的别名

apprs
apply_uniforms(*, optional: bool = False, **kwargs) None
dynamic_uniforms() dict
add(*objs, insert=False) Self

向该对象添加子对象

如果 insert=True (默认为 False),那么插入到子物件列表的开头

remove(*objs) Self

从该对象移除子对象

apply(*items: Item, root_only: bool = False) Self
discard(*items: Item, root_only: bool = False) Self
class janim.items.frame_effect.SimpleFrameEffect(*items: Item, shader: str, uniforms: Iterable[str] = [], cache_key: str | None = None, root_only: bool = False, **kwargs)

基类:FrameEffect

FrameEffect 的简化封装,具体请参考 FrameEffect 中的说明

警告

若着色器代码中出现报错,报错行数无法与 shader 代码中的行对应

class janim.items.frame_effect.Cmpt_FrameClip(*args, **kwargs)

基类:Component, Generic

copy() Self
become(other: Cmpt_FrameClip) Self
not_changed(other: Cmpt_FrameClip) bool
classmethod align_for_interpolate(cmpt1: Cmpt_FrameClip, cmpt2: Cmpt_FrameClip)
interpolate(cmpt1: Self, cmpt2: Self, alpha: float, *, path_func=None) None
set(left: float | None = None, top: float | None = None, right: float | None = None, bottom: float | None = None) Self
class janim.items.frame_effect.FrameClip(*items: Item, clip: tuple[float, float, float, float] = (0, 0, 0, 0), debug: bool = False, root_only: bool = False, **kwargs)

基类:FrameEffect

一个用于创建简单矩形裁剪效果的类

  • clip 参数表示裁剪区域的四个边界,分别是左、上、右、下,范围是 0~1 表示百分比

  • debug 参数表示是否开启调试模式,开启后裁剪区域外的部分会显示为半透明红色

clip
dynamic_uniforms()
create_border_rect(**kwargs) Rect

得到裁剪后的显示区域的包围矩形

class janim.items.frame_effect.Cmpt_TransformableFrameClip(*args, **kwargs)

基类:Component, Generic

copy() Self
become(other: Cmpt_TransformableFrameClip) Self
not_changed(other: Cmpt_TransformableFrameClip) bool
classmethod align_for_interpolate(cmpt1: Cmpt_TransformableFrameClip, cmpt2: Cmpt_TransformableFrameClip)
interpolate(cmpt1: Self, cmpt2: Self, alpha: float, *, path_func=None) None
set(left: float | None = None, top: float | None = None, right: float | None = None, bottom: float | None = None, x_offset: float | None = None, y_offset: float | None = None, x_scale: float | None = None, y_scale: float | None = None, rotate: float | None = None, *, scale: float | None = None) Self
class janim.items.frame_effect.TransformableFrameClip(*items: Item, clip: tuple[float, float, float, float] = (0, 0, 0, 0), offset: tuple[float, float] = (0, 0), scale: tuple[float, float] | float = (1, 1), rotate: float = 0, debug: bool = False, root_only: bool = False, **kwargs)

基类:FrameEffect

FrameClip 类似,但支持更多的变换操作(偏移、缩放、旋转)

  • clip 参数表示裁剪区域的四个边界,分别是左、上、右、下,范围是 0~1 表示百分比

  • offset 参数表示裁剪区域 x 与 y 方向的的偏移量,单位是百分比

  • scale 参数表示裁剪区域 x 与 y 方向的缩放量,单位是百分比

  • rotate 参数表示裁剪区域的旋转角度

  • debug 参数表示是否开启调试模式,开启后裁剪区域外的部分会显示为半透明红色

clip
dynamic_uniforms()
create_border_rect(**kwargs) Rect

得到裁剪后的显示区域的包围矩形

class janim.items.frame_effect.Shadertoy(shader: str, *, cache_key: str | None = None, root_only: bool = False, **kwargs)

基类:FrameEffect

一个用于创建类似 Shadertoy 着色器效果的类

例:

Shadertoy(
    '''
    void mainImage( out vec4 fragColor, in vec2 fragCoord ) {
        vec2 uv = fragCoord.xy / iResolution.xy;
        vec3 color = vec3(uv.x, uv.y, 0.5);
        fragColor = vec4(color, 1.0);
    }
    '''
).show()

警告

实际的报错行数要减去 10

例如,如果在上面的例子中将 iResolution 误写为了 Resolution, 会导致 0(12) : error C1503: undefined variable "Resolution" 的报错, 报错信息说的是在第 12 行,实际是第 2 行

行数标注:

Shadertoy(
    0 '''
    1 void mainImage( out vec4 fragColor, in vec2 fragCoord ) {
    2     vec2 uv = fragCoord.xy / iResolution.xy;
    3     vec3 color = vec3(uv.x, uv.y, 0.5);
    4     fragColor = vec4(color, 1.0);
    5 }
    6 '''
).show()
create_updater(**kwargs) DataUpdater
static updater(data: Shadertoy, p: UpdaterParams) None
class janim.items.frame_effect.AlphaEffect(*items: Item, root_only: bool = False, **kwargs)

基类:SimpleFrameEffect

alpha
dynamic_uniforms()