HoloLens 2前置相机2D凝视坐标计算及聚散距离获取失败问题问询
HoloLens 2前置相机2D凝视坐标计算及聚散距离获取失败问题问询
大家好,我正在基于HoloLens 2开发凝视坐标相关功能,当前遇到了一些卡壳的问题,想请教下各位大佬:
基础信息
- 设备:HoloLens 2,使用前置相机
- 已有输入数据:用户的凝视原点(Gaze origin)、凝视方向(gaze direction)、相机内参
- 期望输出:前置相机投影平面上的2D凝视坐标
核心需求与初始思路
我的目标是实时获取前置相机投影平面上的2D凝视坐标。一开始我在Unity场景里创建了匹配物理前置相机内参的虚拟相机,打算通过凝视原点+方向发射射线,找到和虚拟相机投影平面的交点。但这里遇到了难题:我不需要检测特定物体的凝视,而是要输出任意时刻的凝视坐标,所以不确定该用什么深度/距离来计算这个交点。
当前尝试的方案与问题
后来我转向使用Unity的Extended Eye Tracking(EET)SDK,思路是:
- 获取聚散点(vergence point)
- 将这个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
相关产品推荐
相关产品推荐

