mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 21:57:00 +02:00
Fixes for oculus rift support
* should work in standing and 'seated' mode * OculusBaseDisplayPlugin getModelView now only applies eye offset to match behavior from the OpenVRPlugin
This commit is contained in:
parent
1083534d83
commit
ef0a157111
3 changed files with 18 additions and 6 deletions
|
@ -250,6 +250,14 @@ void MyAvatar::simulate(float deltaTime) {
|
||||||
maybeUpdateBillboard();
|
maybeUpdateBillboard();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glm::mat4 MyAvatar::getSensorToWorldMatrix() const {
|
||||||
|
if (getStandingHMDSensorMode()) {
|
||||||
|
return _sensorToWorldMatrix;
|
||||||
|
} else {
|
||||||
|
return createMatFromQuatAndPos(getWorldAlignedOrientation(), getDefaultEyePosition());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// best called at end of main loop, just before rendering.
|
// best called at end of main loop, just before rendering.
|
||||||
// update sensor to world matrix from current body position and hmd sensor.
|
// update sensor to world matrix from current body position and hmd sensor.
|
||||||
// This is so the correct camera can be used for rendering.
|
// This is so the correct camera can be used for rendering.
|
||||||
|
@ -261,10 +269,12 @@ void MyAvatar::updateFromHMDSensorMatrix(const glm::mat4& hmdSensorMatrix) {
|
||||||
_hmdSensorOrientation = glm::quat_cast(hmdSensorMatrix);
|
_hmdSensorOrientation = glm::quat_cast(hmdSensorMatrix);
|
||||||
_bodySensorMatrix = deriveBodyFromHMDSensor();
|
_bodySensorMatrix = deriveBodyFromHMDSensor();
|
||||||
|
|
||||||
// set the body position/orientation to reflect motion due to the head.
|
if (getStandingHMDSensorMode()) {
|
||||||
auto worldMat = _sensorToWorldMatrix * _bodySensorMatrix;
|
// set the body position/orientation to reflect motion due to the head.
|
||||||
setPosition(extractTranslation(worldMat));
|
auto worldMat = _sensorToWorldMatrix * _bodySensorMatrix;
|
||||||
setOrientation(glm::quat_cast(worldMat));
|
setPosition(extractTranslation(worldMat));
|
||||||
|
setOrientation(glm::quat_cast(worldMat));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// best called at end of main loop, just before rendering.
|
// best called at end of main loop, just before rendering.
|
||||||
|
|
|
@ -48,7 +48,7 @@ public:
|
||||||
const glm::mat4& getHMDSensorMatrix() const { return _hmdSensorMatrix; }
|
const glm::mat4& getHMDSensorMatrix() const { return _hmdSensorMatrix; }
|
||||||
const glm::vec3& getHMDSensorPosition() const { return _hmdSensorPosition; }
|
const glm::vec3& getHMDSensorPosition() const { return _hmdSensorPosition; }
|
||||||
const glm::quat& getHMDSensorOrientation() const { return _hmdSensorOrientation; }
|
const glm::quat& getHMDSensorOrientation() const { return _hmdSensorOrientation; }
|
||||||
glm::mat4 getSensorToWorldMatrix() const { return _sensorToWorldMatrix; }
|
glm::mat4 getSensorToWorldMatrix() const;
|
||||||
|
|
||||||
// best called at start of main loop just after we have a fresh hmd pose.
|
// best called at start of main loop just after we have a fresh hmd pose.
|
||||||
// update internal body position from new hmd pose.
|
// update internal body position from new hmd pose.
|
||||||
|
|
|
@ -54,7 +54,9 @@ glm::mat4 OculusBaseDisplayPlugin::getProjection(Eye eye, const glm::mat4& baseP
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::mat4 OculusBaseDisplayPlugin::getModelview(Eye eye, const glm::mat4& baseModelview) const {
|
glm::mat4 OculusBaseDisplayPlugin::getModelview(Eye eye, const glm::mat4& baseModelview) const {
|
||||||
return baseModelview * toGlm(_eyePoses[eye]);
|
auto eyeOffsetMat = glm::mat4();
|
||||||
|
setTranslation(eyeOffsetMat, toGlm(_eyeOffsets[eye]));
|
||||||
|
return baseModelview * eyeOffsetMat;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OculusBaseDisplayPlugin::resetSensors() {
|
void OculusBaseDisplayPlugin::resetSensors() {
|
||||||
|
|
Loading…
Reference in a new issue