diff --git a/openVulkanoCpp/Math/CameraIntrinsic.hpp b/openVulkanoCpp/Math/CameraIntrinsic.hpp index bda2036..04c8673 100644 --- a/openVulkanoCpp/Math/CameraIntrinsic.hpp +++ b/openVulkanoCpp/Math/CameraIntrinsic.hpp @@ -113,4 +113,45 @@ namespace openVulkanoCpp::Math return Scale(scale); } }; + + class CameraIntrinsicWithResolution : public CameraIntrinsic + { + Math::Vector2i resolution; + public: + CameraIntrinsicWithResolution(const CameraIntrinsic& intrinsic, const Math::Vector2i resolution) + : CameraIntrinsic(intrinsic), resolution(resolution) + {} + + CameraIntrinsicWithResolution(const Math::Matrix3f& camMat, const Math::Vector2i resolution) + : CameraIntrinsic(camMat), resolution(resolution) + {} + + CameraIntrinsicWithResolution(const Math::Matrix3f_SIMD& camMat, const Math::Vector2i resolution) + : CameraIntrinsic(camMat), resolution(resolution) + {} + + CameraIntrinsicWithResolution(Math::Vector2i resolution, float fx, float fy, float cx, float cy, float skew = 0) + : CameraIntrinsic(fx, fy, cx, cy, skew), resolution(resolution) + {} + + [[nodiscard]] float GetFovX() const + { + return CameraIntrinsic::GetFovX(static_cast(resolution.x)); + } + + [[nodiscard]] float GetFovY() const + { + return CameraIntrinsic::GetFovY(static_cast(resolution.y)); + } + + [[nodiscard]] Math::Vector2i GetResolution() const + { + return resolution; + } + + [[nodiscard]] CameraIntrinsicWithResolution GetForResolution(const Math::Vector2i newResolution) const + { + return { Scale(Math::Vector2f(newResolution) / Math::Vector2f(resolution)), resolution }; + } + }; }