mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 03:44:02 +02:00
allow mouse to move outside of the overlay extents
This commit is contained in:
parent
7219a925d2
commit
1fa6e294e7
2 changed files with 22 additions and 9 deletions
|
@ -38,11 +38,12 @@ static const float reticleSize = TWO_PI / 100.0f;
|
|||
|
||||
static const float CURSOR_PIXEL_SIZE = 32.0f;
|
||||
|
||||
static const float DEFAULT_HMD_UI_ANGULAR_SIZE_IN_RADIANS = (DEFAULT_HMD_UI_ANGULAR_SIZE / 180.0f) * PI;
|
||||
static const float DEFAULT_HMD_UI_VERT_ANGULAR_SIZE_IN_RADIANS = (DEFAULT_HMD_UI_VERT_ANGULAR_SIZE / 180.0f) * PI;
|
||||
static const float DEFAULT_HMD_UI_HORZ_ANGULAR_SIZE_IN_RADIANS = (DEFAULT_HMD_UI_HORZ_ANGULAR_SIZE / 180.0f) * PI;
|
||||
static const float MOUSE_PITCH_RANGE = DEFAULT_HMD_UI_ANGULAR_SIZE_IN_RADIANS;
|
||||
static const float MOUSE_YAW_RANGE = VIRTUAL_SCREEN_SIZE_X / VIRTUAL_SCREEN_SIZE_Y * DEFAULT_HMD_UI_ANGULAR_SIZE_IN_RADIANS;
|
||||
static const glm::vec2 MOUSE_RANGE(MOUSE_YAW_RANGE, MOUSE_PITCH_RANGE);
|
||||
|
||||
//static const float MOUSE_PITCH_RANGE = DEFAULT_HMD_UI_ANGULAR_SIZE_IN_RADIANS;
|
||||
//static const float MOUSE_YAW_RANGE = VIRTUAL_SCREEN_SIZE_X / VIRTUAL_SCREEN_SIZE_Y * DEFAULT_HMD_UI_ANGULAR_SIZE_IN_RADIANS;
|
||||
//static const glm::vec2 MOUSE_RANGE(MOUSE_YAW_RANGE, MOUSE_PITCH_RANGE);
|
||||
|
||||
static gpu::BufferPointer _hemiVertices;
|
||||
static gpu::BufferPointer _hemiIndices;
|
||||
|
@ -378,10 +379,22 @@ glm::vec2 ApplicationCompositor::getReticlePosition() {
|
|||
}
|
||||
return toGlm(QCursor::pos());
|
||||
}
|
||||
|
||||
void ApplicationCompositor::setReticlePosition(glm::vec2 position, bool sendFakeEvent) {
|
||||
if (qApp->isHMDMode()) {
|
||||
glm::vec2 maxReticlePosition = qApp->getUiSize();
|
||||
_reticlePositionInHMD = glm::clamp(position, vec2(0), maxReticlePosition);
|
||||
const float MOUSE_EXTENTS_VERT_ANGULAR_SIZE = 170.0f; // 5deg from poles
|
||||
const float MOUSE_EXTENTS_VERT_PIXELS = VIRTUAL_SCREEN_SIZE_Y * (MOUSE_EXTENTS_VERT_ANGULAR_SIZE / DEFAULT_HMD_UI_VERT_ANGULAR_SIZE);
|
||||
const float MOUSE_EXTENTS_HORZ_ANGULAR_SIZE = 360.0f; // full sphere
|
||||
const float MOUSE_EXTENTS_HORZ_PIXELS = VIRTUAL_SCREEN_SIZE_X * (MOUSE_EXTENTS_HORZ_ANGULAR_SIZE / DEFAULT_HMD_UI_HORZ_ANGULAR_SIZE);
|
||||
|
||||
glm::vec2 maxOverlayPosition = qApp->getUiSize();
|
||||
float extaPixelsX = (MOUSE_EXTENTS_HORZ_PIXELS - maxOverlayPosition.x) / 2.0f;
|
||||
float extaPixelsY = (MOUSE_EXTENTS_VERT_PIXELS - maxOverlayPosition.y) / 2.0f;
|
||||
glm::vec2 mouseExtra { extaPixelsX, extaPixelsY };
|
||||
glm::vec2 minMouse = vec2(0) - mouseExtra;
|
||||
glm::vec2 maxMouse = maxOverlayPosition + mouseExtra;
|
||||
|
||||
_reticlePositionInHMD = glm::clamp(position, minMouse, maxMouse);
|
||||
|
||||
if (sendFakeEvent) {
|
||||
// in HMD mode we need to fake our mouse moves...
|
||||
|
|
|
@ -35,7 +35,7 @@ const float MAGNIFY_MULT = 2.0f;
|
|||
const int VIRTUAL_SCREEN_SIZE_X = 3840;
|
||||
const int VIRTUAL_SCREEN_SIZE_Y = 1536;
|
||||
const float DEFAULT_HMD_UI_HORZ_ANGULAR_SIZE = 180.0f;
|
||||
const float DEFAULT_HMD_UI_ANGULAR_SIZE = DEFAULT_HMD_UI_HORZ_ANGULAR_SIZE * (float)VIRTUAL_SCREEN_SIZE_Y / (float)VIRTUAL_SCREEN_SIZE_X;
|
||||
const float DEFAULT_HMD_UI_VERT_ANGULAR_SIZE = DEFAULT_HMD_UI_HORZ_ANGULAR_SIZE * (float)VIRTUAL_SCREEN_SIZE_Y / (float)VIRTUAL_SCREEN_SIZE_X;
|
||||
|
||||
// Handles the drawing of the overlays to the screen
|
||||
// TODO, move divide up the rendering, displaying and input handling
|
||||
|
@ -115,8 +115,8 @@ private:
|
|||
QString _hoverItemDescription;
|
||||
quint64 _hoverItemEnterUsecs { 0 };
|
||||
|
||||
float _hmdUIAngularSize { DEFAULT_HMD_UI_ANGULAR_SIZE };
|
||||
float _textureFov { glm::radians(DEFAULT_HMD_UI_ANGULAR_SIZE) };
|
||||
float _hmdUIAngularSize { DEFAULT_HMD_UI_VERT_ANGULAR_SIZE };
|
||||
float _textureFov { glm::radians(DEFAULT_HMD_UI_VERT_ANGULAR_SIZE) };
|
||||
float _textureAspectRatio { 1.0f };
|
||||
int _hemiVerticesID { GeometryCache::UNKNOWN_ID };
|
||||
|
||||
|
|
Loading…
Reference in a new issue