glsl着色器编写随机函数

在GLSL中没有内置的随机函数,因此需要自定义。通过vec2的点乘和sin、fract等函数,可以创建一个在[0,1]范围内的随机数生成方法。具体步骤包括使用特定向量进行点乘,sin函数转换值域,乘以常数扩大范围,最后用fract获取小数部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值