Change spherical camera: now X is right, Y is forward, Z is up

This commit is contained in:
Nikita Lisitsa 2020-08-31 09:47:30 +03:00
parent 695da47ade
commit cf6a8e98eb
2 changed files with 10 additions and 4 deletions

View file

@ -65,8 +65,10 @@ namespace psemek::geom
struct spherical_camera
: perspective_camera
{
// assumes up is +Y
//
// assumes up is +Z
// azimuthal angle is in XY plane
// both angles zero gives X right, Y forward, and Z up
float azimuthal_angle;
float elevation_angle;
float distance;

View file

@ -4,6 +4,8 @@
#include <psemek/geom/perspective.hpp>
#include <psemek/geom/translation.hpp>
#include <psemek/geom/rotation.hpp>
#include <psemek/geom/permutation.hpp>
#include <psemek/geom/scale.hpp>
#include <psemek/geom/homogeneous.hpp>
#include <cmath>
@ -98,8 +100,10 @@ namespace psemek::geom
{
return
translation<float, 3>({0.f, 0.f, -distance}).homogeneous_matrix()
* homogeneous(plane_rotation<float, 3>(1, 2, elevation_angle).matrix())
* homogeneous(plane_rotation<float, 3>(2, 0, azimuthal_angle).matrix())
* homogeneous(swap<float, 3>(1, 2).matrix())
* homogeneous(scale<float, 3>({1.f, -1.f, 1.f}).matrix())
* homogeneous(plane_rotation<float, 3>(2, 1, elevation_angle).matrix())
* homogeneous(plane_rotation<float, 3>(1, 0, azimuthal_angle).matrix())
* translation<float, 3>({ -target[0], -target[1], -target[2] }).homogeneous_matrix()
;
}