问题描述
我想在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变得非常落后并且崩溃了
任何建议如何解决此问题?
解决方法
HoloLens具有有限的处理能力,并且每帧都不能接受Texture.Apply()吗?
如Unity文档中所述,Apply
是一个潜在的昂贵操作,因此您需要在Apply
调用之间更改尽可能多的像素。在DemoVisualizer中,它使用的解决方案是EyeTrackingTarget组件提供的dwellTimeInSec
属性,该属性定义用户需要持续观察目标以通过驻留激活进行选择的持续时间(以秒为单位)值默认为0.8s。这样可以避免过度使用Apply方法。
因此,您可以参考EyeTrackingTarget的这种做法来提高混合现实应用程序获得的表现不佳的帧速率。