Improve abstraction in update function

This commit is contained in:
Vasily
2019-03-31 22:31:26 +02:00
committed by username223
parent c0f6f2f621
commit 1f7e731de1
2 changed files with 34 additions and 28 deletions
+31 -28
View File
@@ -89,37 +89,13 @@ overlay::DesktopOverlay::DesktopOverlay()
void DesktopOverlay::update()
{
setDesktopOverlayWidth( m_width );
auto positionMatrix = getDesktopOverlayPositions();
auto position = QVector3D( positionMatrix.m[0][3],
positionMatrix.m[1][3],
positionMatrix.m[2][3] );
auto changedPositions = getChangedMatrix( positionMatrix );
const auto screenRight = QVector3D( positionMatrix.m[0][0],
positionMatrix.m[1][0],
positionMatrix.m[2][0] );
const auto screenForwards = QVector3D( positionMatrix.m[0][2],
positionMatrix.m[1][2],
positionMatrix.m[2][2] );
const auto screenUp = QVector3D( positionMatrix.m[0][1],
positionMatrix.m[1][1],
positionMatrix.m[2][1] );
position += ( static_cast<float>( m_rightMovement ) * screenRight );
position += ( static_cast<float>( m_forwardsMovement ) * screenForwards );
position += ( static_cast<float>( m_upMovement ) * screenUp );
positionMatrix.m[0][3] = position.x();
positionMatrix.m[1][3] = position.y();
positionMatrix.m[2][3] = position.z();
setDesktopOverlayPositions( positionMatrix );
setDesktopOverlayWidth( m_width );
setDesktopOverlayPositions( changedPositions );
}
bool DesktopOverlay::isAvailable() const
@@ -186,4 +162,31 @@ double DesktopOverlay::getCurrentHeight() const noexcept
return m_upMovement;
}
vr::HmdMatrix34_t
DesktopOverlay::getChangedMatrix( vr::HmdMatrix34_t& matrix ) const noexcept
{
auto position = QVector3D( matrix.m[0][3], matrix.m[1][3], matrix.m[2][3] );
const auto screenRight
= QVector3D( matrix.m[0][0], matrix.m[1][0], matrix.m[2][0] );
const auto screenForwards
= QVector3D( matrix.m[0][2], matrix.m[1][2], matrix.m[2][2] );
const auto screenUp
= QVector3D( matrix.m[0][1], matrix.m[1][1], matrix.m[2][1] );
position += ( static_cast<float>( m_rightMovement ) * screenRight );
position += ( static_cast<float>( m_forwardsMovement ) * screenForwards );
position += ( static_cast<float>( m_upMovement ) * screenUp );
matrix.m[0][3] = position.x();
matrix.m[1][3] = position.y();
matrix.m[2][3] = position.z();
return matrix;
}
} // namespace overlay
+3
View File
@@ -56,6 +56,9 @@ public:
double getCurrentHeight() const noexcept;
private:
vr::HmdMatrix34_t getChangedMatrix( vr::HmdMatrix34_t& matrix ) const
noexcept;
double m_width = defaultOverlayWidth;
double m_forwardsMovement = defaultMovement;
double m_rightMovement = defaultMovement;