From db0e3267dad0d3b144b6e16e93110a964bfee7ff Mon Sep 17 00:00:00 2001 From: Lynix Date: Tue, 29 May 2018 23:55:51 +0200 Subject: [PATCH] Graphics/AbstractViewer: Add ProjectDepth method --- ChangeLog.md | 1 + include/Nazara/Graphics/AbstractViewer.hpp | 2 ++ src/Nazara/Graphics/AbstractViewer.cpp | 9 +++++++++ 3 files changed, 12 insertions(+) diff --git a/ChangeLog.md b/ChangeLog.md index 98b92b55b..46704fd5d 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -105,6 +105,7 @@ Nazara Engine: - Added LuaState::Traceback method - Added ModelLibrary, ModelManager and ModelSaver - Added AbstractViewer::Project and AbstractViewer::Unproject methods +- Added AbstractViewer::ProjectDepth method Nazara Development Kit: - Added ImageWidget (#139) diff --git a/include/Nazara/Graphics/AbstractViewer.hpp b/include/Nazara/Graphics/AbstractViewer.hpp index c682deeb2..36547b1ec 100644 --- a/include/Nazara/Graphics/AbstractViewer.hpp +++ b/include/Nazara/Graphics/AbstractViewer.hpp @@ -41,6 +41,8 @@ namespace Nz virtual float GetZNear() const = 0; Nz::Vector3f Project(const Nz::Vector3f& worldPosition) const; + float ProjectDepth(float depth); + Nz::Vector3f Unproject(const Nz::Vector3f& screenPos) const; AbstractViewer& operator=(const AbstractViewer&) = default; diff --git a/src/Nazara/Graphics/AbstractViewer.cpp b/src/Nazara/Graphics/AbstractViewer.cpp index 2e5eb6b47..e9d91c92c 100644 --- a/src/Nazara/Graphics/AbstractViewer.cpp +++ b/src/Nazara/Graphics/AbstractViewer.cpp @@ -34,6 +34,15 @@ namespace Nz return screenPosition; } + float AbstractViewer::ProjectDepth(float depth) + { + const Matrix4f& projectionMatrix = GetProjectionMatrix(); + float a = projectionMatrix(2, 2); + float b = projectionMatrix(2, 3); + + return (0.5f * (-a * depth + b) / depth + 0.5f); + } + Vector3f AbstractViewer::Unproject(const Nz::Vector3f& screenPos) const { Rectf viewport = Rectf(GetViewport());