mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 21:56:26 +02:00
Working on merging
This commit is contained in:
parent
b33842e34b
commit
0d509ceeea
3 changed files with 37 additions and 33 deletions
|
@ -221,15 +221,19 @@ public:
|
||||||
const glm::vec3& getMouseRayOrigin() const { return _mouseRayOrigin; }
|
const glm::vec3& getMouseRayOrigin() const { return _mouseRayOrigin; }
|
||||||
const glm::vec3& getMouseRayDirection() const { return _mouseRayDirection; }
|
const glm::vec3& getMouseRayDirection() const { return _mouseRayDirection; }
|
||||||
bool mouseOnScreen() const;
|
bool mouseOnScreen() const;
|
||||||
|
glm::ivec2 getMouse();
|
||||||
int getMouseX() const;
|
int getMouseX() const;
|
||||||
int getMouseY() const;
|
int getMouseY() const;
|
||||||
glm::ivec2 getTrueMousePosition() const;
|
glm::ivec2 getTrueMousePosition() const;
|
||||||
int getTrueMouseX() const;
|
int getTrueMouseX() const { return getTrueMousePosition().x; }
|
||||||
int getTrueMouseY() const;
|
int getTrueMouseY() const { return getTrueMousePosition().y; }
|
||||||
int getMouseDragStartedX() const;
|
int getMouseDragStartedX() const;
|
||||||
int getMouseDragStartedY() const;
|
int getMouseDragStartedY() const;
|
||||||
int getTrueMouseDragStartedX() const { return _mouseDragStartedX; }
|
const glm::ivec2 & getTrueMouseDragStarted() const { return _mouseDragStarted; }
|
||||||
int getTrueMouseDragStartedY() const { return _mouseDragStartedY; }
|
int getTrueMouseDragStartedX() const { return getTrueMouseDragStarted().x; }
|
||||||
|
int getTrueMouseDragStartedY() const { return getTrueMouseDragStarted().y; }
|
||||||
|
|
||||||
|
|
||||||
bool getLastMouseMoveWasSimulated() const { return _lastMouseMoveWasSimulated; }
|
bool getLastMouseMoveWasSimulated() const { return _lastMouseMoveWasSimulated; }
|
||||||
|
|
||||||
FaceTracker* getActiveFaceTracker();
|
FaceTracker* getActiveFaceTracker();
|
||||||
|
|
|
@ -27,9 +27,9 @@ public:
|
||||||
virtual bool isThrottled() const { return false; }
|
virtual bool isThrottled() const { return false; }
|
||||||
|
|
||||||
// Rendering support
|
// Rendering support
|
||||||
virtual void preRender() {};
|
virtual void preDisplay() {};
|
||||||
virtual void render(int finalSceneTexture) {};
|
virtual void display(int finalSceneTexture) {};
|
||||||
virtual void postRender() {};
|
virtual void postDisplay() {};
|
||||||
|
|
||||||
// Pointer support
|
// Pointer support
|
||||||
|
|
||||||
|
|
|
@ -400,6 +400,7 @@ void ApplicationOverlay::displayOverlayTextureStereo(Camera& whichCamera, float
|
||||||
const GLfloat halfQuadWidth = halfQuadHeight * aspectRatio;
|
const GLfloat halfQuadWidth = halfQuadHeight * aspectRatio;
|
||||||
const GLfloat quadWidth = halfQuadWidth * 2.0f;
|
const GLfloat quadWidth = halfQuadWidth * 2.0f;
|
||||||
const GLfloat quadHeight = halfQuadHeight * 2.0f;
|
const GLfloat quadHeight = halfQuadHeight * 2.0f;
|
||||||
|
vec2 quadSize(quadWidth, quadHeight);
|
||||||
|
|
||||||
GLfloat x = -halfQuadWidth;
|
GLfloat x = -halfQuadWidth;
|
||||||
GLfloat y = -halfQuadHeight;
|
GLfloat y = -halfQuadHeight;
|
||||||
|
@ -426,15 +427,16 @@ void ApplicationOverlay::displayOverlayTextureStereo(Camera& whichCamera, float
|
||||||
const float reticleSize = 40.0f / canvasSize.x * quadWidth;
|
const float reticleSize = 40.0f / canvasSize.x * quadWidth;
|
||||||
x -= reticleSize / 2.0f;
|
x -= reticleSize / 2.0f;
|
||||||
y += reticleSize / 2.0f;
|
y += reticleSize / 2.0f;
|
||||||
const float mouseX = (qApp->getMouseX() / (float)canvasSize.x) * quadWidth;
|
vec2 mouse = qApp->getMouse();
|
||||||
const float mouseY = (1.0 - (qApp->getMouseY() / (float)canvasSize.y)) * quadHeight;
|
mouse /= canvasSize;
|
||||||
|
mouse.y = 1.0 - mouse.y;
|
||||||
|
mouse *= quadSize;
|
||||||
glm::vec4 reticleColor = { RETICLE_COLOR[0], RETICLE_COLOR[1], RETICLE_COLOR[2], 1.0f };
|
glm::vec4 reticleColor = { RETICLE_COLOR[0], RETICLE_COLOR[1], RETICLE_COLOR[2], 1.0f };
|
||||||
|
|
||||||
DependencyManager::get<GeometryCache>()->renderQuad(glm::vec3(x + mouseX, y + mouseY, -distance),
|
DependencyManager::get<GeometryCache>()->renderQuad(glm::vec3(x + mouse.x, y + mouse.y, -distance),
|
||||||
glm::vec3(x + mouseX + reticleSize, y + mouseY, -distance),
|
glm::vec3(x + mouse.x + reticleSize, y + mouse.y, -distance),
|
||||||
glm::vec3(x + mouseX + reticleSize, y + mouseY - reticleSize, -distance),
|
glm::vec3(x + mouse.x + reticleSize, y + mouse.y - reticleSize, -distance),
|
||||||
glm::vec3(x + mouseX, y + mouseY - reticleSize, -distance),
|
glm::vec3(x + mouse.x, y + mouse.y - reticleSize, -distance),
|
||||||
glm::vec2(0.0f, 0.0f), glm::vec2(1.0f, 0.0f),
|
glm::vec2(0.0f, 0.0f), glm::vec2(1.0f, 0.0f),
|
||||||
glm::vec2(1.0f, 1.0f), glm::vec2(0.0f, 1.0f),
|
glm::vec2(1.0f, 1.0f), glm::vec2(0.0f, 1.0f),
|
||||||
reticleColor, _reticleQuad);
|
reticleColor, _reticleQuad);
|
||||||
|
@ -465,7 +467,6 @@ void ApplicationOverlay::computeHmdPickRay(glm::vec2 cursorPos, glm::vec3& origi
|
||||||
origin = myAvatar->getEyePosition();
|
origin = myAvatar->getEyePosition();
|
||||||
direction = cursorDir - origin;
|
direction = cursorDir - origin;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
//Caculate the click location using one of the sixense controllers. Scale is not applied
|
//Caculate the click location using one of the sixense controllers. Scale is not applied
|
||||||
QPoint ApplicationOverlay::getPalmClickLocation(const PalmData *palm) const {
|
QPoint ApplicationOverlay::getPalmClickLocation(const PalmData *palm) const {
|
||||||
|
@ -495,11 +496,8 @@ QPoint ApplicationOverlay::getPalmClickLocation(const PalmData *palm) const {
|
||||||
rv.setX(INT_MAX);
|
rv.setX(INT_MAX);
|
||||||
rv.setY(INT_MAX);
|
rv.setY(INT_MAX);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
float u = asin(collisionPos.x) / (_textureFov)+0.5f;
|
float u = asin(collisionPos.x) / (_textureFov)+0.5f;
|
||||||
float v = 1.0 - (asin(collisionPos.y) / (_textureFov)+0.5f);
|
float v = 1.0 - (asin(collisionPos.y) / (_textureFov)+0.5f);
|
||||||
auto size = qApp->getCanvasSize();
|
|
||||||
|
|
||||||
rv.setX(u * canvasSize.x);
|
rv.setX(u * canvasSize.x);
|
||||||
rv.setY(v * canvasSize.y);
|
rv.setY(v * canvasSize.y);
|
||||||
}
|
}
|
||||||
|
@ -559,6 +557,7 @@ void ApplicationOverlay::renderPointers() {
|
||||||
if (_lastMouseMove == 0) {
|
if (_lastMouseMove == 0) {
|
||||||
_lastMouseMove = usecTimestampNow();
|
_lastMouseMove = usecTimestampNow();
|
||||||
}
|
}
|
||||||
|
auto trueMouse = qApp->getTrueMousePosition();
|
||||||
QPoint position(trueMouse.x, trueMouse.y);
|
QPoint position(trueMouse.x, trueMouse.y);
|
||||||
|
|
||||||
static const int MAX_IDLE_TIME = 3;
|
static const int MAX_IDLE_TIME = 3;
|
||||||
|
@ -665,29 +664,30 @@ void ApplicationOverlay::renderControllerPointers() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto canvasSize = qApp->getCanvasSize();
|
glm::ivec2 canvasSize = qApp->getCanvasSize();
|
||||||
int mouseX, mouseY;
|
glm::ivec2 mouse;
|
||||||
if (Menu::getInstance()->isOptionChecked(MenuOption::SixenseLasers)) {
|
if (Menu::getInstance()->isOptionChecked(MenuOption::SixenseLasers)) {
|
||||||
QPoint res = getPalmClickLocation(palmData);
|
QPoint res = getPalmClickLocation(palmData);
|
||||||
mouseX = res.x();
|
mouse = ivec2(res.x(), res.y());
|
||||||
mouseY = res.y();
|
|
||||||
} else {
|
} else {
|
||||||
// Get directon relative to avatar orientation
|
// Get directon relative to avatar orientation
|
||||||
glm::vec3 direction = glm::inverse(myAvatar->getOrientation()) * palmData->getFingerDirection();
|
glm::vec3 direction = glm::inverse(myAvatar->getOrientation()) * palmData->getFingerDirection();
|
||||||
|
|
||||||
// Get the angles, scaled between (-0.5,0.5)
|
// Get the angles, scaled between (-0.5,0.5)
|
||||||
float xAngle = (atan2(direction.z, direction.x) + M_PI_2);
|
vec2 angles((atan2(direction.z, direction.x) + M_PI_2),
|
||||||
float yAngle = 0.5f - ((atan2(direction.z, direction.y) + M_PI_2));
|
0.5f - ((atan2(direction.z, direction.y) + M_PI_2)));
|
||||||
|
|
||||||
// Get the pixel range over which the xAngle and yAngle are scaled
|
// Get the pixel range over which the xAngle and yAngle are scaled
|
||||||
float cursorRange = canvasSize.x * SixenseManager::getInstance().getCursorPixelRangeMult();
|
float cursorRange = canvasSize.x * SixenseManager::getInstance().getCursorPixelRangeMult();
|
||||||
|
mouse = canvasSize;
|
||||||
mouseX = (canvasSize.x / 2.0f + cursorRange * xAngle);
|
mouse /= 2.0;
|
||||||
mouseY = (canvasSize.y / 2.0f + cursorRange * yAngle);
|
mouse += cursorRange * angles;
|
||||||
}
|
}
|
||||||
|
|
||||||
//If the cursor is out of the screen then don't render it
|
//If the cursor is out of the screen then don't render it
|
||||||
if (mouseX < 0 || mouseX >= canvasSize.x || mouseY < 0 || mouseY >= canvasSize.y) {
|
|
||||||
|
if (glm::any(glm::lessThan(mouse, canvasSize)) ||
|
||||||
|
glm::any(glm::greaterThanEqual(mouse, canvasSize))) {
|
||||||
_reticleActive[index] = false;
|
_reticleActive[index] = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -696,12 +696,12 @@ void ApplicationOverlay::renderControllerPointers() {
|
||||||
|
|
||||||
const float reticleSize = 40.0f;
|
const float reticleSize = 40.0f;
|
||||||
|
|
||||||
mouseX -= reticleSize / 2.0f;
|
mouse.x -= reticleSize / 2.0f;
|
||||||
mouseY += reticleSize / 2.0f;
|
mouse.y += reticleSize / 2.0f;
|
||||||
|
|
||||||
|
|
||||||
glm::vec2 topLeft(mouseX, mouseY);
|
glm::vec2 topLeft(mouse);
|
||||||
glm::vec2 bottomRight(mouseX + reticleSize, mouseY - reticleSize);
|
glm::vec2 bottomRight(mouse.x + reticleSize, mouse.y - reticleSize);
|
||||||
glm::vec2 texCoordTopLeft(0.0f, 0.0f);
|
glm::vec2 texCoordTopLeft(0.0f, 0.0f);
|
||||||
glm::vec2 texCoordBottomRight(1.0f, 1.0f);
|
glm::vec2 texCoordBottomRight(1.0f, 1.0f);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue