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¶
- apprs¶
- apply_uniforms(*, optional: bool = False, **kwargs) None¶
- dynamic_uniforms() dict¶
- add(*objs, insert=False) Self¶
向该对象添加子对象
如果
insert=True(默认为False),那么插入到子物件列表的开头
- remove(*objs) Self¶
从该对象移除子对象
- class janim.items.frame_effect.SimpleFrameEffect(*items: Item, shader: str, uniforms: Iterable[str] = [], cache_key: str | None = None, root_only: bool = False, **kwargs)¶
基类:
FrameEffectFrameEffect的简化封装,具体请参考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()¶
- 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()¶
- 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¶