OpenVR瞬移问题(正向计算)
OpenVR Teleportation Problem (Forward direction calculation)
所以我正在尝试在我的 VR 应用程序(而不是在 Unity 中)中实现传送。我能够从
获取每个控制器的姿势矩阵
if (auto error = vr::VRInput()->GetPoseActionDataForNextFrame(hand[eHand].pose_handle, vr::TrackingUniverseStanding, &poseData, sizeof(poseData), vr::k_ulInvalidInputValueHandle) != vr::VRInputError_None
|| !poseData.bActive || !poseData.pose.bPoseIsValid)
{
std::cerr << "pose invalid " << error << std::endl;
}
else
{
hand[eHand].pose = ConvertSteamVRMatrixToMatrix4(poseData.pose.mDeviceToAbsoluteTracking);
}
然后我使用 glm::decompose() 来获取位置和方向(方向必须共轭)。然后我尝试通过将方向矩阵乘以 vec4(0,0,1,0) 来从中获取前向,但结果向量不正确。我的逻辑有问题吗?
原来我的方法有一些问题。首先,OpenVR 将控制器的前向定义为 vec4(0,0,-1,0),其次,它是相对于 HMD 相机定义的。为了在场景中移动,我使用第二个相机矩阵进行平移和旋转。因此必须考虑到这一点。
我的最终计算如下
auto forward = glm::normalize(glm::inverse(nonHMDViewMat) *
vr.GetControllerPose(Right) * glm::vec4(0,0,-1,0));
其中 vr.GetControllerPose(右)returns 手中的矩阵 [eHand].pose 为右手。
所以我正在尝试在我的 VR 应用程序(而不是在 Unity 中)中实现传送。我能够从
获取每个控制器的姿势矩阵if (auto error = vr::VRInput()->GetPoseActionDataForNextFrame(hand[eHand].pose_handle, vr::TrackingUniverseStanding, &poseData, sizeof(poseData), vr::k_ulInvalidInputValueHandle) != vr::VRInputError_None
|| !poseData.bActive || !poseData.pose.bPoseIsValid)
{
std::cerr << "pose invalid " << error << std::endl;
}
else
{
hand[eHand].pose = ConvertSteamVRMatrixToMatrix4(poseData.pose.mDeviceToAbsoluteTracking);
}
然后我使用 glm::decompose() 来获取位置和方向(方向必须共轭)。然后我尝试通过将方向矩阵乘以 vec4(0,0,1,0) 来从中获取前向,但结果向量不正确。我的逻辑有问题吗?
原来我的方法有一些问题。首先,OpenVR 将控制器的前向定义为 vec4(0,0,-1,0),其次,它是相对于 HMD 相机定义的。为了在场景中移动,我使用第二个相机矩阵进行平移和旋转。因此必须考虑到这一点。
我的最终计算如下
auto forward = glm::normalize(glm::inverse(nonHMDViewMat) *
vr.GetControllerPose(Right) * glm::vec4(0,0,-1,0));
其中 vr.GetControllerPose(右)returns 手中的矩阵 [eHand].pose 为右手。