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.