mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 14:02:57 +02:00
sync
This commit is contained in:
parent
7a47250aa7
commit
e37387f45c
5 changed files with 18 additions and 17 deletions
|
@ -3992,7 +3992,7 @@ void Application::updateMyAvatarLookAtPosition() {
|
||||||
// I am not looking at anyone else, so just look forward
|
// I am not looking at anyone else, so just look forward
|
||||||
if (isHMD) {
|
if (isHMD) {
|
||||||
glm::mat4 worldHMDMat = myAvatar->getSensorToWorldMatrix() *
|
glm::mat4 worldHMDMat = myAvatar->getSensorToWorldMatrix() *
|
||||||
(glm::mat4)myAvatar->getHeadControllerPoseInSensorFrame();
|
(glm::mat4)myAvatar->getHeadControllerPoseInSensorFrame() * Matrices::Y_180;
|
||||||
lookAtSpot = transformPoint(worldHMDMat, glm::vec3(0.0f, 0.0f, -TREE_SCALE));
|
lookAtSpot = transformPoint(worldHMDMat, glm::vec3(0.0f, 0.0f, -TREE_SCALE));
|
||||||
} else {
|
} else {
|
||||||
lookAtSpot = myAvatar->getHead()->getEyePosition() +
|
lookAtSpot = myAvatar->getHead()->getEyePosition() +
|
||||||
|
|
|
@ -2328,9 +2328,9 @@ glm::quat MyAvatar::getWorldBodyOrientation() const {
|
||||||
glm::mat4 MyAvatar::deriveBodyFromHMDSensor() const {
|
glm::mat4 MyAvatar::deriveBodyFromHMDSensor() const {
|
||||||
|
|
||||||
// HMD is in sensor space.
|
// HMD is in sensor space.
|
||||||
const glm::vec3 hmdPosition = getHeadControllerPoseInSensorFrame();
|
const glm::vec3 headPosition = getHeadControllerPoseInSensorFrame();
|
||||||
const glm::quat hmdOrientation = getHeadControllerPoseInSensorFrame();
|
const glm::quat headOrientation = (glm::quat)getHeadControllerPoseInSensorFrame() * Quaternions::Y_180;
|
||||||
const glm::quat hmdOrientationYawOnly = cancelOutRollAndPitch(hmdOrientation);
|
const glm::quat headOrientationYawOnly = cancelOutRollAndPitch(headOrientation);
|
||||||
|
|
||||||
const Rig& rig = _skeletonModel->getRig();
|
const Rig& rig = _skeletonModel->getRig();
|
||||||
int rightEyeIndex = rig.indexOfJoint("RightEye");
|
int rightEyeIndex = rig.indexOfJoint("RightEye");
|
||||||
|
@ -2353,12 +2353,12 @@ glm::mat4 MyAvatar::deriveBodyFromHMDSensor() const {
|
||||||
|
|
||||||
// eyeToNeck offset is relative full HMD orientation.
|
// eyeToNeck offset is relative full HMD orientation.
|
||||||
// while neckToRoot offset is only relative to HMDs yaw.
|
// while neckToRoot offset is only relative to HMDs yaw.
|
||||||
// Y_180 is necessary because rig is z forward and hmdOrientation is -z forward
|
// Y_180 is necessary because rig is z forward and headOrientation is -z forward
|
||||||
glm::vec3 eyeToNeck = hmdOrientation * Quaternions::Y_180 * (localNeck - localEyes);
|
glm::vec3 eyeToNeck = headOrientation * Quaternions::Y_180 * (localNeck - localEyes);
|
||||||
glm::vec3 neckToRoot = hmdOrientationYawOnly * Quaternions::Y_180 * -localNeck;
|
glm::vec3 neckToRoot = headOrientationYawOnly * Quaternions::Y_180 * -localNeck;
|
||||||
glm::vec3 bodyPos = hmdPosition + eyeToNeck + neckToRoot;
|
glm::vec3 bodyPos = headPosition + eyeToNeck + neckToRoot;
|
||||||
|
|
||||||
return createMatFromQuatAndPos(hmdOrientationYawOnly, bodyPos);
|
return createMatFromQuatAndPos(headOrientationYawOnly, bodyPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::vec3 MyAvatar::getPositionForAudio() {
|
glm::vec3 MyAvatar::getPositionForAudio() {
|
||||||
|
@ -2474,7 +2474,7 @@ bool MyAvatar::FollowHelper::shouldActivateRotation(const MyAvatar& myAvatar, co
|
||||||
} else {
|
} else {
|
||||||
const float FOLLOW_ROTATION_THRESHOLD = cosf(PI / 6.0f); // 30 degrees
|
const float FOLLOW_ROTATION_THRESHOLD = cosf(PI / 6.0f); // 30 degrees
|
||||||
glm::vec2 bodyFacing = getFacingDir2D(currentBodyMatrix);
|
glm::vec2 bodyFacing = getFacingDir2D(currentBodyMatrix);
|
||||||
return glm::dot(myAvatar.getHeadControllerFacingMovingAverage(), bodyFacing) < FOLLOW_ROTATION_THRESHOLD;
|
return glm::dot(myAvatar.getHeadControllerFacingMovingAverage() * -1.0f, bodyFacing) < FOLLOW_ROTATION_THRESHOLD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,8 @@ void MySkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) {
|
||||||
} else {
|
} else {
|
||||||
if (qApp->isHMDMode()) {
|
if (qApp->isHMDMode()) {
|
||||||
// get HMD position from sensor space into world space, and back into rig space
|
// get HMD position from sensor space into world space, and back into rig space
|
||||||
glm::mat4 worldHMDMat = myAvatar->getHeadControllerPoseInWorldFrame();
|
// glm::mat4 worldHMDMat = myAvatar->getHeadControllerPoseInWorldFrame();
|
||||||
|
glm::mat4 worldHMDMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix();
|
||||||
glm::mat4 rigToWorld = createMatFromQuatAndPos(getRotation(), getTranslation());
|
glm::mat4 rigToWorld = createMatFromQuatAndPos(getRotation(), getTranslation());
|
||||||
glm::mat4 worldToRig = glm::inverse(rigToWorld);
|
glm::mat4 worldToRig = glm::inverse(rigToWorld);
|
||||||
glm::mat4 rigHMDMat = worldToRig * worldHMDMat;
|
glm::mat4 rigHMDMat = worldToRig * worldHMDMat;
|
||||||
|
|
|
@ -122,7 +122,8 @@ bool HMDScriptingInterface::getHUDLookAtPosition3D(glm::vec3& result) const {
|
||||||
|
|
||||||
glm::mat4 HMDScriptingInterface::getWorldHMDMatrix() const {
|
glm::mat4 HMDScriptingInterface::getWorldHMDMatrix() const {
|
||||||
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
||||||
return myAvatar->getSensorToWorldMatrix() * (glm::mat4)myAvatar->getHeadControllerPoseInSensorFrame();
|
// return myAvatar->getSensorToWorldMatrix() * (glm::mat4)myAvatar->getHeadControllerPoseInSensorFrame();
|
||||||
|
return myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::vec3 HMDScriptingInterface::getPosition() const {
|
glm::vec3 HMDScriptingInterface::getPosition() const {
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
|
|
||||||
#include <PerfStat.h>
|
#include <PerfStat.h>
|
||||||
#include <PathUtils.h>
|
#include <PathUtils.h>
|
||||||
|
#include <NumericalConstants.h>
|
||||||
|
#include <StreamUtils.h>
|
||||||
|
|
||||||
#include <OVR_CAPI.h>
|
#include <OVR_CAPI.h>
|
||||||
|
|
||||||
|
@ -313,19 +315,16 @@ void OculusControllerManager::TouchDevice::handleHeadPose(float deltaTime,
|
||||||
auto poseId = controller::HEAD;
|
auto poseId = controller::HEAD;
|
||||||
auto& pose = _poseStateMap[poseId];
|
auto& pose = _poseStateMap[poseId];
|
||||||
|
|
||||||
|
static const glm::quat yFlip = glm::angleAxis(PI, Vectors::UNIT_Y);
|
||||||
pose.translation = toGlm(headPose.ThePose.Position);
|
pose.translation = toGlm(headPose.ThePose.Position);
|
||||||
pose.rotation = toGlm(headPose.ThePose.Orientation);
|
pose.rotation = toGlm(headPose.ThePose.Orientation) * yFlip;
|
||||||
pose.angularVelocity = toGlm(headPose.AngularVelocity);
|
pose.angularVelocity = toGlm(headPose.AngularVelocity);
|
||||||
pose.velocity = toGlm(headPose.LinearVelocity);
|
pose.velocity = toGlm(headPose.LinearVelocity);
|
||||||
pose.valid = true;
|
pose.valid = true;
|
||||||
|
|
||||||
qDebug() << "handleHeadPose" << pose.translation.x << pose.translation.y << pose.translation.z;
|
|
||||||
|
|
||||||
// transform into avatar frame
|
// transform into avatar frame
|
||||||
glm::mat4 controllerToAvatar = glm::inverse(inputCalibrationData.avatarMat) * inputCalibrationData.sensorToWorldMat;
|
glm::mat4 controllerToAvatar = glm::inverse(inputCalibrationData.avatarMat) * inputCalibrationData.sensorToWorldMat;
|
||||||
pose = pose.transform(controllerToAvatar);
|
pose = pose.transform(controllerToAvatar);
|
||||||
|
|
||||||
qDebug() << "handleHeadPose after" << pose.translation.x << pose.translation.y << pose.translation.z;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OculusControllerManager::TouchDevice::handleRotationForUntrackedHand(const controller::InputCalibrationData& inputCalibrationData,
|
void OculusControllerManager::TouchDevice::handleRotationForUntrackedHand(const controller::InputCalibrationData& inputCalibrationData,
|
||||||
|
|
Loading…
Reference in a new issue