init commit

This commit is contained in:
2025-06-11 22:45:11 +08:00
commit 71307f3e53
115 changed files with 13922 additions and 0 deletions
+79
View File
@@ -0,0 +1,79 @@
#include <math/dvc_math_util.h>
#include <math/dvc_matrix4.h>
#include <math/dvc_vector3.h>
#include <math/dvc_vector4.h>
#include <gtest/gtest.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include "dvt_unit_common.h"
using namespace davinci;
//-------------------------------------------------------------------------------------
TEST(MathUtil, Basic)
{
//lookat view matrix
{
float dEye[3] = { 0.0f, 4.0f, -10.0f };
float dAt[3] = { 0.0f, 1.0f, 0.0f };
float dUp[3] = { 0.0f, 1.0f, 0.0f };
fMatrix4 m1 = MathUtil::lookatRH(
fVector3(THREE_ELEMENT(dEye)),
fVector3(THREE_ELEMENT(dAt)),
fVector3(THREE_ELEMENT(dUp)));
glm::mat4 gm1 = glm::lookAtRH(glm::vec3(THREE_ELEMENT(dEye)), glm::vec3(THREE_ELEMENT(dAt)), glm::vec3(THREE_ELEMENT(dUp)));
EXPECT_EQ_4X4_T(m1, gm1);
}
//lookat view matrix(random)
{
for (int i = 0; i < 10; i++) {
fVector3 dEye, dAt, dUp;
do {
dEye[0] = _randomFloat(); dEye[1] = _randomFloat(); dEye[2] = _randomFloat();
dAt[0] = _randomFloat(); dAt[1] = _randomFloat(); dAt[2] = _randomFloat();
dUp[0] = _randomFloat(); dUp[1] = _randomFloat(); dUp[2] = _randomFloat();
} while ((dEye == dAt) || (dUp == fVector3::ZERO));
fMatrix4 m1 = MathUtil::lookatRH(
fVector3(THREE_ELEMENT(dEye)),
fVector3(THREE_ELEMENT(dAt)),
fVector3(THREE_ELEMENT(dUp)));
glm::mat4 gm1 = glm::lookAtRH(glm::vec3(THREE_ELEMENT(dEye)), glm::vec3(THREE_ELEMENT(dAt)), glm::vec3(THREE_ELEMENT(dUp)));
EXPECT_EQ_4X4_T_APPROX(m1, gm1, std::numeric_limits<float>::epsilon() * 1000);
}
}
//perspective
{
float width = 640.f, height = 480.f;
fMatrix4 m1 = MathUtil::perspectiveFovRH(MathUtil::PI_DIV4, width / height, 0.01f, 100.f);
glm::mat4 gm1 = glm::perspectiveRH(MathUtil::PI_DIV4, width / height, 0.01f, 100.f);
EXPECT_EQ_4X4_T_APPROX(m1, gm1, std::numeric_limits<float>::epsilon());
}
//perspective(random)
{
for (int i = 0; i < 10; i++) {
float fov = MathUtil::rangeRandom(0.1f, MathUtil::PI);
float aspect = MathUtil::rangeRandom(0.1f, 100.f);
float zNear = MathUtil::rangeRandom(0.00001f, 0.01f);
float zFar = MathUtil::rangeRandom(100.f, 10000.f);
fMatrix4 m1 = MathUtil::perspectiveFovRH(fov, aspect, zNear, zFar);
glm::mat4 gm1 = glm::perspectiveRH(fov, aspect, zNear, zFar);
EXPECT_EQ_4X4_T_APPROX(m1, gm1, std::numeric_limits<float>::epsilon() * 100);
}
}
}