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