97 lines
2.8 KiB
C++
97 lines
2.8 KiB
C++
#ifndef CAMERADEFINITION_H
|
|
#define CAMERADEFINITION_H
|
|
|
|
#include "definition_global.h"
|
|
|
|
#include "DefinitionNode.h"
|
|
|
|
#include "Vector3.h"
|
|
#include "Matrix4.h"
|
|
|
|
namespace paysages {
|
|
namespace definition {
|
|
|
|
typedef struct
|
|
{
|
|
double yfov;
|
|
double xratio;
|
|
double znear;
|
|
double zfar;
|
|
} CameraPerspective;
|
|
|
|
class DEFINITIONSHARED_EXPORT CameraDefinition: public DefinitionNode
|
|
{
|
|
public:
|
|
CameraDefinition(DefinitionNode *parent = NULL);
|
|
|
|
virtual void save(PackStream* pack) const override;
|
|
virtual void load(PackStream* pack) override;
|
|
|
|
virtual void copy(DefinitionNode* destination) const override;
|
|
virtual void validate() override;
|
|
|
|
inline const Vector3 &getLocation() const {return location;}
|
|
inline const Vector3 &getTarget() const {return target;}
|
|
inline const Vector3 &getUpVector() const {return up;}
|
|
inline double getRoll() const {return roll;}
|
|
inline Vector3 getDirection() const {return Vector3(direction);}
|
|
inline const Vector3 &getDirectionNormalized() const {return forward;}
|
|
inline const Matrix4 &getTransformationMatrix() const {return projector;}
|
|
inline const VectorSpherical &getDirectionSpherical() const {return direction;}
|
|
inline const CameraPerspective &getPerspective() const {return perspective;}
|
|
inline double getWidth() const {return width;}
|
|
inline double getHeight() const {return height;}
|
|
|
|
double getRealDepth(const Vector3 &projected) const;
|
|
|
|
void setLocation(const Vector3 &location);
|
|
void setLocationCoords(double x, double y, double z);
|
|
void setTarget(const Vector3 &target);
|
|
void setTargetCoords(double x, double y, double z);
|
|
void setRoll(double angle);
|
|
void setZoomToTarget(double zoom);
|
|
void setFov(double fov);
|
|
|
|
void strafeForward(double value);
|
|
void strafeRight(double value);
|
|
void strafeUp(double value);
|
|
void rotateYaw(double value);
|
|
void rotatePitch(double value);
|
|
void rotateRoll(double value);
|
|
|
|
void setRenderSize(int width, int height);
|
|
Vector3 project(const Vector3 &point) const;
|
|
Vector3 unproject(const Vector3 &point) const;
|
|
int isBoxInView(const Vector3 ¢er, double xsize, double ysize, double zsize) const;
|
|
int isUnprojectedBoxInView(const BoundingBox &box) const;
|
|
int isProjectedBoxInView(const BoundingBox &box) const;
|
|
|
|
bool transitionToAnother(const CameraDefinition *wanted, double factor);
|
|
|
|
private:
|
|
/* Definition */
|
|
Vector3 location;
|
|
VectorSpherical direction;
|
|
double roll;
|
|
|
|
/* Projection info */
|
|
double width;
|
|
double height;
|
|
CameraPerspective perspective;
|
|
|
|
/* Auto updated */
|
|
Vector3 target;
|
|
Vector3 forward;
|
|
Vector3 right;
|
|
Vector3 up;
|
|
Matrix4 projector;
|
|
Matrix4 unprojector;
|
|
Matrix4 unperspective;
|
|
double inv_x_factor;
|
|
double inv_y_factor;
|
|
};
|
|
|
|
}
|
|
}
|
|
|
|
#endif // CAMERADEFINITION_H
|