You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HoloLens 2前置相机2D凝视坐标计算及聚散距离获取失败问题问询

HoloLens 2前置相机2D凝视坐标计算及聚散距离获取失败问题问询

大家好,我正在基于HoloLens 2开发凝视坐标相关功能,当前遇到了一些卡壳的问题,想请教下各位大佬:

基础信息

  • 设备:HoloLens 2,使用前置相机
  • 已有输入数据:用户的凝视原点(Gaze origin)、凝视方向(gaze direction)、相机内参
  • 期望输出:前置相机投影平面上的2D凝视坐标

核心需求与初始思路

我的目标是实时获取前置相机投影平面上的2D凝视坐标。一开始我在Unity场景里创建了匹配物理前置相机内参的虚拟相机,打算通过凝视原点+方向发射射线,找到和虚拟相机投影平面的交点。但这里遇到了难题:我不需要检测特定物体的凝视,而是要输出任意时刻的凝视坐标,所以不确定该用什么深度/距离来计算这个交点。

当前尝试的方案与问题

后来我转向使用Unity的Extended Eye Tracking(EET)SDK,思路是:

  1. 获取聚散点(vergence point)
  2. 将这个3D点转换为虚拟相机的屏幕空间坐标

但现在卡在了聚散距离的获取上:TryGetVergenceDistance()方法始终返回false,拿不到有效的聚散距离,不过凝视方向和凝视原点的数据都是正常可用的。

我获取凝视数据的核心代码如下:

var combinedGazeReadingInWorldSpace = extendedEyeGazeDataProvider.GetWorldSpaceGazeReading(ExtendedEyeGazeDataProvider.GazeType.Combined);

为了获取聚散距离,我还修改了ExtendedEyeGazeDataProvider脚本,在GazeReading类中新增了聚散距离字段,并在GetWorldSpaceGazeReading方法里尝试赋值:

public class GazeReading
{
    public Vector3 EyePosition;
    public Vector3 GazeDirection;
    // 新增:聚散距离字段
    public float VergenceDistance;

    public GazeReading() { }

    public GazeReading(Vector3 position, Vector3 direction)
    {
        EyePosition = position;
        GazeDirection = direction;
    }
}

public GazeReading GetWorldSpaceGazeReading(GazeType gazeType, DateTime timestamp)
{
    // 原有业务逻辑省略...
    
    // 新增:尝试获取聚散距离并赋值
    bool vd_valid = _eyeGazeTrackerReading.TryGetVergenceDistance(out float vd);
    _gazeReading.VergenceDistance = vd_valid ? vd : 1;
    return _gazeReading;
}

后续发现的线索

我测试后发现_eyeGazeTracker.IsVergenceDistanceSupported返回的是false,看起来HoloLens 2可能不支持聚散距离?想请各位帮忙确认这个情况。另外如果确实不支持的话,有没有其他方法可以实现我最初的目标——计算前置相机投影平面上的2D凝视坐标?

备注:内容来源于stack exchange,提问作者anjelomerte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 06:17:58