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

如何在HoloLens 2的2D UWP应用中使用C#获取眼动注视点的2D坐标

HoloLens 2 2D UWP应用眼动注视交互实现问题

官方文档指出,在2D UWP应用中:

当用户注视某物体或用动作控制器指向时,会触发触摸悬停事件。该事件包含的PointerPoint的PointerType为Touch,且IsInContact为false。

按照文档描述,HoloLens 2的眼动注视数据会自动映射到2D应用窗口,可通过PointerMovedEvent等事件获取。但实测发现,作为触摸悬停事件传入应用的既不是眼动注视也不是头部注视,而是HoloLens 2通过手部识别生成的指尖指向射线,仅当用户指向3D空间中的2D应用窗口框架时才会触发。如果有开发者确认眼动注视确实可映射到2D UWP应用窗口内并获取,欢迎告知。

第二种实现方案是调用SpatialPointPose API完成需求,目前已实现两个核心步骤:

  • 应用启动时获取HoloLens初始位置,保留该位置的静态参考帧,代码如下:
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
    if (EyesPose.IsSupported() == true)
    {
        var ret = await EyesPose.RequestAccessAsync();
        originLocator = SpatialLocator.GetDefault(); 
        originRefFrame = originLocator.CreateStationaryFrameOfReferenceAtCurrentLocation();
        coordinateSystem = originRefFrame.CoordinateSystem;
    }
    gazeTimer.Start();
}
  • 通过该参考帧获取坐标系统,再通过调度定时器传入感知时间戳获取SpatialPointPose对象,进而提取眼动注视的起点和方向数据,在XAML的TextBlock中实时更新显示,代码如下:
private void GazeTimer_Tick(object sender, object e)
{
    timestamp = PerceptionTimestampHelper.FromHistoricalTargetTime(DateTime.Now);
    spPose = SpatialPointerPose.TryGetAtTimestamp(coordinateSystem, timestamp);

    if (spPose.Eyes != null && spPose.Eyes.IsCalibrationValid)
    {
        if (spPose.Eyes.Gaze != null)
        {
            OriginXtextBlock.Text = spPose.Eyes.Gaze.Value.Origin.X.ToString();
            OriginYtextBlock.Text = spPose.Eyes.Gaze.Value.Origin.Y.ToString();
            OriginZtextBlock.Text = spPose.Eyes.Gaze.Value.Origin.Z.ToString();
            DirectionXtextBlock.Text = spPose.Eyes.Gaze.Value.Direction.X.ToString();
            DirectionYtextBlock.Text = spPose.Eyes.Gaze.Value.Direction.Y.ToString();
            DirectionZtextBlock.Text = spPose.Eyes.Gaze.Value.Direction.Z.ToString();
        }
    }
}

目前遇到的核心卡点:无法获取2D UWP应用窗口框架在3D空间中的包围盒位置,也没有找到应用窗口像素分辨率与该框架的映射规则,因此无法计算眼动注视射线与2D应用窗口相交点对应的屏幕x、y坐标。

最终需求:实现和官方文档描述一致的眼动注视交互效果(目前该效果仅对手部识别的指尖指向生效)。如果眼动数据无法通过指针事件暴露,也可使用SpatialPointPose API,只要能解决获取2D应用窗口位置、计算注视射线相交的屏幕坐标的问题即可。


内容的提问来源于stack exchange,提问作者HoloSheep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:15:01