在 HoloLens2 中用手绘制平面

Draw over plane using hand in HoloLens2

我想在 HoloLens2 应用程序上实现一项功能,它允许用户在用户触摸的每个部分的特定表面上 draw/paint。

所以我们有一个平面,当我将手移到这个平面上时,我手下方的点应该是彩色的。 我怎样才能实现这样的功能,记住,HoloLens 的处理能力有限,每帧调用 Texture.Apply() 是不可接受的?

我试过采用script from Eye tracking Heat map demo scene来代替手摸,但是没有成功。

我变了

        private void Start()
        {
            if (EyeTarget != null)
            {
                EyeTarget.WhileLookingAtTarget.AddListener(OnLookAt);
            }
        }

        public void OnLookAt()
        {
            if (UseLiveInputStream && (EyeTarget != null) && (EyeTarget.IsLookedAt))
            {
                DrawAtThisHitPos(EyeTrackingTarget.LookedAtPoint);
            }
        }

    public void OnTouchUpdated(HandTrackingInputEventData eventData)
    {
        DrawAtThisHitPos(eventData.InputData);
    }

并使用了 IMixedRealityTouchHandler。但是 HoloLens 非常滞后并崩溃

有什么解决这个问题的建议吗?

HoloLens has limited processing power and calling Texture.Apply() every frame is unacceptable?

正如 Unity 文档中所说,Apply 是一项可能代价高昂的操作,因此您需要在 Apply 调用之间更改尽可能多的像素。在 DemoVisualizer 中,它使用的解决方案是 EyeTrackingTarget 组件提供的 dwellTimeInSec 属性,它定义了用户需要持续查看目标的持续时间(以秒为单位)到 select它通过驻留激活,持续时间值默认为 0.8s。它避免了过度使用 Apply 方法。

因此,您可以参考 EyeTrackingTarget 的这种做法来改善您的混合现实应用程序帧率不佳的情况。