记录在webgl shader中常用方法

获取插值
float lerp (float x,float y,float t ) {
  return ( 1.0 - t ) * x + t * y;
}
计算两个二维向量的距离
float distanceTo(vec2 src, vec2 dst) {
	float dx = src.x - dst.x;
	float dy = src.y - dst.y;
	float dv = dx * dx + dy * dy;
	return sqrt(dv);
}
计算两个三维向量的距离
float distanceToVec3(vec3 src, vec3 dst) {
    float dx = src.x - dst.x;
    float dy = src.y - dst.y;
    float dz = src.z - dst.z;
    float squared = dx * dx + dy * dy + dz * dz;
    return sqrt(squared);
}
获取三维向量离中心点距离
float distanceVec3(vec3 p) {
	return sqrt(p.x * p.x + p.y * p.y + p.z * p.z);
}
设置向量离中心向量的位置
vec3 setLength(vec3 p, float length) {
	vec3 c_p = p;
	float scale = length / gtLength(c_p);
	c_p.x *= scale;
	c_p.y *= scale;
	c_p.z *= scale;
	return c_p;
}
atan2
float atan2(float y, float x){
  float t0, t1, t2, t3, t4;
  t3 = abs(x);
  t1 = abs(y);
  t0 = max(t3, t1);
  t1 = min(t3, t1);
  t3 = float(1) / t0;
  t3 = t1 * t3;
  t4 = t3 * t3;
  t0 = -float(0.013480470);
  t0 = t0 * t4 + float(0.057477314);
  t0 = t0 * t4 - float(0.121239071);
  t0 = t0 * t4 + float(0.195635925);
  t0 = t0 * t4 - float(0.332994597);
  t0 = t0 * t4 + float(0.999995630);
  t3 = t0 * t3;
  t3 = (abs(y) > abs(x)) ? float(1.570796327) - t3 : t3;
  t3 = (x < 0.0) ?  float(3.141592654) - t3 : t3;
  t3 = (y < 0.0) ? -t3 : t3;
  return t3;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸡饶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值