mirror of
https://github.com/enduro2d/enduro2d.git
synced 2025-12-14 08:07:17 +07:00
math::project with inverted projection instead original projection
This commit is contained in:
@@ -36,10 +36,14 @@ TEST_CASE("mat4") {
|
||||
REQUIRE(math::make_rotation_matrix4(make_rad(1.f),v3f(1.f,1.f,1.f)) == math::make_rotation_matrix4(make_rad(1.f), v3f::unit()));
|
||||
|
||||
REQUIRE(math::make_orthographic_lh_matrix4(640.f, 480.f, 0.f, 1.f) == math::make_orthographic_lh_matrix4(v2f(640,480), 0.f, 1.f));
|
||||
REQUIRE(math::make_orthographic_lh_matrix4(-320.f, 320.f, -240.f, 240.f, 0.f, 1.f) == math::make_orthographic_lh_matrix4(-v2f(320,240), v2f(320,240), 0.f, 1.f));
|
||||
REQUIRE(math::make_orthographic_lh_matrix4(640.0, 480.0, 0.0, 1.0) == math::make_orthographic_lh_matrix4(v2d(640,480), 0.0, 1.0));
|
||||
REQUIRE(math::make_orthographic_lh_matrix4(-320.0, 320.0, -240.0, 240.0, 0.0, 1.0) == math::make_orthographic_lh_matrix4(-v2d(320,240), v2d(320,240), 0.0, 1.0));
|
||||
|
||||
REQUIRE(math::make_orthographic_lh_matrix4(640.f, 480.f, 0.f, 1.f) == math::make_orthographic_lh_matrix4(v2f(640,480), 0.f, 1.f));
|
||||
REQUIRE(math::make_orthographic_lh_matrix4(640.0, 480.0, 0.0, 1.0) == math::make_orthographic_lh_matrix4(v2d(640,480), 0.0, 1.0));
|
||||
REQUIRE(math::make_orthographic_rh_matrix4(640.f, 480.f, 0.f, 1.f) == math::make_orthographic_rh_matrix4(v2f(640,480), 0.f, 1.f));
|
||||
REQUIRE(math::make_orthographic_rh_matrix4(-320.f, 320.f, -240.f, 240.f, 0.f, 1.f) == math::make_orthographic_rh_matrix4(-v2f(320,240), v2f(320,240), 0.f, 1.f));
|
||||
REQUIRE(math::make_orthographic_rh_matrix4(640.0, 480.0, 0.0, 1.0) == math::make_orthographic_rh_matrix4(v2d(640,480), 0.0, 1.0));
|
||||
REQUIRE(math::make_orthographic_rh_matrix4(-320.0, 320.0, -240.0, 240.0, 0.0, 1.0) == math::make_orthographic_rh_matrix4(-v2d(320,240), v2d(320,240), 0.0, 1.0));
|
||||
}
|
||||
{
|
||||
REQUIRE(m4f(m4f::identity()) == m4f::identity());
|
||||
@@ -168,62 +172,57 @@ TEST_CASE("mat4") {
|
||||
}
|
||||
{
|
||||
m4f projection = math::make_perspective_lh_matrix4(make_deg(80.f), 4.f / 3.f, 0.01f, 1.f);
|
||||
const m4f inv_projection = math::inversed(projection).first;
|
||||
b2f viewport = make_rect(800.f, 600.f);
|
||||
|
||||
const v3f p1 = v3f(0.f,0.f,0.01f);
|
||||
const v3f p2 = v3f(+1.f,0.f,0.01f);
|
||||
const v3f p3 = v3f(-1.f,0.f,0.01f);
|
||||
|
||||
REQUIRE(math::project(p1, m4f::identity(), projection, viewport).second);
|
||||
REQUIRE(math::project(p2, m4f::identity(), projection, viewport).second);
|
||||
REQUIRE(math::project(p3, m4f::identity(), projection, viewport).second);
|
||||
REQUIRE(math::project(p1, projection, viewport).second);
|
||||
REQUIRE(math::project(p2, projection, viewport).second);
|
||||
REQUIRE(math::project(p3, projection, viewport).second);
|
||||
|
||||
REQUIRE(math::impl::project_zo(p1, m4f::identity(), projection, viewport).second);
|
||||
REQUIRE(math::impl::project_zo(p2, m4f::identity(), projection, viewport).second);
|
||||
REQUIRE(math::impl::project_zo(p3, m4f::identity(), projection, viewport).second);
|
||||
REQUIRE(math::impl::project_zo(p1, projection, viewport).second);
|
||||
REQUIRE(math::impl::project_zo(p2, projection, viewport).second);
|
||||
REQUIRE(math::impl::project_zo(p3, projection, viewport).second);
|
||||
|
||||
REQUIRE(math::impl::project_no(p1, m4f::identity(), projection, viewport).second);
|
||||
REQUIRE(math::impl::project_no(p2, m4f::identity(), projection, viewport).second);
|
||||
REQUIRE(math::impl::project_no(p3, m4f::identity(), projection, viewport).second);
|
||||
REQUIRE(math::impl::project_no(p1, projection, viewport).second);
|
||||
REQUIRE(math::impl::project_no(p2, projection, viewport).second);
|
||||
REQUIRE(math::impl::project_no(p3, projection, viewport).second);
|
||||
|
||||
REQUIRE(math::unproject(
|
||||
math::project(p1, m4f::identity(), projection, viewport).first,
|
||||
m4f::identity(),
|
||||
projection,
|
||||
math::project(p1, projection, viewport).first,
|
||||
inv_projection,
|
||||
viewport).second);
|
||||
|
||||
REQUIRE(math::unproject(
|
||||
math::project(p2, m4f::identity(), projection, viewport).first,
|
||||
m4f::identity(),
|
||||
projection,
|
||||
math::project(p2, projection, viewport).first,
|
||||
inv_projection,
|
||||
viewport).second);
|
||||
|
||||
REQUIRE(math::unproject(
|
||||
math::project(p3, m4f::identity(), projection, viewport).first,
|
||||
m4f::identity(),
|
||||
projection,
|
||||
math::project(p3, projection, viewport).first,
|
||||
inv_projection,
|
||||
viewport).second);
|
||||
|
||||
REQUIRE(math::unproject(
|
||||
math::project(p1, m4f::identity(), projection, viewport).first,
|
||||
m4f::identity(),
|
||||
projection,
|
||||
math::project(p1, projection, viewport).first,
|
||||
inv_projection,
|
||||
viewport).first == v3f(p1));
|
||||
|
||||
REQUIRE(math::unproject(
|
||||
math::project(p2, m4f::identity(), projection, viewport).first,
|
||||
m4f::identity(),
|
||||
projection,
|
||||
math::project(p2, projection, viewport).first,
|
||||
inv_projection,
|
||||
viewport).first == v3f(p2));
|
||||
|
||||
REQUIRE(math::unproject(
|
||||
math::project(p3, m4f::identity(), projection, viewport).first,
|
||||
m4f::identity(),
|
||||
projection,
|
||||
math::project(p3, projection, viewport).first,
|
||||
inv_projection,
|
||||
viewport).first == v3f(p3));
|
||||
}
|
||||
{
|
||||
m4f projection = math::make_orthographic_lh_matrix4({400.f, 300.f}, 0.f, 1.f);
|
||||
m4f projection = math::make_orthographic_lh_matrix4(-200.f, 200.f, -300.f, 300.f, 0.f, 1.f);
|
||||
m4f model = math::make_scale_matrix4(2.f, 2.f);
|
||||
b2f viewport = make_rect(800.f, 600.f);
|
||||
|
||||
@@ -231,93 +230,90 @@ TEST_CASE("mat4") {
|
||||
const v3f p2 = v3f(+1.f,0.f,0.f);
|
||||
const v3f p3 = v3f(-1.f,0.f,0.f);
|
||||
|
||||
REQUIRE(math::project(p1, model, projection, viewport).second);
|
||||
REQUIRE(math::project(p2, model, projection, viewport).second);
|
||||
REQUIRE(math::project(p3, model, projection, viewport).second);
|
||||
REQUIRE(math::project(p1, model * projection, viewport).second);
|
||||
REQUIRE(math::project(p2, model * projection, viewport).second);
|
||||
REQUIRE(math::project(p3, model * projection, viewport).second);
|
||||
|
||||
m4f projection_zo = math::impl::make_orthographic_lh_zo_matrix4(400.f, 300.f, 0.f, 1.f);
|
||||
REQUIRE(math::impl::project_zo(p1, model, projection_zo, viewport).second);
|
||||
REQUIRE(math::impl::project_zo(p2, model, projection_zo, viewport).second);
|
||||
REQUIRE(math::impl::project_zo(p3, model, projection_zo, viewport).second);
|
||||
m4f projection_zo = math::impl::make_orthographic_lh_zo_matrix4(-200.f, 200.f, -150.f, 150.f, 0.f, 1.f);
|
||||
REQUIRE(math::impl::project_zo(p1, model * projection_zo, viewport).second);
|
||||
REQUIRE(math::impl::project_zo(p2, model * projection_zo, viewport).second);
|
||||
REQUIRE(math::impl::project_zo(p3, model * projection_zo, viewport).second);
|
||||
|
||||
m4f projection_no = math::impl::make_orthographic_lh_no_matrix4(400.f, 300.f, 0.f, 1.f);
|
||||
REQUIRE(math::impl::project_no(p1, model, projection_no, viewport).second);
|
||||
REQUIRE(math::impl::project_no(p2, model, projection_no, viewport).second);
|
||||
REQUIRE(math::impl::project_no(p3, model, projection_no, viewport).second);
|
||||
m4f projection_no = math::impl::make_orthographic_lh_no_matrix4(-200.f, 200.f, -150.f, 150.f, 0.f, 1.f);
|
||||
REQUIRE(math::impl::project_no(p1, model * projection_no, viewport).second);
|
||||
REQUIRE(math::impl::project_no(p2, model * projection_no, viewport).second);
|
||||
REQUIRE(math::impl::project_no(p3, model * projection_no, viewport).second);
|
||||
|
||||
REQUIRE(math::approximately(
|
||||
math::project(p1, model, projection, viewport).first,
|
||||
math::project(p1, model * projection, viewport).first,
|
||||
v3f(400.f, 300.f, 0.f),
|
||||
0.01f));
|
||||
REQUIRE(math::approximately(
|
||||
math::project(p2, model, projection, viewport).first,
|
||||
math::project(p2, model * projection, viewport).first,
|
||||
v3f(404.f, 300.f, 0.f),
|
||||
0.01f));
|
||||
REQUIRE(math::approximately(
|
||||
math::project(p3, model, projection, viewport).first,
|
||||
math::project(p3, model * projection, viewport).first,
|
||||
v3f(396.f, 300.f, 0.f),
|
||||
0.01f));
|
||||
|
||||
REQUIRE(math::approximately(
|
||||
math::impl::project_zo(p1, model, projection_zo, viewport).first,
|
||||
math::impl::project_zo(p1, model * projection_zo, viewport).first,
|
||||
v3f(400.f, 300.f, 0.f),
|
||||
0.01f));
|
||||
REQUIRE(math::approximately(
|
||||
math::impl::project_zo(p2, model, projection_zo, viewport).first,
|
||||
math::impl::project_zo(p2, model * projection_zo, viewport).first,
|
||||
v3f(404.f, 300.f, 0.f),
|
||||
0.01f));
|
||||
REQUIRE(math::approximately(
|
||||
math::impl::project_zo(p3, model, projection_zo, viewport).first,
|
||||
math::impl::project_zo(p3, model * projection_zo, viewport).first,
|
||||
v3f(396.f, 300.f, 0.f),
|
||||
0.01f));
|
||||
|
||||
REQUIRE(math::approximately(
|
||||
math::impl::project_no(p1, model, projection_no, viewport).first,
|
||||
math::impl::project_no(p1, model * projection_no, viewport).first,
|
||||
v3f(400.f, 300.f, 0.f),
|
||||
0.01f));
|
||||
REQUIRE(math::approximately(
|
||||
math::impl::project_no(p2, model, projection_no, viewport).first,
|
||||
math::impl::project_no(p2, model * projection_no, viewport).first,
|
||||
v3f(404.f, 300.f, 0.f),
|
||||
0.01f));
|
||||
REQUIRE(math::approximately(
|
||||
math::impl::project_no(p3, model, projection_no, viewport).first,
|
||||
math::impl::project_no(p3, model * projection_no, viewport).first,
|
||||
v3f(396.f, 300.f, 0.f),
|
||||
0.01f));
|
||||
|
||||
const m4f inv_project = math::inversed(model * projection).first;
|
||||
REQUIRE(math::inversed(model * projection).second);
|
||||
|
||||
REQUIRE(math::unproject(
|
||||
math::project(p1, model, projection, viewport).first,
|
||||
model,
|
||||
projection,
|
||||
math::project(p1, inv_project, viewport).first,
|
||||
model * projection,
|
||||
viewport).second);
|
||||
|
||||
REQUIRE(math::unproject(
|
||||
math::project(p2, model, projection, viewport).first,
|
||||
model,
|
||||
projection,
|
||||
math::project(p2, inv_project, viewport).first,
|
||||
model * projection,
|
||||
viewport).second);
|
||||
|
||||
REQUIRE(math::unproject(
|
||||
math::project(p3, model, projection, viewport).first,
|
||||
model,
|
||||
projection,
|
||||
math::project(p3, inv_project, viewport).first,
|
||||
model * projection,
|
||||
viewport).second);
|
||||
|
||||
REQUIRE(math::unproject(
|
||||
math::project(p1, model, projection, viewport).first,
|
||||
model,
|
||||
projection,
|
||||
math::project(p1, inv_project, viewport).first,
|
||||
model * projection,
|
||||
viewport).first == v3f(p1));
|
||||
|
||||
REQUIRE(math::unproject(
|
||||
math::project(p2, model, projection, viewport).first,
|
||||
model,
|
||||
projection,
|
||||
math::project(p2, inv_project, viewport).first,
|
||||
model * projection,
|
||||
viewport).first == v3f(p2));
|
||||
|
||||
REQUIRE(math::unproject(
|
||||
math::project(p3, model, projection, viewport).first,
|
||||
model,
|
||||
projection,
|
||||
math::project(p3, inv_project, viewport).first,
|
||||
model * projection,
|
||||
viewport).first == v3f(p3));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user