sead
Loading...
Searching...
No Matches
seadCamera.h
Go to the documentation of this file.
1#ifndef SEAD_CAMERA_H_
2#define SEAD_CAMERA_H_
3
4#include <math/seadMatrix.h>
5#include <prim/seadRuntimeTypeInfo.h>
6
7namespace sead {
8
9class Projection;
10class Viewport;
11
12template <typename T>
13class Ray;
14
15class Camera
16{
18
19public:
22 {
23 }
24
25 virtual ~Camera()
26 {
27 }
28
29 virtual void doUpdateMatrix(Matrix34f* dst) const = 0;
30
32 const Matrix34f& getViewMatrix() const { return mMatrix; }
33
38
39 void getWorldPosByMatrix(Vector3f* dst) const;
42 void getUpVectorByMatrix(Vector3f* dst) const;
43
44 void worldPosToCameraPosByMatrix(Vector3f* dst, const Vector3f& world_pos) const;
45 void cameraPosToWorldPosByMatrix(Vector3f* dst, const Vector3f& camera_pos) const;
46
47 void projectByMatrix(Vector2f* dst, const Vector3f& world_pos, const Projection& projection, const Viewport& viewport) const;
48 void unprojectRayByMatrix(Ray<Vector3f>* dst, const Vector3f& camera_pos) const;
49
50protected:
52};
53#ifdef cafe
54static_assert(sizeof(Camera) == 0x34, "sead::Camera size mismatch");
55#endif // cafe
56
57class LookAtCamera : public Camera
58{
60
61public:
63 : Camera()
64 , mPos(0.0f, 0.0f, 10.0f)
65 , mAt(0.0f, 0.0f, 0.0f)
66 , mUp(0.0f, 1.0f, 0.0f)
67 {
68 }
69
70 LookAtCamera(const Vector3f& pos, const Vector3f& at, const Vector3f& up);
71 ~LookAtCamera() override;
72
73 void doUpdateMatrix(Matrix34f* dst) const override;
74
75 Vector3f& getPos() { return mPos; }
76 const Vector3f& getPos() const { return mPos; }
77
78 Vector3f& getAt() { return mAt; }
79 const Vector3f& getAt() const { return mAt; }
80
81 Vector3f& getUp() { return mUp; }
82 const Vector3f& getUp() const { return mUp; }
83
84private:
88};
89#ifdef cafe
90static_assert(sizeof(LookAtCamera) == 0x58, "sead::LookAtCamera size mismatch");
91#endif // cafe
92
93class OrthoProjection;
94
96{
97public:
99 OrthoCamera(const Vector2f& center, f32 distance);
101 ~OrthoCamera() override;
102
104
105 void setRotation(f32 rad);
106};
107
108class DirectCamera : public Camera
109{
111
112public:
114 : Camera()
116 {
117 }
118
119 void setMatrix(const Matrix34f& mtx)
120 {
121 mDirectMatrix = mtx;
123 }
124
125 void doUpdateMatrix(Matrix34f* dst) const override
126 {
127 *dst = mDirectMatrix;
128 }
129
130private:
132};
133#ifdef cafe
134static_assert(sizeof(DirectCamera) == 0x64, "sead::DirectCamera size mismatch");
135#endif // cafe
136
137} // namespace sead
138
139#endif // SEAD_CAMERA_H_
Definition seadCamera.h:16
virtual void doUpdateMatrix(Matrix34f *dst) const =0
void updateViewMatrix()
Definition seadCamera.h:34
void getWorldPosByMatrix(Vector3f *dst) const
Definition seadCamera.cpp:6
void getLookVectorByMatrix(Vector3f *dst) const
Camera()
Definition seadCamera.h:20
virtual ~Camera()
Definition seadCamera.h:25
void getUpVectorByMatrix(Vector3f *dst) const
const Matrix34f & getViewMatrix() const
Definition seadCamera.h:32
Matrix34f mMatrix
Definition seadCamera.h:51
Matrix34f & getViewMatrix()
Definition seadCamera.h:31
void cameraPosToWorldPosByMatrix(Vector3f *dst, const Vector3f &camera_pos) const
void worldPosToCameraPosByMatrix(Vector3f *dst, const Vector3f &world_pos) const
void getRightVectorByMatrix(Vector3f *dst) const
void projectByMatrix(Vector2f *dst, const Vector3f &world_pos, const Projection &projection, const Viewport &viewport) const
void unprojectRayByMatrix(Ray< Vector3f > *dst, const Vector3f &camera_pos) const
Definition seadCamera.h:109
void doUpdateMatrix(Matrix34f *dst) const override
Definition seadCamera.h:125
Matrix34f mDirectMatrix
Definition seadCamera.h:131
void setMatrix(const Matrix34f &mtx)
Definition seadCamera.h:119
DirectCamera()
Definition seadCamera.h:113
Definition seadCamera.h:58
const Vector3f & getPos() const
Definition seadCamera.h:76
Vector3f & getPos()
Definition seadCamera.h:75
Vector3f & getAt()
Definition seadCamera.h:78
LookAtCamera()
Definition seadCamera.h:62
Vector3f mAt
Definition seadCamera.h:86
const Vector3f & getUp() const
Definition seadCamera.h:82
Vector3f mUp
Definition seadCamera.h:87
const Vector3f & getAt() const
Definition seadCamera.h:79
~LookAtCamera() override
Definition seadCamera.cpp:26
Vector3f & getUp()
Definition seadCamera.h:81
Vector3f mPos
Definition seadCamera.h:85
LookAtCamera(const Vector3f &pos, const Vector3f &at, const Vector3f &up)
Definition seadCamera.cpp:17
void doUpdateMatrix(Matrix34f *dst) const override
Definition seadCamera.cpp:30
Definition seadCamera.h:96
OrthoCamera(const Vector2f &center, f32 distance)
OrthoCamera(const OrthoProjection &proj)
~OrthoCamera() override
void setRotation(f32 rad)
void setByOrthoProjection(const OrthoProjection &proj)
Definition seadProjection.h:173
Definition seadProjection.h:19
Definition seadCamera.h:13
Definition seadViewport.h:10
Definition seadAssert.h:44
Vector2< f32 > Vector2f
Definition seadVector.h:238
Vector3< f32 > Vector3f
Definition seadVector.h:239
Matrix34< f32 > Matrix34f
Definition seadMatrix.h:342
#define SEAD_RTTI_OVERRIDE(CLASS, BASE)
Definition seadRuntimeTypeInfo.h:96
#define SEAD_RTTI_BASE(CLASS)
Definition seadRuntimeTypeInfo.h:75