在 HoloLens 2 中用手在平面上绘制

Posted

技术标签:

【中文标题】在 HoloLens 2 中用手在平面上绘制【英文标题】:Draw over plane using hand in HoloLens2 【发布时间】:2021-02-13 16:34:33 【问题描述】:

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

所以我们有一个平面,当我将手移到这个平面上时,我手下方的点应该是彩色的。 如何实现这样的功能,记住 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 非常滞后和崩溃

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

【问题讨论】:

【参考方案1】:

HoloLens 处理能力有限,每帧调用 Texture.Apply() 是不可接受的?

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

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

【讨论】:

这很聪明。谢谢推荐,一定会用!

以上是关于在 HoloLens 2 中用手在平面上绘制的主要内容,如果未能解决你的问题,请参考以下文章

绘制平面上的多边形

如何使用OpenGL着色器在平面上绘制没有透视的纹理?

CoreGraphics - 如何在平面上一个一个地绘制矩形?

python如何绘制一个三维空间下的平面?

通过3D表面绘制2D平面

元宇宙里的手势交互地表最强的手势交互原理剖析(HoloLens 2)上