Shaders (TODO)¶
注意
本部分与 manim 入门的关联不算很大,因为涉及到大量的 OpenGL Shading Language 的成分,主要用于图形的上色。
有能力的读者,可以先去 https://thebookofshaders.com/ 和 https://shadertoy.com/ 学习一番。
set_color_by_code¶
该方法为 Mobject
的成员函数
也许你会用到这个方法来进行上色,这里仅给出一些提示,详细的教程请自行学习 glsl.
glsl 中的变量¶
vec4 color
颜色,rgba的范围均为 [0.0, 1.0]float r
: 红色float g
: 绿色float b
: 蓝色float a
: 透明度
vec3 points
三维坐标float x
float y
float z
vec3 unit_normal
: 单位法线vec3 light_coords
: 光源坐标float gloss
: 光泽float shadow
: 阴影
下面的代码可以将一个正方形从左到右渐变上色
class TestGlsl(Scene):
def construct(self):
square = Square(side_length=4)
square.set_color_by_code(f"""
vec3 blue = vec3{tuple(hex_to_rgb(BLUE))};
vec3 red = vec3{tuple(hex_to_rgb(RED))};
color.rgb = mix(blue, red, (point.x + 1.5) / 3);
""")
self.add(square)