mirror of
https://github.com/overte-org/overte.git
synced 2025-07-23 19:04:27 +02:00
Special frustum handling for mirrored mode.
This commit is contained in:
parent
ac6cd959f4
commit
f8a74acb02
1 changed files with 19 additions and 3 deletions
|
@ -446,6 +446,13 @@ void Application::updateProjectionMatrix() {
|
||||||
nearVal = _viewFrustumOffsetCamera.getNearClip();
|
nearVal = _viewFrustumOffsetCamera.getNearClip();
|
||||||
farVal = _viewFrustumOffsetCamera.getFarClip();
|
farVal = _viewFrustumOffsetCamera.getFarClip();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// when mirrored, we must flip left and right
|
||||||
|
if (Menu::getInstance()->isOptionChecked(MenuOption::Mirror)) {
|
||||||
|
float tmp = left;
|
||||||
|
left = -right;
|
||||||
|
right = -tmp;
|
||||||
|
}
|
||||||
glFrustum(left, right, bottom, top, nearVal, farVal);
|
glFrustum(left, right, bottom, top, nearVal, farVal);
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
@ -1812,8 +1819,9 @@ void Application::update(float deltaTime) {
|
||||||
updateProjectionMatrix();
|
updateProjectionMatrix();
|
||||||
|
|
||||||
} else if (_webcam.isActive()) {
|
} else if (_webcam.isActive()) {
|
||||||
const float EYE_OFFSET_SCALE = 5.0f;
|
const float EYE_OFFSET_SCALE = 0.1f;
|
||||||
_myCamera.setEyeOffsetPosition(_webcam.getEstimatedPosition() * EYE_OFFSET_SCALE);
|
glm::vec3 position = _webcam.getEstimatedPosition() * EYE_OFFSET_SCALE;
|
||||||
|
_myCamera.setEyeOffsetPosition(glm::vec3(-position.x, -position.y, position.z));
|
||||||
updateProjectionMatrix();
|
updateProjectionMatrix();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1966,7 +1974,15 @@ void Application::loadViewFrustum(Camera& camera, ViewFrustum& viewFrustum) {
|
||||||
viewFrustum.setFieldOfView(fov);
|
viewFrustum.setFieldOfView(fov);
|
||||||
viewFrustum.setNearClip(nearClip);
|
viewFrustum.setNearClip(nearClip);
|
||||||
viewFrustum.setFarClip(farClip);
|
viewFrustum.setFarClip(farClip);
|
||||||
|
|
||||||
|
// when mirrored, we must flip the eye offset in x to get the correct frustum
|
||||||
|
if (Menu::getInstance()->isOptionChecked(MenuOption::Mirror)) {
|
||||||
|
glm::vec3 position = camera.getEyeOffsetPosition();
|
||||||
|
viewFrustum.setEyeOffsetPosition(glm::vec3(-position.x, position.y, position.z));
|
||||||
|
|
||||||
|
} else {
|
||||||
viewFrustum.setEyeOffsetPosition(camera.getEyeOffsetPosition());
|
viewFrustum.setEyeOffsetPosition(camera.getEyeOffsetPosition());
|
||||||
|
}
|
||||||
viewFrustum.setEyeOffsetOrientation(camera.getEyeOffsetOrientation());
|
viewFrustum.setEyeOffsetOrientation(camera.getEyeOffsetOrientation());
|
||||||
|
|
||||||
// Ask the ViewFrustum class to calculate our corners
|
// Ask the ViewFrustum class to calculate our corners
|
||||||
|
|
Loading…
Reference in a new issue