获取插值
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;
}