41 Eigen::Isometry3d ViewerEye::getPoseIsometry()
const {
48 Eigen::Isometry3d transformedPose =
51 Eigen::Vector3d::UnitY());
52 return transformedPose;
55 Eigen::Isometry3d transformedPose = getPoseIsometry();
61 bool ViewerEye::hasPose()
const {
65 Eigen::Matrix4d ViewerEye::getView()
const {
66 Eigen::Isometry3d transformedPose = getPoseIsometry();
67 return transformedPose.inverse().matrix();
70 util::Rectd ViewerEye::m_getRect(
double near,
double = 100)
const {
71 util::Rectd rect(m_unitBounds);
83 if (m_pitchTilt != 0) {
105 std::swap(rect[util::Rectd::LEFT], rect[util::Rectd::RIGHT]);
106 std::swap(rect[util::Rectd::TOP], rect[util::Rectd::BOTTOM]);
111 if ((nearClip <= 0) || (farClip <= 0) || (nearClip == farClip) ||
112 (left == right) || (top == bottom)) {
133 using F = osvr::util::detail::CompactMatrixFlags;
136 auto rect = m_getRect(near, far);
138 C compactFlags(flags);
140 switch (compactFlags.getValue()) {
141 case C::ComputeBits<>::value:
142 ret = util::parameterizedCreateProjectionMatrix<>(rect, near, far);
144 case C::ComputeBits<F::NeedsTranspose>::value:
145 ret = util::parameterizedCreateProjectionMatrix<>(rect, near, far)
149 case C::ComputeBits<F::LeftHandInput>::value:
151 opts::LeftHandedInput>(rect, near, far);
153 case C::ComputeBits<F::LeftHandInput, F::NeedsTranspose>::value:
155 opts::LeftHandedInput>(rect, near, far)
159 case C::ComputeBits<F::UnsignedZ>::value:
161 opts::ZOutputUnsigned>(rect, near, far);
163 case C::ComputeBits<F::UnsignedZ, F::NeedsTranspose>::value:
165 opts::ZOutputUnsigned>(rect, near, far)
169 case C::ComputeBits<F::LeftHandInput, F::UnsignedZ>::value:
171 opts::LeftHandedInput | opts::ZOutputUnsigned>(rect, near, far);
173 case C::ComputeBits<F::LeftHandInput, F::UnsignedZ,
174 F::NeedsTranspose>::value:
176 opts::LeftHandedInput | opts::ZOutputUnsigned>(rect, near,
187 ViewerEye::ViewerEye(
190 bool rot180,
double pitchTilt,
191 boost::optional<OSVR_RadialDistortionParameters> radDistortParams,
193 : m_pose(ctx, path), m_offset(offset), m_viewport(viewport),
194 m_unitBounds(unitBounds), m_rot180(rot180), m_pitchTilt(pitchTilt),
195 m_radDistortParams(radDistortParams),
196 m_displayInputIdx(displayInputIdx),
197 m_opticalAxisOffsetY(opticalAxisOffsetY) {}
AngleRadiansd Angle
Default angle type.
void toPose(Eigen::Isometry3d const &xform, OSVR_Pose3 &pose)
Turn an Eigen::Isometry3d (transform) into an OSVR_Pose3.
Eigen::Matrix4d parameterizedCreateProjectionMatrix(Rectd const &bounds, double near, double far)
Takes in points at the near clipping plane, as well as the near and far clipping planes. Result matrix maps [l, r] and [b, t] to [-1, 1], and [n, f] to [-1, 1] or [0, 1] depending on presence/absence of ZOutputUnsigned flag bit, taking in right- or left-handed input also as configured.
Eigen::Isometry3d fromPose(OSVR_Pose3 const &pose)
Turn an OSVR_Pose3 into an Eigen::Transform.
util::Rectd getRect() const
Gets clipping planes for a given surface.
uint16_t OSVR_MatrixConventions
Type for passing matrix convention flags.
Header containing a typelist of all special report types.
Eigen::Matrix4d createProjectionMatrix(Rectd const &bounds, double near, double far)
Takes in points at the near clipping plane, as well as the near and far clipping planes. Result matrix maps [l, r] and [b, t] to [-1, 1], and [n, f] to [-1, 1] (should be configurable)
Eigen::Matrix4d getProjection(double near, double far) const
Gets a matrix that takes in row vectors in a right-handed system and outputs signed Z...
uint8_t OSVR_DisplayInputCount
A count or index for a display input in a display config.
A structure defining a 3D (6DOF) rigid body pose: translation and rotation.
Header for interoperation between the Eigen math library, the internal mini math library, and VRPN's quatlib.
Y getRadians(AngleGeneric< System, Y > const angle)
Get the raw scalar value of your angle in radians.
Standardized, portable parallel to struct timeval for representing both absolute times and time inter...
Report type for a pose (position and orientation) callback on a tracker interface.