我有一个问题要问那些一直在使用nDisplay和vive追踪器的人。
我使用Ben Kidd's videos on youtube和nDisplay新项目模板进行了设置,并通过创建DisplayClusterRootActor的blueprint子类创建了这个蓝图:https://blueprintue.com/blueprint/fgg1zcub/

我把GetVRPNTrackerLocation不是一个函数归结为在不同版本的UE (4.26)中
在VRPN中,我从控制器获取以下数据(不使用跟踪器atm):
Tracker openvr/controller/LHR-F7FD3B46@192.168.0.41:3884, sensor 0:
pos (-0.08, 0.78, -0.36); quat ( 0.20, 0.07, -0.15, 0.96)
Tracker openvr/controller/LHR-F7FD3B46@192.168.0.41:3884, sensor 0:
pos (-0.08, 0.78, -0.36); quat ( 0.20, 0.07, -0.16, 0.96)
...这在我的打印字符串中出现了

因此,我知道数据是从控制器-> VRPN -> UE4 / nDisplay传递的,它看起来与Ben的相似(数字从-2ish到2ish)。
最后,在我的nDisplay配置文件中(除了我的监视器设置):
...
[camera] id="camera_static" loc="X=0,Y=0,Z=0" parent="eye_level" eye_swap="false" eye_dist="0.064" force_offset="0" tracker_id="ViveVRPN" tracker_ch="0"
[input] id="ViveVRPN" type="tracker" addr="openvr/controller/LHR-F7FD3B46@192.168.0.41:3884" loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" front="-Z" right="X" up="Y"
...然而,相机的运动确实很小,并不能代表实际的相机运动。
发布于 2020-12-10 20:13:45
最后,这个问题不仅仅是我一个人的问题。
问题是,GetVRPNTrackerLocation似乎只考虑了第一个轴,将其分配给前面,并将其余轴设置为正X。
至于潜在的问题,我不知道它发生在哪里,但由于我需要快速修复,我只是将这些值硬编码到引擎代码中,而不是寻找更永久的修复。
所以,如果你想做这个变通方法,下面是我所做的:
这两个方法
FVector FDisplayClusterVrpnTrackerInputDevice::GetMappedLocation(const FVector& Loc, const AxisMapType Front, const AxisMapType Right, const AxisMapType Up) const
{
static TLocGetter funcs[] = { &LocGetX, &LocGetNX, &LocGetY, &LocGetNY, &LocGetZ, &LocGetNZ };
//return FVector(funcs[Front](Loc), funcs[Right](Loc), funcs[Up](Loc));
return FVector(funcs[AxisMapType::NZ](Loc), funcs[AxisMapType::X](Loc), funcs[AxisMapType::Y](Loc));
}
FQuat FDisplayClusterVrpnTrackerInputDevice::GetMappedQuat(const FQuat& Quat, const AxisMapType Front, const AxisMapType Right, const AxisMapType Up, const AxisMapType InAxisW) const
{
static TRotGetter funcs[] = { &RotGetX, &RotGetNX, &RotGetY, &RotGetNY, &RotGetZ, &RotGetNZ, &RotGetW, &RotGetNW };
//return FQuat(funcs[Front](Quat), funcs[Right](Quat), funcs[Up](Quat), -Quat.W);// funcs[axisW](quat));
return FQuat(funcs[AxisMapType::NZ](Quat), funcs[AxisMapType::X](Quat), funcs[AxisMapType::Y](Quat), -Quat.W);// funcs[axisW](quat));
}发布于 2021-01-27 19:28:34
所以我刚刚从4.25版本升级到4.26版本,然后遇到了同样的问题。然后,我构建了引擎并进行了调试,找到了这个问题的原因和可能的解决方案。这似乎是.cfg文本文件和轴被错误解析的问题。
一种简单的解决方案是将.cfg文件导入编辑器,然后将其转换为新的.json文件格式。在这里,您可以看到跟踪器上错误分配的轴的问题,也可以在新文件中更改它。之后,只需将新的.json文件用于您的ndisplay配置,它应该可以正常工作。
https://stackoverflow.com/questions/64902424
复制相似问题