6#include <Eigen/Geometry>
12 return M.inverse().linear().transpose();
27 Eigen::Isometry3f
pose()
const {
return view.inverse(); }
48 auto up() {
return view.linear().row(1); }
61 const Float3 &up = Float3::UnitZ());
66 float near,
float far);
89 float near,
float far);
92 return (proj(2, 2) + 1.0f) / proj(2, 2);
96 return (proj(2, 3) - 1.0f) / proj(2, 2);
100 return proj(2, 3) / (proj(2, 2) - 1.f);
104 return std::abs(proj(2, 3) / (proj(2, 2) + 1.f));
110 auto invProj = camProj.inverse();
112 for (Uint8 i = 0; i < 8; i++) {
114 Uint8 k = (i >> 1) & 1;
115 Uint8 l = (i >> 2) & 1;
120 Float4 ndc{2.f * j - 1.f, 2.f * k - 1.f, 2.f * l - 1.f, 1.f};
121 Float4 viewSpace = invProj * ndc;
122 out[i] = viewSpace.head<3>() / viewSpace.w();
132inline std::pair<Float3, float>
134 Float3 frustumCenter = Float3::Zero();
135 for (
auto &c : worldSpaceCorners) {
138 frustumCenter /= 8.f;
141 for (
auto &c : worldSpaceCorners) {
142 radius = std::max(radius, (c - frustumCenter).norm());
144 return {frustumCenter, radius};
Rad< float > Radf
Definition math_types.h:125
Mat3f computeNormalMatrix(const Eigen::Affine3f &M)
Definition Camera.h:11
Eigen::Vector3f Float3
Definition math_types.h:8
Mat4f orthographicMatrix(const Float2 &sizes, float nearZ, float farZ)
Compute a centered orthographic projection matrix.
float orthoProjFar(const Mat4f &proj)
Definition Camera.h:95
float perspectiveProjNear(const Mat4f &proj)
Definition Camera.h:99
FrustumCornersType frustumFromCameraProjection(const Mat4f &camProj)
Extract the array of frustum corners, given a camera projection matrix.
Definition Camera.h:109
Mat4f perspectiveFromFov(Radf fovY, float aspectRatio, float nearZ, float farZ)
Get perspective projection matrix given fov, aspect ratio, and clipping planes.
Eigen::Matrix3f Mat3f
Definition math_types.h:10
CameraProjection
Definition Camera.h:16
@ ORTHOGRAPHIC
Definition Camera.h:16
@ PERSPECTIVE
Definition Camera.h:16
float orthoProjNear(const Mat4f &proj)
Definition Camera.h:91
float perspectiveProjFar(const Mat4f &proj)
Definition Camera.h:103
FrustumCornersType frustumFromCamera(const Camera &camera)
Get the corners of a Camera's view frustum, in world space.
Definition Camera.h:128
Mat4f lookAt(const Float3 &eye, const Float3 ¢er, const Float3 &up=Float3::UnitZ())
Eigen::Vector4f Float4
Definition math_types.h:9
std::pair< Float3, float > frustumBoundingSphereCenterRadius(const FrustumCornersType &worldSpaceCorners)
Definition Camera.h:133
std::array< Float3, 8ul > FrustumCornersType
Definition math_types.h:15
Eigen::Vector2f Float2
Definition math_types.h:7
Eigen::Matrix4f Mat4f
Definition math_types.h:11
Mat4f perspectiveMatrix(float left, float right, float bottom, float top, float near, float far)
Compute perspective projection matrix, from clipping plane parameters (left, right,...
The main way of using a camera to render things.
Definition Camera.h:19
Float3 right() const
Definition Camera.h:45
auto right()
Definition Camera.h:46
Float3 up() const
Definition Camera.h:47
Float3 position() const
Definition Camera.h:28
Mat4f projection
Projection matrix .
Definition Camera.h:21
Eigen::Isometry3f pose() const
Definition Camera.h:27
Float3 transformPoint(const Float3 &p) const
Transform a point to view-space. This applies the view matrix as a 3D transform.
Definition Camera.h:39
auto up()
Definition Camera.h:48
auto viewProj() const
View-projection matrix .
Definition Camera.h:31
Float3 transformVector(const Float3 &v) const
Transform a vector to view-space. This applies the view matrix linear part.
Definition Camera.h:35
Float3 forward() const
Definition Camera.h:49
Eigen::Isometry3f view
Camera view matrix
Definition Camera.h:23