1#ifndef SEAD_PROJECTION_H_
2#define SEAD_PROJECTION_H_
4#include <gfx/seadGraphics.h>
5#include <math/seadBoundBox.h>
6#include <math/seadMatrix.h>
7#include <math/seadVector.h>
8#include <prim/seadRuntimeTypeInfo.h>
81static_assert(
sizeof(
Projection) == 0x94,
"sead::Projection size mismatch");
93 void set(f32 _near, f32 _far, f32 fovy_rad, f32 aspect);
139 void setTBLR(f32 top, f32 bottom, f32 left, f32 right);
150 return mNear * 2 * mFovyTan;
155 return calcNearClipHeight_() * mAspect;
219 void setTBLR(f32 top, f32 bottom, f32 left, f32 right);
246static_assert(
sizeof(
OrthoProjection) == 0xAC,
"sead::OrthoProjection size mismatch");
299 void setTBLR(f32 top, f32 bottom, f32 left, f32 right);
329static_assert(
sizeof(
FrustumProjection) == 0xAC,
"sead::FrustumProjection size mismatch");
Definition seadCamera.h:16
Definition seadProjection.h:250
f32 mFar
Definition seadProjection.h:322
void setBottom(f32 bottom)
Definition seadProjection.h:281
FrustumProjection(f32 _near, f32 _far, const BoundBox2f &box)
void doScreenPosToCameraPosTo(Vector3f *dst, const Vector3f &screen_pos) const override
void doUpdateMatrix(Matrix44f *dst) const override
void setFovyAspectOffset(f32 fovy, f32 aspect, const Vector2f &offset)
FrustumProjection(f32 _near, f32 _far, f32 top, f32 bottom, f32 left, f32 right)
f32 getRight() const
Definition seadProjection.h:310
f32 mRight
Definition seadProjection.h:326
void setFar(f32 far)
Definition seadProjection.h:269
void createDividedProjection(FrustumProjection *dst, s32 partno_x, s32 partno_y, s32 divnum_x, s32 divnum_y) const
f32 mNear
Definition seadProjection.h:321
f32 mTop
Definition seadProjection.h:323
f32 getNear() const
Definition seadProjection.h:305
void setTop(f32 top)
Definition seadProjection.h:275
void setLeft(f32 left)
Definition seadProjection.h:287
void setTBLR(f32 top, f32 bottom, f32 left, f32 right)
f32 getFar() const
Definition seadProjection.h:306
f32 getLeft() const
Definition seadProjection.h:309
~FrustumProjection() override
void setBoundBox(const BoundBox2f &box)
void setNear(f32 near)
Definition seadProjection.h:263
f32 mBottom
Definition seadProjection.h:324
Type getProjectionType() const override
Definition seadProjection.h:259
void setRight(f32 right)
Definition seadProjection.h:293
f32 mLeft
Definition seadProjection.h:325
f32 getTop() const
Definition seadProjection.h:307
void getOffset(Vector2f *dst) const
f32 getBottom() const
Definition seadProjection.h:308
Definition seadGraphics.h:17
DevicePosture
Definition seadGraphics.h:20
Definition seadProjection.h:173
OrthoProjection(f32 _near, f32 _far, const Viewport &vp)
void setBoundBox(const BoundBox2f &box)
f32 mFar
Definition seadProjection.h:239
void doUpdateMatrix(Matrix44f *dst) const override
f32 getRight() const
Definition seadProjection.h:231
void setFar(f32 far)
Definition seadProjection.h:189
void setBottom(f32 bottom)
Definition seadProjection.h:201
f32 mBottom
Definition seadProjection.h:241
f32 getTop() const
Definition seadProjection.h:228
void setByViewport(const Viewport &vp)
void createDividedProjection(OrthoProjection *dst, s32 partno_x, s32 partno_y, s32 divnum_x, s32 divnum_y) const
OrthoProjection(f32 _near, f32 _far, f32 top, f32 bottom, f32 left, f32 right)
f32 mRight
Definition seadProjection.h:243
void doScreenPosToCameraPosTo(Vector3f *dst, const Vector3f &screen_pos) const override
void setLeft(f32 left)
Definition seadProjection.h:207
f32 mTop
Definition seadProjection.h:240
f32 getFar() const
Definition seadProjection.h:227
OrthoProjection(f32 _near, f32 _far, const BoundBox2f &box)
void setNear(f32 near)
Definition seadProjection.h:183
f32 getBottom() const
Definition seadProjection.h:229
void setRight(f32 right)
Definition seadProjection.h:213
f32 mLeft
Definition seadProjection.h:242
f32 mNear
Definition seadProjection.h:238
Type getProjectionType() const override
Definition seadProjection.h:233
f32 getNear() const
Definition seadProjection.h:226
void setTBLR(f32 top, f32 bottom, f32 left, f32 right)
f32 getLeft() const
Definition seadProjection.h:230
~OrthoProjection() override
void setTop(f32 top)
Definition seadProjection.h:195
Definition seadProjection.h:85
f32 calcNearClipWidth_() const
Definition seadProjection.h:153
f32 getNear() const
Definition seadProjection.h:128
void setFovy(f32 fovy)
Definition seadProjection.h:109
PerspectiveProjection(f32 near, f32 far, f32 fovy_rad, f32 aspect)
Definition seadProjection.cpp:111
void doScreenPosToCameraPosTo(Vector3f *dst, const Vector3f &screen_pos) const override
Definition seadProjection.cpp:210
void setFovy_(f32 fovy)
Definition seadProjection.cpp:126
void setFar(f32 far)
Definition seadProjection.h:101
void setOffset(const Vector2f &offset)
Definition seadProjection.h:120
f32 getFovy() const
Definition seadProjection.h:130
f32 getBottom() const
Definition seadProjection.cpp:145
f32 mFar
Definition seadProjection.h:160
f32 mFovyTan
Definition seadProjection.h:164
f32 mAspect
Definition seadProjection.h:165
~PerspectiveProjection() override
Definition seadProjection.cpp:122
const Vector2f & getOffset() const
Definition seadProjection.h:132
f32 getLeft() const
Definition seadProjection.cpp:152
f32 mAngle
Definition seadProjection.h:161
void setTBLR(f32 top, f32 bottom, f32 left, f32 right)
f32 getFar() const
Definition seadProjection.h:129
f32 mNear
Definition seadProjection.h:159
f32 getRight() const
Definition seadProjection.cpp:159
void doUpdateMatrix(Matrix44f *dst) const override
Definition seadProjection.cpp:166
f32 getTop() const
Definition seadProjection.cpp:138
void set(f32 _near, f32 _far, f32 fovy_rad, f32 aspect)
void setNear(f32 near)
Definition seadProjection.h:95
f32 mFovySin
Definition seadProjection.h:162
Type getProjectionType() const override
Definition seadProjection.h:141
f32 calcNearClipHeight_() const
Definition seadProjection.h:148
Vector2f mOffset
Definition seadProjection.h:166
f32 mFovyCos
Definition seadProjection.h:163
void createDividedProjection(PerspectiveProjection *dst, s32 partno_x, s32 partno_y, s32 divnum_x, s32 divnum_y) const
void setAspect(f32 aspect)
Definition seadProjection.h:114
f32 getAspect() const
Definition seadProjection.h:131
Definition seadProjection.h:19
const Matrix44f & getDeviceProjectionMatrix() const
Definition seadProjection.cpp:36
void unproject(Vector3f *dst, const Vector3f &screen_pos, const Camera &camera) const
bool mDeviceDirty
Definition seadProjection.h:73
f32 mDeviceZOffset
Definition seadProjection.h:78
void project(Vector2f *dst, const Vector3f &camera_pos, const Viewport &viewport) const
Matrix44f & getProjectionMatrixMutable()
virtual void doUpdateDeviceMatrix(Matrix44f *dst, const Matrix44f &src, Graphics::DevicePosture pose) const
Definition seadProjection.cpp:56
void setDevicePosture(Graphics::DevicePosture pose)
Definition seadProjection.h:44
void cameraPosToScreenPos(Vector3f *dst, const Vector3f &camera_pos) const
virtual Type getProjectionType() const =0
Matrix44f mMatrix
Definition seadProjection.h:74
Projection()
Definition seadProjection.cpp:5
Type
Definition seadProjection.h:24
@ cType_Undefined
Definition seadProjection.h:27
@ cType_Ortho
Definition seadProjection.h:26
@ cType_Perspective
Definition seadProjection.h:25
virtual ~Projection()
Definition seadProjection.cpp:16
bool mDirty
Definition seadProjection.h:72
virtual void doScreenPosToCameraPosTo(Vector3f *dst, const Vector3f &screen_pos) const =0
void setDirty()
Definition seadProjection.h:34
void setDeviceDirty()
Definition seadProjection.h:39
void screenPosToCameraPos(Vector3f *dst, const Vector3f &screen_pos) const
void updateMatrixImpl_() const
Definition seadProjection.cpp:20
Graphics::DevicePosture mDevicePosture
Definition seadProjection.h:76
const Matrix44f & getProjectionMatrix() const
Matrix44f mDeviceMatrix
Definition seadProjection.h:75
void unprojectRay(Ray< Vector3f > *dst, const Vector3f &screen_pos, const Camera &camera) const
f32 mDeviceZScale
Definition seadProjection.h:77
virtual void doUpdateMatrix(Matrix44f *dst) const =0
Definition seadCamera.h:13
Definition seadViewport.h:10
Definition seadAssert.h:44
Vector2< f32 > Vector2f
Definition seadVector.h:238
Matrix44< f32 > Matrix44f
Definition seadMatrix.h:343
Vector3< f32 > Vector3f
Definition seadVector.h:239
BoundBox2< f32 > BoundBox2f
Definition seadBoundBox.h:187
#define SEAD_RTTI_OVERRIDE(CLASS, BASE)
Definition seadRuntimeTypeInfo.h:96
#define SEAD_RTTI_BASE(CLASS)
Definition seadRuntimeTypeInfo.h:75