common: move vec_from_mangle and mangle_from_vec to mathlib
This commit is contained in:
parent
881f12da52
commit
7887318def
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue