OdysseyDecomp/lib/al/Library/Projection/Projection.h

66 lines
1.7 KiB
C++

#pragma once
#include <gfx/seadProjection.h>
#include <math/seadMatrix.h>
namespace al {
class Projection {
public:
Projection();
Projection(const Projection& other);
Projection(f32 top, f32 bottom, f32 left, f32 right);
void init();
void calcMtx();
void copyFrom(const Projection&);
f32 getTop() const;
f32 getBottom() const;
f32 getLeft() const;
f32 getRight() const;
f32 getNear() const;
f32 getFar() const;
void setProjTBLRNF(f32 top, f32 bottom, f32 left, f32 right, f32 near, f32 far);
void setProj(f32 top, f32 bottom, f32 left, f32 right);
void setFovy(f32 fovy);
void setAspect(f32 aspect);
void setNear(f32 near);
void setFar(f32 far);
f32 calcNearClipHeight();
f32 calcNearClipWidth();
void setTop(f32 top);
void setBottom(f32 bottom);
void setLeft(f32 left);
void setRight(f32 right);
void setOffset(const sead::Vector2f& offset);
void merge(const Projection& proj1, const Projection& proj2);
f32 getAspect() const;
const sead::Vector2f& getOffset() const;
f32 getFovy() const;
const sead::Matrix44f& getProjMtx() const;
const sead::Matrix44f& getProjInvMtx() const;
const sead::Matrix44f& getMtxStd() const { return mStdMtx; }
const sead::Projection& getProjectionSead() const { return mBase; }
private:
sead::PerspectiveProjection mBase;
sead::Matrix44f _c0;
sead::Matrix44f mInvMtx;
sead::Matrix44f mStdMtx;
sead::Matrix44f _180;
f32 mLeft;
f32 mBottom;
f32 mNear;
f32 mRight;
f32 mTop;
f32 mFar;
f32 mFovy;
f32 mFocalLength;
f32 mAspect;
sead::Vector2f mOffset;
};
} // namespace al