Graphics/AbstractViewer: Add ProjectDepth method

This commit is contained in:
Lynix 2018-05-29 23:55:51 +02:00
parent e46aa6772e
commit db0e3267da
3 changed files with 12 additions and 0 deletions

View File

@ -105,6 +105,7 @@ Nazara Engine:
- Added LuaState::Traceback method - Added LuaState::Traceback method
- Added ModelLibrary, ModelManager and ModelSaver - Added ModelLibrary, ModelManager and ModelSaver
- Added AbstractViewer::Project and AbstractViewer::Unproject methods - Added AbstractViewer::Project and AbstractViewer::Unproject methods
- Added AbstractViewer::ProjectDepth method
Nazara Development Kit: Nazara Development Kit:
- Added ImageWidget (#139) - Added ImageWidget (#139)

View File

@ -41,6 +41,8 @@ namespace Nz
virtual float GetZNear() const = 0; virtual float GetZNear() const = 0;
Nz::Vector3f Project(const Nz::Vector3f& worldPosition) const; Nz::Vector3f Project(const Nz::Vector3f& worldPosition) const;
float ProjectDepth(float depth);
Nz::Vector3f Unproject(const Nz::Vector3f& screenPos) const; Nz::Vector3f Unproject(const Nz::Vector3f& screenPos) const;
AbstractViewer& operator=(const AbstractViewer&) = default; AbstractViewer& operator=(const AbstractViewer&) = default;

View File

@ -34,6 +34,15 @@ namespace Nz
return screenPosition; 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 Vector3f AbstractViewer::Unproject(const Nz::Vector3f& screenPos) const
{ {
Rectf viewport = Rectf(GetViewport()); Rectf viewport = Rectf(GetViewport());