1. glsl着色器编写随机函数
在glsl中好像没有默认的随机函数,所以一般都需要我们自己去定义,去实现这个随机函数
precision mediump float;
varying vec4 vPosition;
void main() {
float d = dot(vPosition.xy, vec2(12.9898, 78.233));
// 这里我们使用dot,点乘函数将两个二维向量转换成一个随机的标量(也就是我们平常使用的数字,一个随机的数字);
// 特定的二维向量vec2(12.9898, 78.233); 只是我们选择的一个随机数值,这个值是随机的
d = sin(d);
// 因为sin函数的值域 [-1, 1]; 所以我们这步操作是将一个随机的浮点数d,转换到[-1, 1]这个区间
d = d * 43758.5453;
// 我们将这个d 的值域从[-1, 1]直接拉伸到 [-43758.5453, 43758.5453]之间,目的是增大他的随机性
d = fract(d);
// 这个fract是获取d的小数部分,目的是将[-43758.5453, 43758.5453]之间的值域,重新压入到[0, 1]之间
// 因为gl_FragColor颜色的rgba在[0, 1]之间的。
}
所以我们最终的随机函数是这样的
float random(vec2 st) {
return fract(sin(dot(st.xy, vec2(12.9898, 78.233)))* 43758.5453);
}