File under: Development, GLSL, vector, Mathematics

Rotating vectors in GLSL

I don't understand why, but GLSL doesn't have built in vector rotation functions. So, for convenience, here are the basic rotations around the axes

vec3 rotateY (  in vec3 v,  in float angle) {
	vec3 ret = vec3 (v.z*sin(angle) + v.x*cos(angle), v.y, v.z*cos(angle) - v.x*sin(angle));
	return ret;
}


vec3 rotateX ( in vec3 v,  in float angle) { 
	vec3 ret= vec3 (v.x, v.y*cos(angle) - v.z*sin(angle), v.y*sin(angle) + v.z*cos(angle)); 
	return ret;
}

vec3 rotateYX ( in vec3 aVec,  in float angleY,  in float angleX){
	return rotateX(rotateY(aVec, angleY), angleX);
}

vec3 rotateXY ( in vec3 aVec,  in float angleY,  in float angleX){
	return rotateY(rotateX(aVec, angleY), angleX);
}
vec3 rotateZ ( in vec3 v,  in float angle) { 
	return  vec3 (v.x*cos(angle) - v.y*sin(angle), v.x*sin(angle) + v.y*cos(angle), v.z); 
}

In production code, if I had to repeatedly rotate vectors I would create rotation matrices and then re-use those. But these are convenient functions for getting started, or when the angle is always different, preventing reuse of matrices.