summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2026-02-28 13:30:46 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2026-02-28 13:41:37 +0000
commit6b407b2778c69314ba034e9ea265697a51f331d4 (patch)
tree7ee7d605a5b6d526fa8edef7359f4601242c4989
parentAllow specifying all three partition functions independently (diff)
downloadilt-6b407b2778c69314ba034e9ea265697a51f331d4.tar.bz2
ilt-6b407b2778c69314ba034e9ea265697a51f331d4.tar.xz
ilt-6b407b2778c69314ba034e9ea265697a51f331d4.zip
Use RelativeDistance in Camera near/fear and expose member variables
-rw-r--r--gfx/camera.cpp9
-rw-r--r--gfx/camera.h24
-rw-r--r--test/test-render.cpp4
3 files changed, 27 insertions, 10 deletions
diff --git a/gfx/camera.cpp b/gfx/camera.cpp
index 3bb785d..db748e9 100644
--- a/gfx/camera.cpp
+++ b/gfx/camera.cpp
@@ -4,13 +4,13 @@
#include <maths.h>
#include <ray.h>
-Camera::Camera(GlobalPosition3D pos, Angle fov, Angle aspect, GlobalDistance near, GlobalDistance far) :
+Camera::Camera(GlobalPosition3D pos, Angle fov, Angle aspect, RelativeDistance near, RelativeDistance far) :
Camera {pos, fov, aspect, near, far, glm::lookAt({}, ::north, ::up),
glm::perspective(fov, aspect, static_cast<RelativeDistance>(near), static_cast<RelativeDistance>(far))}
{
}
-Camera::Camera(GlobalPosition3D pos, Angle fov, Angle aspect, GlobalDistance near, GlobalDistance far,
+Camera::Camera(GlobalPosition3D pos, Angle fov, Angle aspect, RelativeDistance near, RelativeDistance far,
const glm::mat4 & view, const glm::mat4 & projection) :
Frustum {pos, view, projection}, fov {fov}, aspect {aspect}, forward {::north}, up {::up}, near {near}, far {far}
{
@@ -58,9 +58,8 @@ Camera::extentsAtDist(const GlobalDistance dist) const
}
return {target, dist};
};
- const auto depth = -(2.F * (static_cast<float>(dist - near)) * static_cast<float>(far))
- / (static_cast<float>(dist) * (static_cast<float>(near - far)))
- - 1.F;
+ const auto depth
+ = -(2.F * (static_cast<float>(dist) - near) * far) / (static_cast<float>(dist) * (near - far)) - 1.F;
static constexpr const std::array extents {-1.F, 1.F};
static constexpr const auto cartesianExtents = extents * extents;
return cartesianExtents * [&depth, this, &clampToSeaFloor](const auto & extent) {
diff --git a/gfx/camera.h b/gfx/camera.h
index b17bcbb..b78827a 100644
--- a/gfx/camera.h
+++ b/gfx/camera.h
@@ -8,7 +8,7 @@
class Camera : public Frustum {
public:
- Camera(GlobalPosition3D position, Angle fov, Angle aspect, GlobalDistance near, GlobalDistance far);
+ Camera(GlobalPosition3D position, Angle fov, Angle aspect, RelativeDistance near, RelativeDistance far);
[[nodiscard]] Ray<GlobalPosition3D> unProject(const ScreenRelCoord &) const;
@@ -61,17 +61,35 @@ public:
return forward;
}
+ [[nodiscard]] auto
+ getNear() const
+ {
+ return near;
+ }
+
+ [[nodiscard]] auto
+ getFar() const
+ {
+ return far;
+ }
+
+ [[nodiscard]] auto
+ getDepth() const
+ {
+ return far - near;
+ }
+
[[nodiscard]] std::array<GlobalPosition4D, 4> extentsAtDist(GlobalDistance) const;
[[nodiscard]] static Direction3D upFromForward(const Direction3D & forward);
private:
- Camera(GlobalPosition3D position, Angle fov, Angle aspect, GlobalDistance near, GlobalDistance far,
+ Camera(GlobalPosition3D position, Angle fov, Angle aspect, RelativeDistance near, RelativeDistance far,
const glm::mat4 & view, const glm::mat4 & projection);
void updateView();
Angle fov, aspect;
Direction3D forward;
Direction3D up;
- GlobalDistance near, far;
+ RelativeDistance near, far;
};
diff --git a/test/test-render.cpp b/test/test-render.cpp
index da7d572..1a6e1ae 100644
--- a/test/test-render.cpp
+++ b/test/test-render.cpp
@@ -126,8 +126,8 @@ namespace {
BOOST_GLOBAL_FIXTURE(TestMainWindowAppBase);
BOOST_DATA_TEST_CASE(Cam,
- boost::unit_test::data::xrange(500, 30000, 1300) * boost::unit_test::data::xrange(500, 10000, 300)
- * boost::unit_test::data::xrange(50000, 500000, 70000),
+ boost::unit_test::data::xrange(500, 30000, 1300) * boost::unit_test::data::xrange(500.F, 10000.F, 300.F)
+ * boost::unit_test::data::xrange(50000.F, 500000.F, 70000.F),
dist, near, far)
{
static constexpr GlobalPosition4D POS {-10, -10, 60000, 0};