common: move vec_from_mangle and mangle_from_vec to mathlib

This commit is contained in:
Eric Wasylishen 2017-04-23 19:31:00 -06:00
parent 881f12da52
commit 7887318def
4 changed files with 33 additions and 32 deletions

View File

@ -137,6 +137,36 @@ glm::vec3 CosineWeightedHemisphereSample(float u1, float u2)
return glm::vec3(x, y, z);
}
glm::vec3 vec_from_mangle(const glm::vec3 &m)
{
const glm::vec3 tmp = m * static_cast<float>(Q_PI / 180.0f);
const glm::vec3 v(cos(tmp[0]) * cos(tmp[1]),
sin(tmp[0]) * cos(tmp[1]),
sin(tmp[1]));
return v;
}
glm::vec3 mangle_from_vec(const glm::vec3 &v)
{
const glm::vec3 up(0, 0, 1);
const glm::vec3 east(1, 0, 0);
const glm::vec3 north(0, 1, 0);
// get rotation about Z axis
float x = glm::dot(east, v);
float y = glm::dot(north, v);
float theta = atan2f(y, x);
// get angle away from Z axis
float cosangleFromUp = glm::dot(up, v);
cosangleFromUp = qmin(qmax(-1.0f, cosangleFromUp), 1.0f);
float radiansFromUp = acosf(cosangleFromUp);
const glm::vec3 mangle = glm::vec3(theta, -(radiansFromUp - Q_PI/2.0), 0) * static_cast<float>(180.0f / Q_PI);
return mangle;
}
// Returns a 3x3 matrix that rotates (0,0,1) to the given surface normal.
glm::mat3x3 RotateFromUpToSurfaceNormal(const glm::vec3 &surfaceNormal)
{

View File

@ -222,6 +222,8 @@ const char *VecStrf(const vec3_t vec);
void UniformPointOnSphere(vec3_t dir, float u, float v);
void RandomDir(vec3_t dir);
glm::vec3 CosineWeightedHemisphereSample(float u1, float u2);
glm::vec3 vec_from_mangle(const glm::vec3 &m);
glm::vec3 mangle_from_vec(const glm::vec3 &v);
glm::mat3x3 RotateFromUpToSurfaceNormal(const glm::vec3 &surfaceNormal);
bool AABBsDisjoint(const vec3_t minsA, const vec3_t maxsA, const vec3_t minsB, const vec3_t maxsB);
void AABB_Init(vec3_t mins, vec3_t maxs, const vec3_t pt);

View File

@ -42,8 +42,6 @@ enum class vec3_transformer_t {
NORMALIZE_COLOR_TO_255
};
glm::vec3 vec_from_mangle(const glm::vec3 &m);
glm::vec3 mangle_from_vec(const glm::vec3 &v);
void normalize_color_format(vec3_t color);
class lockable_setting_t {

View File

@ -19,36 +19,7 @@
*/
#include <light/settings.hh>
glm::vec3 vec_from_mangle(const glm::vec3 &m)
{
const glm::vec3 tmp = m * static_cast<float>(Q_PI / 180.0f);
const glm::vec3 v(cos(tmp[0]) * cos(tmp[1]),
sin(tmp[0]) * cos(tmp[1]),
sin(tmp[1]));
return v;
}
glm::vec3 mangle_from_vec(const glm::vec3 &v)
{
const glm::vec3 up(0, 0, 1);
const glm::vec3 east(1, 0, 0);
const glm::vec3 north(0, 1, 0);
// get rotation about Z axis
float x = glm::dot(east, v);
float y = glm::dot(north, v);
float theta = atan2f(y, x);
// get angle away from Z axis
float cosangleFromUp = glm::dot(up, v);
cosangleFromUp = qmin(qmax(-1.0f, cosangleFromUp), 1.0f);
float radiansFromUp = acosf(cosangleFromUp);
const glm::vec3 mangle = glm::vec3(theta, -(radiansFromUp - Q_PI/2.0), 0) * static_cast<float>(180.0f / Q_PI);
return mangle;
}
#include <common/mathlib.hh>
/* detect colors with components in 0-1 and scale them to 0-255 */
void