game2006/server/gameserver/glmhelper.cc
aozhiwei 1a1293b8b7 1
2022-12-20 17:32:25 +08:00

59 lines
1.3 KiB
C++

#include "precompile.h"
#include <math.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include "glmhelper.h"
const glm::vec3 GlmHelper::ZERO = glm::vec3(0.0f, 0.0f, 0.0f);
const glm::vec3 GlmHelper::RIGHT = glm::vec3(1.0f, 0.0f, 0.0f);
const glm::vec3 GlmHelper::UP = glm::vec3(0.0f, 0.0f, 1.0f);
const glm::vec3 GlmHelper::DONW = glm::vec3(0.0f, 0.0f, 1.0f);
void GlmHelper::RotateY(glm::vec3& v, float angle)
{
auto transform =
glm::rotate(
glm::mat4(1.0),
angle,
//glm::radians(angle),
glm::vec3(0.0f, 1.0f, 0.0f)
);
glm::vec4 v1 = transform * glm::vec4(v.x, v.y, v.z, 0.0f);
v.x = v1.x;
v.y = v1.y;
v.z = v1.z;
}
void GlmHelper::Normalize(glm::vec3& v)
{
v = glm::normalize(v);
if (isnan(v.x)) {
abort();
}
if (isnan(v.y)) {
abort();
}
if (isnan(v.z)) {
abort();
}
}
float GlmHelper::Norm(const glm::vec3& v)
{
return glm::length(v);
}
bool GlmHelper::IsZero(const glm::vec3& v)
{
return fabs(v.x) < 0.00001f && fabs(v.y) < 0.00001f && fabs(v.z) < 0.00001f;
}
float GlmHelper::CalcAngle(const glm::vec3& v1, const glm::vec3& v2)
{
float angle = acos(glm::dot(v1, v2) / Norm(v1) / Norm(v2));
return angle / 3.1415926f;
}