2015-10-26 13:08:18 +00:00
|
|
|
#ifndef GL_STEREO_LEFTRIGHT_H_
|
|
|
|
#define GL_STEREO_LEFTRIGHT_H_
|
|
|
|
|
|
|
|
#include "gl_stereo3d.h"
|
|
|
|
|
|
|
|
namespace s3d {
|
|
|
|
|
|
|
|
|
|
|
|
class ShiftedEyePose : public EyePose
|
|
|
|
{
|
|
|
|
public:
|
2015-10-31 00:51:35 +00:00
|
|
|
ShiftedEyePose(FLOATTYPE shift) : shift(shift) {};
|
|
|
|
FLOATTYPE getShift() const { return shift; }
|
|
|
|
void setShift(FLOATTYPE shift) { this->shift = shift; }
|
|
|
|
virtual void GetProjection(FLOATTYPE fov, FLOATTYPE aspectRatio, FLOATTYPE fovRatio, FLOATTYPE outMatrix[4][4]) const;
|
|
|
|
virtual void GetViewShift(FLOATTYPE yaw, FLOATTYPE outViewShift[3]) const;
|
2015-10-26 13:08:18 +00:00
|
|
|
protected:
|
2015-10-31 00:51:35 +00:00
|
|
|
FLOATTYPE shift;
|
2015-10-26 13:08:18 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class LeftEyePose : public ShiftedEyePose
|
|
|
|
{
|
|
|
|
public:
|
2015-10-31 00:51:35 +00:00
|
|
|
LeftEyePose(FLOATTYPE ipd) : ShiftedEyePose( FLOATTYPE(-0.5) * ipd) {}
|
|
|
|
FLOATTYPE getIpd() const { return FLOATTYPE(-2.0)*getShift(); }
|
|
|
|
void setIpd(FLOATTYPE ipd) { setShift(FLOATTYPE(-0.5)*ipd); }
|
2015-10-26 13:08:18 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class RightEyePose : public ShiftedEyePose
|
|
|
|
{
|
|
|
|
public:
|
2015-10-31 00:51:35 +00:00
|
|
|
RightEyePose(FLOATTYPE ipd) : ShiftedEyePose(FLOATTYPE(+0.5)*ipd) {}
|
|
|
|
FLOATTYPE getIpd() const { return FLOATTYPE(+2.0)*shift; }
|
|
|
|
void setIpd(FLOATTYPE ipd) { setShift(FLOATTYPE(+0.5)*ipd); }
|
2015-10-26 13:08:18 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* As if viewed through the left eye only
|
|
|
|
*/
|
|
|
|
class LeftEyeView : public Stereo3DMode
|
|
|
|
{
|
|
|
|
public:
|
2015-10-31 00:51:35 +00:00
|
|
|
static const LeftEyeView& getInstance(FLOATTYPE ipd);
|
2015-10-26 13:08:18 +00:00
|
|
|
|
2015-10-31 00:51:35 +00:00
|
|
|
LeftEyeView(FLOATTYPE ipd) : eye(ipd) { eye_ptrs.push_back(&eye); }
|
|
|
|
FLOATTYPE getIpd() const { return eye.getIpd(); }
|
|
|
|
void setIpd(FLOATTYPE ipd) { eye.setIpd(ipd); }
|
2015-10-26 13:08:18 +00:00
|
|
|
protected:
|
|
|
|
LeftEyePose eye;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class RightEyeView : public Stereo3DMode
|
|
|
|
{
|
|
|
|
public:
|
2015-10-31 00:51:35 +00:00
|
|
|
static const RightEyeView& getInstance(FLOATTYPE ipd);
|
2015-10-26 13:08:18 +00:00
|
|
|
|
2015-10-31 00:51:35 +00:00
|
|
|
RightEyeView(FLOATTYPE ipd) : eye(ipd) { eye_ptrs.push_back(&eye); }
|
|
|
|
FLOATTYPE getIpd() const { return eye.getIpd(); }
|
|
|
|
void setIpd(FLOATTYPE ipd) { eye.setIpd(ipd); }
|
2015-10-26 13:08:18 +00:00
|
|
|
protected:
|
|
|
|
RightEyePose eye;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
} /* namespace s3d */
|
|
|
|
|
|
|
|
#endif /* GL_STEREO_LEFTRIGHT_H_ */
|