【问题标题】:General considerations for NUI/touch interfaceNUI/触摸界面的一般注意事项
【发布时间】:2011-09-18 17:05:26
【问题描述】:

在过去的几个月里,我一直在研究为各种软件音乐合成器开发基于 Kinect 的多点触控界面。

我提出的总体策略是创建对象,以编程方式或(如果可能)算法方式来表示软合成器的各种控制。这些应该有;

  • X 位置
  • Y 位置
  • 身高
  • 宽度
  • MIDI 输出通道
  • MIDI 数据缩放器(将 x-y 坐标转换为 midi 值)

我为算法创建考虑过的 2 个策略是 XML 描述和以某种方式将内容从屏幕上拉下来(即,给定一个正在运行的程序,找到所有控件的 xycoords)。我不知道如何进行第二个,这就是为什么我用这种特定的技术语言来表达它;)。我可以做一些中间解决方案,比如使用鼠标点击控件的角来生成一个 xml 文件。我可以做的另一件事,我在 Flash 应用程序中经常看到的,是将屏幕大小放入一个变量中,并使用数学来根据屏幕大小构建所有界面对象。请注意,不一定要使对象与屏幕控件的大小相同,或者代表所有屏幕对象(有些只是指示器,而不是交互式控件)

其他注意事项;

给定(目前)两组 X/Y 坐标作为输入(左手和右手),使用它们的最佳选择是什么?我的第一直觉是/是创建某种焦点测试,如果 x/y 坐标落在接口对象的范围内,则该对象变为活动状态,然后如果它们在一段时间内超出其他一些较小的范围,则变为非活动状态。我找到的廉价解决方案是使用左手作为指针/选择器,右手作为控制器,但似乎我可以做更多。我有一些手势解决方案(隐藏马尔可夫链)我可以搞砸。确切地说,并不是说他们很容易开始工作,但如果有足够的激励,我可以看到自己在做的事情。

所以,总而言之,问题是

  • 表示界面(这是必需的,因为默认界面总是需要鼠标输入)
  • 选择一个控件
  • 使用两组 x/y 坐标(旋转/连续控制器)对其进行操作,或者在切换的情况下,最好使用手势来切换它而不给予/关注焦点。

非常感谢任何 cmets,尤其是来自曾/正在从事多点触控 io/NUI 工作的人。现有项目的链接和/或一些好的阅读材料(书籍、网站等)会很有帮助。

【问题讨论】:

标签: kinect multi-touch nui


【解决方案1】:

哇,这里有很多东西。在 Microsoft 期间,我从事过很多 NUI 方面的工作,所以让我们看看我们能做些什么......

但首先,我需要解决这个问题:你说“基于 Kinect 的多点触控”。那是错误的。 Kinect 本质上与触摸无关(这就是您面临“选择控件”挑战的原因)。触摸、身体跟踪和鼠标所需的 UI 考虑类型完全不同。例如,在触摸 UI 中,您必须非常小心地根据屏幕尺寸/分辨率/DPI 调整大小……无论屏幕如何,手指始终具有相同的物理尺寸,并且人们具有相同程度的物理精度,因此您想要您的按钮和类似控件始终具有大致相同的物理尺寸。研究发现 3/4 英寸是触摸屏按钮的最佳位置。这对于 Kinect 来说并不是什么大问题,因为您没有直接触摸任何东西 - 精度不是由手指大小决定的,而是由传感器精度和用户精确控制挑剔和滞后的虚拟光标的能力决定的。

如果您花时间玩 Kinect 游戏,很快就会发现有 4 种交互范例。 1) 基于姿势的命令。用户敲击并保持姿势以调用某些应用程序范围或命令(通常会调出菜单) 2) 悬停按钮。用户将虚拟光标移动到按钮上并静止一段时间以选择按钮 3) 基于滑动的导航和选择。用户向一个方向挥手以滚动和列出,向另一个方向挥手以从列表中选择 4) 语音命令。用户只需说出一个命令。

业余爱好者也尝试过其他类似鼠标的想法(在实际游戏中还没有见过),但坦率地说,它们很糟糕:1)用一只手做光标,另一只手“点击”光标所在的位置或 2 ) 使用手的z坐标来判断是否“点击”

我不清楚您是否在询问如何使一些现有的鼠标小部件与 Kinect 一起使用。如果是这样,网络上有一些项目将向您展示如何使用 Kinect 输入控制鼠标,但这很蹩脚。这听起来可能很酷,但您实际上并没有充分利用该设备的优势。

如果我正在构建一个音乐合成器,我会专注于方法 #3 - 滑动。舞蹈中心之类的。在屏幕的左侧显示您的 MIDI 控制器列表,并带有一些小的视觉指示它们的状态。让用户滑动左手滚动并从该列表中选择一个控制器。屏幕右侧显示您如何在用户身体前方的某个平面内跟踪用户的右手。现在,您可以让他们同时使用两只手,即时提供关于如何解读每只手的视觉反馈,而不要求它们非常精确。

ps...我还想对 Josh Blake 即将出版的 NUI 书大喊一声。这是好东西。如果你真的想掌握这方面的知识,去订购一份吧:)http://www.manning.com/blake/

【讨论】:

  • Robert - 非常感谢您的回答,很高兴看到一位前微软人员加入。首先,重新 kinect 与多点触控。不久前,我开始尝试使用各种 blob 跟踪解决方案,但后来放弃了,因为当照明条件以可以想象的最小幅度变化时,系统响应速度会变慢。我进入 kinect 是因为它在内部处理 blob 跟踪并输出一个或多个 x/y 光标坐标。我发现您提到的分辨率问题(如果我们谈论的是同一件事)仍然适用于 kinect,因为显示分辨率和界面尺寸不同。
  • 重新鼠标,我正在使用的中间件(primesense nite)基本上在手部模式下输出 2 个光标以及基于手势的单击(将您的手“推向”屏幕)。如果我愿意,我可以使用所有的关节(它输出 10 个左右,膝盖、臀部等),但我还没有感觉。重新刷一下,这是我自己能想到的最好的方法。我希望其他人有更好的想法。
  • 这是一个我认为“更好”的例子 - anythinghonest.com/amos。它以直观的方式使用新技术(本例中为 ipad)的所有可用功能,同时提供深度控制。我可能会为了我的东西偷它的一部分。再次感谢您的帮助。乔
  • 我也知道那本书 - 看起来很糟糕,必须拿起它。
猜你喜欢
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多