首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在UE4中使用带有Vive跟踪器的nDisplay

在UE4中使用带有Vive跟踪器的nDisplay
EN

Stack Overflow用户
提问于 2020-11-19 06:28:51
回答 2查看 1.5K关注 0票数 0

我有一个问题要问那些一直在使用nDisplay和vive追踪器的人。

我使用Ben Kidd's videos on youtube和nDisplay新项目模板进行了设置,并通过创建DisplayClusterRootActor的blueprint子类创建了这个蓝图:https://blueprintue.com/blueprint/fgg1zcub/

我把GetVRPNTrackerLocation不是一个函数归结为在不同版本的UE (4.26)中

在VRPN中,我从控制器获取以下数据(不使用跟踪器atm):

代码语言:javascript
复制
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配置文件中(除了我的监视器设置):

代码语言:javascript
复制
...
[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"
...

然而,相机的运动确实很小,并不能代表实际的相机运动。

EN

回答 2

Stack Overflow用户

发布于 2020-12-10 20:13:45

最后,这个问题不仅仅是我一个人的问题。

问题是,GetVRPNTrackerLocation似乎只考虑了第一个轴,将其分配给前面,并将其余轴设置为正X。

至于潜在的问题,我不知道它发生在哪里,但由于我需要快速修复,我只是将这些值硬编码到引擎代码中,而不是寻找更永久的修复。

所以,如果你想做这个变通方法,下面是我所做的:

  1. 遵循以下步骤获得Unreal 4.26的源代码版本(我推荐4.26分支) https://docs.unrealengine.com/en-US/ProductionPipelines/DevelopmentSetup/BuildingUnrealEngine/index.html
  2. Find {UnrealSourceFolder}\Engine\Plugins\Runtime\nDisplay\Source\DisplayCluster\Private\Input\Devices\VRPN\Tracker\DisplayClusterVrpnTrackerInputDevice.cpp
  3. Modify

    这两个方法

代码语言:javascript
复制
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));
}
票数 1
EN

Stack Overflow用户

发布于 2021-01-27 19:28:34

所以我刚刚从4.25版本升级到4.26版本,然后遇到了同样的问题。然后,我构建了引擎并进行了调试,找到了这个问题的原因和可能的解决方案。这似乎是.cfg文本文件和轴被错误解析的问题。

一种简单的解决方案是将.cfg文件导入编辑器,然后将其转换为新的.json文件格式。在这里,您可以看到跟踪器上错误分配的轴的问题,也可以在新文件中更改它。之后,只需将新的.json文件用于您的ndisplay配置,它应该可以正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64902424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档