一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用混合现实系统在虚拟三维空间中管理和显示网页的制作方法

2021-11-27 02:15:00 来源:中国专利 TAG:

用混合现实系统在虚拟三维空间中管理和显示网页
1.版权声明
2.本专利文件的公开的一部分包含受版权保护的材料。版权所有者不反对任何人对专利文件或专利公开的传真复制,因为专利文件或专利公开出现在专利商标局的专利文件或记录中,但除此之外保留所有版权。


背景技术:

3.在现代计算时代,互联网通过互联网协议套件向世界范围内的设备提供海量资源。例如,万维网(或简称web)通过超链接和统一资源定位符(url)来提供互连的文档、服务、资源等,以使得用户可以使用网络浏览器来查看网页、访问网络资源等。
4.通常在二维(2d)的固定窗口中显示网页。网页、网络资源等的这种平面表示对于网站设计等施加了限制,并因此提供有限的用户体验和实用性。一些实体已经设想并创建了所谓的三维(3d)浏览器,诸如微软的surfcube、mootools的3dbrowser(或3db)等,它们在计算机显示屏上呈现一些有限网页的透视图。尽管如此,这些所谓的“3d浏览器”在二维显示屏上以透视图来渲染内容,因此,所渲染的内容仅表现为具有一些三维效果,但透视图仍在平面图中呈现。因此,这些3d浏览器并没有真正解决、减轻或缓和传统2d网页所施加的限制。一些传统技术允许浏览器在平面内旋转。例如,这些传统技术可以将浏览器窗口以及在其中打开的所有网页相对于浏览器的平面视图的法线方向来旋转。尽管如此,这些传统技术不仅限于二维显示,而且还限于旋转整个浏览器窗口(以及因此被打开的网页),因此,缺乏以平面内和平面外方式单独旋转每个网页和以平面内和平面外两种方式旋转每个网页的能力。
5.现代计算和显示技术已经促进了用于所谓“虚拟现实”(vr)、“增强现实”(ar)体验、和/或“混合现实”体验(以下统称为“混合现实”和/或“mr”)的系统的发展,其中数字复制的图像或其部分以它们看起来真实或可能被感知为真实的方式被呈现给用户。vr场景通常涉及数字或虚拟图像信息的呈现,而对于其他实际的现实世界视觉输入不透明,而ar或mr场景通常涉及数字或虚拟图像信息的呈现,作为对用户周围的现实世界的可视化的增强,以使得数字或虚拟图像(例如,虚拟内容)可以看起来是现实世界的一部分。然而,mr可以以上下文有意义的方式来集成虚拟内容,而ar不可以。
6.混合现实技术的应用已经从例如游戏、军事训练、基于模拟的训练等扩展到生产力和内容创建和管理。混合现实系统能够创建看起来真实或被感知为真实的虚拟对象。这种能力在被应用于互联网技术时可以进一步扩展并增强互联网的能力以及用户体验,以使得使用网络资源不再受网页的平面的二维表示的限制。
7.因此,需要用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的方法、系统和计算机程序产品。


技术实现要素:

8.在一个或多个实施例中公开了用于用混合现实系统在三维虚拟空间中管理和显
示网页和网络资源的(一个或多个)方法、(一个或多个)系统和(一个或多个)制品。一些实施例针对用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的方法。
9.在一些实施例中,这些技术接收用于网页或用于该网页的网页面板的3d变换的输入。响应于该输入,耦合到扩展现实系统的处理器的浏览器引擎至少部分地基于网页或网页面板的3d变换,确定用于网页或网页面板的3d变换数据,其中,3d变换包括网页或网页面板在虚拟3d空间中的3d位置、旋转或缩放(scale)的变化。宇宙浏览器(universe browser)引擎可以至少部分地基于3d变换数据来在虚拟3d空间中呈现网页的内容。
10.在这些实施例中的一些实施例中,浏览器引擎还识别要在虚拟3d空间中被显示的网页,其中,虚拟3d空间是或者包括棱镜。浏览器引擎还将3d变换数据存储在浏览器引擎可访问的非暂时性计算机可读介质中。3d变换数据可以从浏览器引擎被发送到宇宙浏览器引擎。
11.在一些实施例中,这些技术还可选地从网页或托管网页的网站接收用于网页的3d变换的输入,其中,网页的边界受可配置为在虚拟3d空间中被显示或抑制的网络浏览器的限制。可替代地、可选地,从用户接收用于网页的3d变换的输入,其中,网页的边界受可配置为在虚拟3d空间中被显示或抑制的网络浏览器的限制。附加地或替代地,可以从网页的代码识别用于网页或网页面板的3d变换的输入,其中,网页的开发者限制将要由浏览器引擎显示的网页的3d位置、旋转或缩放。
12.附加地或替代地,3d变换数据可以从浏览器引擎被发送到宇宙浏览器引擎;并且可以在宇宙浏览器引擎处接收网页或网页面板的3d位置、旋转或缩放的变化。在前面的一些实施例中,宇宙浏览器引擎还可以将3d变换数据更新为更新后的3d变换数据,并将浏览器引擎可访问的3d变换数据与更新后的3d变换数据同步。
13.部分或全部基于一个或多个行为类型,可以在由扩展现实系统针对网页创建的虚拟3d空间中识别或生成具有三维边界的虚拟三维体积(volume);并且这些技术还初始化浏览器引擎并确定浏览器引擎的唯一标识符。然后,可以向宇宙浏览器引擎注册用于浏览器引擎的监听器实例。
14.宇宙浏览器引擎还可以将虚拟三维体积与监听器实例相关联。虚拟三维体积也可以被分配给浏览器引擎;然后,可以通过使用至少场景图结构来在虚拟3d空间中定位或放置虚拟三维体积。
15.一些实施例接收指示用户对网页内容感兴趣的第一用户输入。响应于第一用户输入,至少可以执行浏览器引擎以生成内容;可以在虚拟三维空间中确定用于将内容渲染到其中的虚拟三维体积。在这些实施例中的一些实施例中,可以接收指示网页或网页面板的3d变换的第二用户输入,并且可以至少部分地基于第二用户输入,将内容渲染到虚拟三维体积中。
16.附加地或替代地,可以针对网页来识别变换树结构和变换树结构中的节点;可以确定该节点在变换树结构中是否具有父节点;可以从浏览器引擎接收用于网页或网页面板的3d变换数据;并且可以从宇宙浏览器引擎接收用于网页的3d位置或旋转输入。
17.在这些实施例中的一些实施例中,宇宙浏览器引擎可以至少部分地基于3d位置、旋转或缩放输入来确定用于网页或网页面板的更新后的3d位置、旋转或缩放;以及将浏览器引擎可访问的3d位置、旋转或缩放数据与更新后的3d位置、旋转或缩放数据同步。
18.为了确定更新后的3d位置、旋转或缩放数据,可以识别网页的父网页的一个或多个变换;还可以至少部分地基于3d位置、旋转或缩放输入,识别用于网页的一个或多个变换特性;并且可以识别用于网页的3d位置、旋转或缩放输入。
19.在前面的一些实施例中,这些技术至少部分地基于以下中的一个或多个来确定用于网页或网页面板的变换集:3d位置、旋转或缩放输入,网页或网页面板的父网页的一个或多个变换,或者用于网页或网页面板的一个或多个变换特性。可以通过将变换集应用于网页或网页面板来确定更新后的3d位置、旋转或缩放数据。在一些实施例中,3d变换被限于仅修改网页或网页面板的定向。
20.一些实施例针对可被调用以执行本文公开的任何一种方法、进程或子进程的硬件系统。在一些实施例中,硬件系统可以包括具有至少一个处理器或至少一个处理器核的混合现实系统,该至少一个处理器或至少一个处理器核执行一个或多个执行线程以执行本文公开的任何一种方法、进程或子进程。硬件系统还可以包括一种或多种形式的非暂时性机器可读存储介质或设备,以临时或持久地存储各种类型的数据或信息。硬件系统的一些示例性模块或组件可以在下面的系统架构概述部分中找到。
21.一些实施例针对一种制品,其包括在其上存储有指令序列的非暂时性机器可访问存储介质,指令序列在由至少一个处理器或至少一个处理器核执行时使得至少一个处理器或至少一个处理器核执行本文公开的任何一种方法、进程或子进程。一些示例性形式的非暂时性机器可读存储介质也可以在下面的系统架构概述部分中找到。
附图说明
22.附图图示了本发明的各种实施例的设计和效用。应当注意,这些附图并非按比例绘制,并且在整个附图中,相似结构或功能的元件由相似的附图标记表示。为了更好地理解如何获得本发明的各种实施例的上述和其他优点和目的,将通过参考本发明的具体实施例来提供以上简要描述的本发明的更详细描述,在附图中图示了这些具体实施例。将理解,这些附图仅描绘了本发明的典型实施例,并且因此不被认为是对其范围的限制,本发明将通过使用附图以附加的具体性和细节来进行描述和解释,其中:
23.图1a图示了在一个或多个实施例中的简化系统的高级框图,该简化系统与网站交互以用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源。
24.图1b图示了在一个或多个实施例中的简化系统的另一个高级框图,该简化系统与网站交互以用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源。
25.图1c

1e图示了在一个或多个实施例中的在用混合现实系统在三维虚拟空间中管理和显示网页和网络资源中使用的示例浏览器引擎和宇宙浏览器引擎的更详细的框图。
26.图1f图示了一个或多个实施例中的宇宙浏览器棱镜的示例。
27.图1g

图1i图示了在一些实施例中的用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的一些简化示例的投影视图。
28.图1j

图1l图示了用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的三个简化示例。
29.图1m图示了在一个或多个实施例中的用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的示例用户物理环境和系统架构。
30.图1n图示了在一个或多个实施例中用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的系统架构。
31.图1o图示了在一个或多个实施例中的棱镜的示例。
32.图1p图示了在一个或多个实施例中的用于显示网页并将网页面板的位置和/或旋转数据重置为默认值的初始化浏览器的示例。
33.图1q图示了在一个或多个实施例中的用get请求来确定网页面板的位置和/或旋转数据的示例。
34.图1r图示了在一个或多个实施例中的用set请求来确定网页面板的位置和/或旋转数据的示例。
35.图1s图示了在一个或多个实施例中的简化系统的另一个高级框图,该简化系统与网站交互以用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源。
36.图1t图示了在一个或多个实施例中的简化系统的另一个高级框图,该简化系统与网站交互以用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源。
37.图1u

图1w图示了在一个或多个实施例中的在用混合现实系统在三维虚拟空间中管理和显示网页和网络资源中使用的示例浏览器引擎和宇宙浏览器引擎的各种详细框图。
38.图1x图示了在一个或多个实施例中的用set请求来确定网页面板的定向数据的示例。
39.图1y图示了在一些实施例中的用于在虚拟3d空间中的网页面板的3d定向更新的示例流程。
40.图1z图示了用于从宇宙浏览器引擎到浏览器引擎的网页变换更新的示例流程。
41.图1aa图示了一些实施例中的在用于在虚拟3d空间(例如,棱镜)中的网页面板的3d定向更新的示例流程中的宇宙浏览器引擎(126y)的一部分。
42.图1ab

图1ac图示了在一些实施例中的用于事件分派流程的示例高级流程图。
43.图2a图示了在一个或多个实施例中的用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的过程的高级框图。
44.图2b图示了在一个或多个实施例中的用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的过程的更详细框图。
45.图2c图示了在一个或多个实施例中的用于创建宇宙棱镜的高级框图,该宇宙棱镜可被用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源。
46.图2d图示了根据一些实施例的用于在宇宙浏览器棱镜中打开和放置网页的高级框图。
47.图2e图示了在一个或多个实施例中的用于在宇宙浏览器棱镜中变换软件对象的高级框图。
48.图2f图示了根据一些实施例的关于在图2e中图示的框图的一部分的更多细节。
49.图2g

图2i图示了在一些实施例中的各种变换树和组树。
50.图2j图示了在一个或多个实施例中的用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的过程的高级框图。
51.图2k图示了在一个或多个实施例中的用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的过程的更详细的框图。
52.图2l图示了在一个或多个实施例中的用于在宇宙浏览器棱镜中变换软件对象的高级框图。
53.图2m图示了根据一些实施例的关于在图2l中图示的框图的一部分的更多细节。
54.图2n图示了一些实施例中的示例渲染进程和示例浏览器过程的简化高级架构的架构图。
55.图3图示了在其上可以实现用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的方法的计算机化系统。
具体实施方式
56.在以下描述中,阐述了某些具体细节以便提供对各种公开实施例的透彻理解。然而,相关领域的技术人员将认识到,可以在没有这些具体细节中的一个或多个的情况下或者用其他方法、组件、材料等来实践实施例。在其他情况下,没有详细示出或描述与计算机系统、服务器计算机和/或通信网络相关联的公知结构,以避免不必要地模糊实施例的描述。
57.应当注意,除非上下文另有要求,否则在整个说明书和随后的权利要求书中,词语“包括”及其变体(诸如“包括有”和“包括了”)应在开放、包容的意义上进行解释,即“包括但不限于”。
58.还需要注意的是,在本说明书全文中提及“一个实施例”或“实施例”意味着在至少一个实施例中包括结合实施例描述的特定特征、结构或特性。因此,在本说明书各处出现的短语“在一个实施例中”或“在实施例中”不一定都指的是同一实施例。此外,可以在一个或多个实施例中以任何合适的方式来组合特定特征、结构或特性。此外,如在本说明书和所附权利要求书中所使用的,单数形式“一”、“一个”和“该”包括复数形式,除非内容另有明确规定。还应注意,除非内容另有明确规定,否则术语“或”通常按包括“和/或”的含义使用。
59.各种技术在各种实施例中针对用虚拟现实(“vr”)、增强现实(“ar”)、混合现实(“mr”)、和/或扩展现实(“xr”)系统(被统称为“xr系统”)在三维虚拟空间中管理和显示网页和网络资源。
60.在这些各种实施例中,vr系统被设计并配置为在虚拟现实或计算机模拟的现实中提供沉浸式体验。虚拟现实系统采用例如使用现实头戴设备来生成复制现实环境或创建虚构世界的模拟但逼真的声音、图像和其他感觉的计算机技术。ar系统被设计并配置为提供物理的现实世界环境的实时直接或间接的视图,视图的元素通过计算机生成的感觉输入(诸如声音、视频、图形)或传感器数据(例如,gps数据等)来被增强(或补充)。由于增强现实存在于物理的现实世界环境之上,因此,本文描述的ar系统提供与用户在其正常生活中被给予的一样多的自由。本文描述的mr系统提供混合现实并融合现实世界和虚拟世界以产生新的(一个或多个)环境和可视化,其中物理对象和数字对象共存并实时或接近实时地(例如,考虑到信号传输、处理时间等方面的时间差)进行交互。本文提供的mr系统在现实空间内提供新的图像,以使得新的图像至少在某种程度上能够与物理世界中的真实事物进行交互。所描述的mr系统的特性之一是合成内容和现实世界内容能够实时或接近实时地(例如,考虑到信号传输、处理过程等方面的时间差)对彼此作出反应。在本文提供的扩展现实或xr系统提供了由计算机技术和设备(例如,可穿戴电子设备等)生成的所有或几乎所有现实和
虚拟组合的环境和人机交互。本文提供的扩展现实系统被设计和/或配置为提供所有或几乎所有描述形式,如ar系统、vr系统和mr系统。在一些实施例中,术语xr被用作将所有三种现实(ar、vr、mr)集中在一个术语下的伞。
61.在一些实施例中,系统至少包括混合现实装置、浏览器引擎和宇宙浏览器引擎,并与网站交互。在这些实施例中的一些实施例中,网站的开发者可以将与本文描述的一个或多个实施例相关的应用编程接口(api)集合并入网站的代码中;并且该api集合与浏览器进行通信以获得并设置网页的位置和旋转。开发者可以在开发者想要最终用户通过该api集合感知的网页的三维空间中设置位置和旋转数据(例如,x、y和z坐标)。
62.在一些其他实施例中,上述api集合中的一些或所有api可以被托管在浏览器引擎和/或宇宙浏览器引擎(其是将网页的图像数据作为虚拟内容投影到用户的(一只或两只)眼睛的混合现实系统的一部分)中或被该浏览器引擎和/或宇宙浏览器引擎在本地引用。该api集合可以例如包括设置并获得用于网页的三维位置数据的第一api和设置并获得用于网页的三维旋转数据的第二api。需要注意的是,术语“网页”和“网页面板”可在本技术中互换使用,尽管严格地说,网页面板包括浏览器窗口中的用于网页或其一部分显示其内容的二维和/或三维区域。
63.示例性用例包括混合现实系统的用户打开浏览器并在(一个或多个)指定字段中输入网站的url或搜索标准的场景。本文描述的各种实施例允许宇宙浏览器引擎与浏览器引擎结合起作用,以基于用于特定网页的html代码而在虚拟三维空间中调整单个网页的旋转和/或位置。
64.更特别地,在前述示例中,当用户在用户的混合现实系统中启动浏览器时,浏览器充当网站与宇宙引擎之间的中介。在一些实施例中,浏览器引擎通过使用所存储的位置和旋转数据来更新用于所请求的网页的位置和旋转数据(例如,x、y和z坐标)。在这些实施例中的一些实施例中,宇宙浏览器引擎可以将(用于显示网页的)网页面板的位置和旋转数据存储在浏览器引擎中。在使用chromium的blink作为浏览器引擎的示例中,宇宙浏览器引擎可以将位置和旋转数据存储在renderwidget类中。
65.使用浏览器引擎存储位置和旋转数据的目的之一是:响应于来自网站的对定位和/或旋转网页的请求,浏览器可以将该最新缓存的位置和旋转数据快速地传递到网站,而没有由于例如从宇宙浏览器获得位置和/或旋转数据的进一步延迟。renderwidget是chromium项目、webkit等中的一个类,并在混合现实显示中实现抽象界面(例如,虚拟三维空间中的二维窗口或三维体积)以接收输入事件并绘制内容或将内容渲染到其中。
66.在网页的开发者已经设置了用于网页的位置和旋转数据的一些实施例中,浏览器引擎可以设置用于要被渲染的网页的位置和旋转数据,并将位置和旋转数据传递到宇宙浏览器引擎,该宇宙浏览器引擎是混合现实系统的一部分并与用户进行接口。浏览器引擎和宇宙浏览器引擎可以同步位置和旋转数据。然后,浏览器引擎可以调用函数调用以通过使用位置和旋转数据来渲染网页。
67.在一些实施例中,通过例如操纵与在三维虚拟空间(例如,稍后将更详细描述的棱镜)中显示的网页或网页面板相关联的定位控键(handle)和/或旋转控键来例如重新定位和/或旋转显示中的网页面板或甚至网页,从而用户可以进一步操纵网页面板。在这些实施例中,用户有效地改变网页的位置和/或旋转;并且宇宙浏览器引擎也可以与浏览器引擎同
步新的位置和/或旋转数据。
68.在一些实施例中,混合现实系统可以首先在虚拟三维空间中显示占位符(例如,具有部分或全部边界的实心或半透明的边界框或透明的边界框),然后由浏览器引擎渲染期望的网页。在一些其他实施例中,可以在完全渲染网页之前,首先在虚拟三维空间中呈现期望的网页的迷你视图。还在一些其他实施例中,在开发者或最终用户进行任何改变以改变网页的位置和/或旋转之前,可以在虚拟三维空间中用三维坐标来完全渲染并显示网页。
69.现在将参考附图来详细描述各种实施例,这些实施例被提供作为本发明的说明性示例以便使本领域技术人员能够实践本发明。值得注意的是,以下的附图和示例并不意味着限制本发明的范围。在本发明的某些要素可以使用已知组件(或方法或过程)部分或完全实现的情况下,将仅描述这种已知组件(或方法或过程)中对于理解本发明所必需的那些部分,并且将省略这种已知组件(或方法或过程)的其他部分的详细描述,以免混淆本发明。进一步地,各种实施例涵盖了本文通过说明所提及组件的当前和未来的已知等同物。
70.图1a图示了在一个或多个实施例中的简化系统的高级框图,该简化系统与网站交互以用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源。更特别地,宇宙浏览器引擎106a可以将网页的位置和旋转数据发送到浏览器引擎104a,以将这种数据存储在浏览器引擎104a中。宇宙浏览器引擎(例如,106a)可以充当类似于2d窗口管理器的3d窗口管理器,2d窗口管理器在膝上型或台式计算机上运行以管理在该膝上型或台式计算机的显示屏上显示的2d窗口。
71.与宇宙浏览器引擎结合工作的宇宙浏览器引擎或应用程序(例如,106a)还经由混合现实系统来管理虚拟内容在用户景观中的生成、放置和显示。当浏览器引擎104a初始化(例如,当用户启动浏览器)以显示网站102a的网页或其中的内容时,在网站被编码以并入api集合(其被编码以既将位置和旋转数据设置到客户端的浏览器,又从客户端浏览器获得位置和旋转数据)时,浏览器102a可以设置将要由浏览器引擎渲染的网页的位置和旋转数据(108a)。
72.在一些实施例中,宇宙浏览器引擎提供3d窗口管理器的功能,并管理(例如,如何和在哪里)要被显示的虚拟内容以及将被更详细描述的棱镜要如何和在哪里针对扩展现实系统生成。例如,宇宙浏览器引擎可以提供持久性功能。作为非限制性示例,被放置在用户的厨房柜台上的实体(例如,软件应用程序或其实例、虚拟对象等)可以出现在厨房柜台上,除非并且直到用户改变该实体的放置。在一些实施例中,用户可以不必在每次打开/关闭系统时或每次用户离开房间并返回时重新启动该实体。在这些实施例中,宇宙浏览器引擎将棱镜信息或数据存储在联结式世界(passable world)中,宇宙浏览器引擎可以在每次用户使用扩展现实系统并在用户的厨房中非常靠近实体应用时重新启动被放置在用户的厨房中的实体。
73.宇宙浏览器引擎还可以维持或改变软件应用程序(或其实例)相对于包括宇宙浏览器引擎的xr系统的用户的状态。例如,应用程序可以自动启动、暂缓/暂停和/或重新启动,而无需任何明确的用户操作。与2d窗口管理器相比,其中需要用户交互以便改变应用程序的操作状态(例如,用户点击关闭按钮)。这方面不同于需要用户交互以便改变应用程序的状态(例如,用户点击应用程序的关闭按钮)的其他窗口管理器。此外,与其他窗口不同,3d棱镜(或者甚至棱镜在其中驻留的3d虚拟空间)可以既是交互式的又是私有的。例如,宇
宙浏览器引擎可以同时能够实现棱镜(或3d虚拟空间)的隐私和交互式特征。相比之下,传统的窗口要么是交互式的,要么是私有的,但不能既是交互式的又是私有的。
74.浏览器引擎通常是网络浏览器的软件组件,其执行诸如将网页的html和/或其他资源变换成在用户的设备(例如,混合现实头戴设备)上的交互式视觉表示之类的任务。以下描述可以参考chromium或基于chromium的浏览器,但也可以考虑其他浏览器(例如,mozilla的firefox、苹果的safari、微软的edge和internet explorer、google的chrome、opera、3d浏览器等);并且这些技术以完全相同的效果应用于与其相应的浏览器引擎对应的不同浏览器(例如,mozilla的gecko,safari的webkit,chrome、基于chromium的浏览器、微软的edge和opera的blink,以及internet explorer的trident等)
75.浏览器引擎104a可以包括任何公开可用的浏览器,诸如上面刚刚提到的浏览器或任何定制浏览器(例如,3d浏览器)。浏览器引擎104a的功能之一是提供包括例如以下的功能:用针对网页的位置和旋转数据来将网页的html文档和其他资源变换成在用户的设备上的交互式视觉表示,使用由网站或由宇宙浏览器引擎106a提供的位置和旋转数据来计算用于视觉表示的图形坐标,绘制或渲染棱镜(或其一部分)等。
76.与本文描述的用于管理和显示网页的一个或多个实施例有关的该api集合可以包括符合便携式操作系统接口(posix)api标准并且独立于平台或操作系统以提供空间计算功能的api。该api集合在如上所述的一些实施例中可以被并入网站的代码中,和/或在一些其他实施例中可以被集成到在混合现实系统上驻留的操作系统或软件应用程序的一部分中。
77.该api集合不仅设置并获得网站102a、浏览器引擎104a、和宇宙浏览器引擎106a之间的位置和旋转数据,而且结合运行层和操作系统与软件应用程序之间(或者更准确地,操作系统服务层与软件应用程序之间)的一个或多个3d引擎起作用。该运行层包括库、应用程序、服务等,并(单独或结合3d引擎)向底层混合现实系统提供高级图形用户界面以及各种计算功能,诸如3d平移和旋转变换、具有材料的3d模型和骨架3d模型动画、2d精灵动画、用于空间计算的高保真空间化文本渲染、2d和声场音频、2d和立体视频、刚体碰撞物理、实时粒子fx、输入事件和触觉控制、手势、语音识别和语音转文本、用于渲染对象、照明、阴影和现实世界遮挡等的实时空间计算技术。
78.例如,该运行层可包括三维平移和旋转变换集,其可被应用于例如在虚拟三维空间中显示的棱镜(稍后将描述)、虚拟对象、浏览器窗口、渲染的网页等,以使得虚拟对象、浏览器窗口、渲染的网页等或其任何属性(例如,显示坐标、尺寸、形状、透视、光照效果等)看起来真实或接近真实或者被用户感知为真实或接近真实。关于这些变换的更多细节稍后将在下文参考图2e至图2i进行描述。
79.返回到图1a,采用api集合,网站102a可以向浏览器引擎104a发送位置和/或旋转请求(112a)。在这种情况下,浏览器引擎104a可以将最新的位置和旋转数据发送到网站(114a)。如上所述,宇宙浏览器引擎106a可以将位置和旋转数据存储在浏览器引擎104a中或用浏览器引擎104a存储(例如,在浏览器引擎104a可访问的高速缓存中),以使得浏览器引擎104a可以响应来自网站102a的这种请求而没有由于例如从宇宙浏览器引擎106a获得这种位置和旋转数据的额外延迟。
80.除了将最新的位置和旋转数据返回(114a)给网站102a之外,浏览器引擎104a可以
将位置和旋转数据单独或连同所渲染的网页一起发送(110a)到宇宙浏览器引擎106a。宇宙浏览器引擎106a部分或全部基于经由110a接收到的位置和旋转数据来创建或识别棱镜(或者其较小的虚拟3d体积);并且宇宙浏览器引擎106a与浏览器引擎(104a)同步位置和旋转数据(116a)。宇宙浏览器引擎106a可以调用浏览器引擎104a以调用它的本机(native)函数、库和/或api(例如,chromium或webkit中的renderwidget、opengl api、opengl es 2.0api等、几乎本机图形层引擎(almost native graphics layer engine)、direct3d api、webgl、gfx api等、或其任何组合),以基于位置和旋转数据来渲染网页的内容以用于在棱镜或其一部分中显示。
81.在一些实施例中,宇宙浏览器引擎可以调用在操作系统堆栈中的操作系统核心和操作系统服务之上运行的一个或多个3d引擎来渲染3d内容。这些一个或多个3d引擎可以包括提供图形处理单元(gpu)的抽象层的商业或公开可用的3d引擎(例如,虚幻引擎4、虚幻引擎3、cryengine v、unity 3d、源引擎、源引擎2等)、用于3d和/或2d图形的任何自定义3d引擎。在这些实施例中的一些实施例中,混合现实系统不需要包含整个3d引擎。相反,混合现实系统可以包含较小的部分,诸如渲染引擎或渲染api、用于模拟物理定律的物理引擎、用于解析和执行脚本(诸如javascript脚本)的脚本引擎、存储器管理模块、和/或线程模块等。在一些实施例中,本文描述的混合现实系统可以调用用于渲染2d内容的渲染器和单独的用于渲染3d图形的渲染器。
82.用户还可以通过混合现实系统来更改在虚拟3d空间中显示的网页的位置和/或旋转。例如,通过抓取分别与定位和旋转所显示的网页、其占位符、或网页的迷你预览版本相关联的软件控键,用户可以自由移动和/或旋转所显示的网页、其占位符、或网页的迷你预览版本。因此,网页的位置和/或旋转数据被修改;并且宇宙浏览器引擎106a还可以与浏览器引擎104a同步(116a)位置和/或旋转数据。一旦如此,浏览器引擎104a则用该修改后的位置和/或旋转数据来替换原始的位置和/或旋转数据。
83.图1b图示了在一个或多个实施例中的简化系统的另一个高级框图,该简化系统与网站交互以用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源。更特别地,图1b图示了一些实施例中的用于网页的浏览器面板102b、浏览器引擎104b、和宇宙浏览器引擎106b之间的交互以及由浏览器102b、浏览器引擎104b和宇宙浏览器引擎106b执行的相应任务和功能。浏览器或网络浏览器是用于访问万维网上的信息的软件应用,其中网络资源(例如,单独的网页、图像、视频等)由统一资源定位符标识,以使网络浏览器能够从网络服务器检索这些网络资源并将它们显示在用户的设备上。浏览器引擎是网络浏览器的软件组件,它执行诸如将网页的html和/或其他资源变换成在用户的设备(例如,混合现实头戴设备)上的交互式视觉表示之类的任务。本文描述的各种实施例利用任何公开或商业可用的浏览器及其相应的引擎,以便开发者和用户通过至少使用前述的api集合、混合现实系统以及软件应用程序和库(例如,宇宙浏览器引擎)来管理和显示互联网内容并利用网络资源。
84.网站可以针对感兴趣的网页或网页的面板设置位置、旋转和/或缩放数据(102b),并且还可以请求当前网页的当前位置、旋转和/或缩放(102b)。在网页的开发者可能期望以包括特定位置、旋转和/或缩放数据的特定方式呈现感兴趣的网页的一些实施例中,网站还可以向浏览器发送这种位置、旋转和/或缩放数据(102b)。
85.在一些实施例中,当启动浏览器以显示来自互联网的内容时,浏览器初始化以渲染并显示网站的网页或其中的内容(104b)。浏览器还可以发送要由浏览器引擎渲染的网页的位置和旋转数据(104b)。例如,当网站被编码为包含前述的api集合(其被编码为既将位置和旋转数据设置到客户端的浏览器又从客户端浏览器获得位置和旋转数据)时,浏览器可以从网站接收该置和旋转数据,并设置用于显示来自网站的内容的网络面板的位置和旋转数据。
86.浏览器可以重置用于网页的网络面板的(一个或多个)变换、位置数据、和/或旋转数据(104b)。例如,浏览器可以将用于网页面板的(一个或多个)3d变换(例如,(一个或多个)3d平移变换、(一个或多个)3d旋转变换、和/或(一个或多个)3d缩放变换)重置成(一个或多个)默认值或(一个或多个)状态。在一个实施例中,(一个或多个)默认值或(一个或多个)状态可以被存储在渲染器(例如,用于webkit和chromium的renderwidget)可访问的非暂时性存储器(例如,高速缓存)中。浏览器可以将来自网站的位置和/或旋转请求中继到它的浏览器引擎(104b)。浏览器引擎充当网站与驻留在混合现实系统中的宇宙浏览器引擎之间的中介。在网页面板的位置和旋转数据被存储在前述的非暂时性存储器中的一些实施例中,浏览器或它的浏览器引擎可以快速响应来自网站的位置和/或旋转请求,而没有由于例如从宇宙浏览器引擎获得这种数据的额外延迟。当网站或浏览器改变数据或其一部分时,浏览器引擎可访问的该位置和旋转数据可以被同步。附加地或替代地,浏览器引擎可访问的该位置和旋转数据可以由浏览器初始化和重置。在一些实施例中,该位置和旋转数据可以通过网站对位置和旋转数据的请求(参见102b)来更新。在浏览器引擎从网站接收位置和/或旋转数据的一些实施例中,浏览器引擎还可以将数据传递给浏览器。
87.浏览器还可以将位置和旋转数据单独或者与所渲染的内容(例如,网页)一起发送到宇宙浏览器引擎(104b)。宇宙浏览器引擎可以在与现实世界3d空间对应的虚拟3d空间中创建具有虚拟边界的3d虚拟体积(例如,棱镜),以用于至少部分地基于来自浏览器引擎的位置和旋转数据来显示所渲染的网页。附加地或替代地,一些实施例可以向用户提供在由混合现实系统创建的虚拟3d空间中操纵所渲染的网页(或内容)的能力。
88.因此,用户可以在虚拟3d空间中移动和/或旋转所渲染的网页,以使得新的变换集需要被应用于所渲染的网页。混合现实系统的操作系统可以包括运行层和3d引擎,以至少部分地基于从浏览器引擎接收的位置和旋转数据来将新的变换集应用于所渲染的网页。在应用了新的变换集之后,宇宙浏览器引擎还可以将新的位置和旋转数据传送回浏览器引擎(在106b),以更新其中的先前的位置和旋转数据。
89.当浏览器初始化所渲染的网页或者当用户操纵所渲染的网页并因此改变位置和/或旋转数据时,浏览器引擎可从宇宙浏览器引擎接收位置和旋转数据(如果可用)(在104b)。因此,浏览器引擎可以用从宇宙浏览器引擎(在104b)接收到并例如在高速缓存中存储的刷新的位置和/或旋转数据来更新被存储在非暂时性存储器(例如,高速缓存)中的位置和/或旋转数据。浏览器引擎还可以设置用于网页面板的位置和旋转数据(在104b)。在网页的开发者已经设置了网页的位置和旋转(例如,开发者已经设置了显示在线棋类游戏的网页的旋转)的示例中,浏览器还可以根据从网站接收的位置和旋转数据来设置网页面板的位置和旋转数据。
90.另外,浏览器引擎可以将位置和旋转数据发送到宇宙浏览器引擎(在104b),以使
得宇宙浏览器引擎可以确定(例如,通过创建新的或从已有的识别)虚拟3d空间(例如,棱镜)以经由混合现实系统呈现所渲染的网页。在向用户提供进一步操纵所渲染的网页的能力的一些实施例中,浏览器引擎可以将所渲染的网页的位置和旋转数据提供给宇宙浏览器引擎,宇宙浏览器引擎进而提供用于用户操纵所渲染的网页的软件控键,并执行对应的(一个或多个)变换以响应用户的操纵。
91.宇宙浏览器引擎还包括操作系统、操作系统服务、运行时应用程序和库的集合、一个或多个3d引擎、以及混合现实系统的应用套件,或者结合它们起作用,以提供用于用户在106b处在虚拟3d空间(例如,一个或多个棱镜)中管理和显示网页和其他内容和/或资源的高级图形用户界面和功能。例如,宇宙浏览器引擎的功能之一是向浏览器引擎提供网页(或其他虚拟内容)的位置和旋转数据(在104b)。宇宙浏览器引擎还与浏览器引擎同步(在106b)最新的位置和/或旋转数据,以使得最新的位置和/或旋转数据可以(从宇宙浏览器引擎)被推送到浏览器引擎或者(由浏览器引擎)从宇宙浏览器引擎拉取。
92.图1c至图1e图示了在一个或多个实施例中的可在用混合现实系统在三维虚拟空间中管理和显示网页和网络资源中使用的示例浏览器引擎和宇宙浏览器引擎的更详细框图。更具体地,图1c图示了在一些实施例中的用于在虚拟3d空间(例如,棱镜)中设置网页面板的3d位置和/或旋转数据的简化伪代码。在这些实施例中,伪代码是基于类似的用于chromium的代码集,但也可以设想用于其他网络浏览器的代码,并且本文描述的技术可以以完全相同的效果来应用。
93.例如,浏览器引擎100c可以在102c执行window.virtualworld.3dposition和/或window.virtualworld.3drotation,以初始化用于在宇宙浏览器引擎中设置网页面板的3d位置和/或旋转数据的进程。例如,部分或全部基于3d位置数据、3d旋转数据、缩放、以及用于2d或3d空间中的2d和3d实体的一个或多个变换,window.virtualworld.3dposition和window.virtualworld.3drotation可以利用例如opengl mathematics(glm)(或者任何其他数学库)来设置和获得网页面板的位置数据(例如,通过伪代码“glm::vec3 old_pos(0.0f)”、“glm::quat rotation(glm::vec3(0.0f))”、“glm::vec3 scale(1.0f)”和“glm::mat4 transform=web_container_

>getcurrentvolumetransform()”)以及旋转数据(例如,通过伪代码“glm::vec3 position(0.0f)”、“glm::quat old_rot(glm::vec3(0.0f))”、“glm::vec3 scale(1.0f)”和“glm::mat4 transform=web_container_

>getcurrentvolumetransform()”)。应注意,在本技术中使用伪代码、编程语言、以及各种类、变量等的名称是为了说明和解释的目的,并且也可以设想和使用服务相同或基本相似的目的的任何其他合适的(一种或多种)编程语言、名称等以用于实现这种目的。
94.浏览器引擎100c还可以在104c处执行virtualworld::set3dposition,以用于设置和获得网页面板的位置数据和/或旋转数据(未示出),其中,virtualworld是blink(用于chromium的浏览器引擎)中用于在处理中的框架的类。应注意,图1c图示了设置并确定位置数据而不是旋转数据的示例,并且可以以与对应代码相同或基本相似的方式进行旋转数据的设置和确定。在一些实施例中,浏览器引擎还可以包括用于驻留在其他渲染器进程中的代理的remotedomwindow类(其不具有文档对象或widget(小组件))。构造virtualworld::3dposition可以使用例如低级图形抽象层,诸如gfx(用于cse20211的简单图形库)或gfx

rs(例如,经由“gfx::point3fpos(x

coordinate,y

coordinate,z

coordinate)”、“gfx::
point3frot(x

rotation,y

rotation,z

rotation)”、gfx::point3f rot=local_frame_client

>getvirtualworldrotation()或gfx::point3f flat_rot{

m_pi_2,0.0f,0.0f}等)以获得并设置位置和/或旋转数据。
95.浏览器引擎100c还可以执行localframeclientimpl::set3dposition(106c)、renderframeimpl:set3dposition(108c),并发送进程间通信(ipc)消息framehostmsg_set3dposition。构造renderframeimpl:set3dposition可以被用于调用renderwidget::set3dposition并发送ipc消息。构造localframeclientimpl::set3dposition是源自c localframeclientimpl.cpp,并且使用例如低级图形抽象层(诸如gfx或gfx

rs)以及位置和旋转数据来设置和获得用于客户端框架的位置和/或旋转。localframeclientimpl::set3dposition可以用以下伪代码来实现以获得并设置网页面板的位置和旋转数据:
[0096][0097][0098]
构造renderframeimpl::set3dposition是源自c renderframeimpl.cpp,并且被配置为基于gfx以及位置和/或旋转数据来调用渲染器(例如,用于基于chromium的浏览器的renderwidget)并将框架传递回浏览器引擎(例如,用于基于chromium的浏览器的blink)。浏览器引擎100c还可以通过在112c处执行renderwidget::set3dposition来调用渲染器,以根据3d位置和旋转数据(例如,由网页的开发者设置的位置和旋转数据)来“绘制”或渲染感兴趣的网页的内容。更特别地,渲染器进程renderwidget可以使用glue接口
(例如,webwidgetdelegate),并在glue接口中实现抽象接口。该抽象接口可以包括例如显示空间中的接收输入事件并将内容渲染到其中的2d窗口或3d体积。在辅助显示项(例如,显示选项列表的具有上/下箭头的选择框、选项卡、弹出窗口、导航命令等)要被渲染的这些实施例中的一些实施例中,浏览器引擎100c还可以执行另一个渲染进程(例如,renderview)以用于这种显示项。
[0099]
在使用chromium或基于chromium的浏览器的一些实施例中,浏览器引擎100c使用它的渲染系统(“视图”)来渲染网页,其中用户界面被构造为负责渲染、布局和事件处理的组件(被称为“视图”)树。组件树中的每个视图有它自己的界限并表示用户界面的不同组件;小组件(本机2d窗口或3d体积)位于这种树的根处。一些实施例用位置和旋转数据来创建虚拟3d空间(或2d窗口),并将虚拟3d空间(或2d窗口)传递到rootview,然后将事件传播到树中。某些显示项可以使用被托管在特殊种类的视图中的操作系统的控件来渲染,该特殊种类的视图知道如何显示本机小组件和调整其尺寸。这些显示项包括例如按钮、表格、单选按钮、复选框、文本字段、其他控件等。关于这种组件树的更多细节将在下面参考图2g至图2i进行描述。
[0100]
浏览器引擎进一步至少部分地基于位置和旋转数据来执行使用“delegate_

>set3dposition(position)”和“delegate_

>set3dposition(position)”的webcontentsimpl::onset3dposition(114c)。浏览器引擎进一步用宇宙浏览器引擎特定接口来执行cefuniversebrowserengineprivatehandler::onset3dwebpageposition(118c),该接口允许cef(chromium嵌入式框架)与宇宙浏览器引擎之间的自定义交互。基于cef的应用可以包括若干组件,诸如初始化cef和运行cef消息循环的入口点、处理进程特定回调(callback)的cefapp派生类、处理浏览器实例特定的回调(例如,用于浏览器使用寿命、上下文菜单、对话框、显示通知、拖动事件、焦点事件、键盘事件等的回调)的cefclient派生类、由cefbrowserhost::createbrowser()创建的一个或多个cefbrowser实例等。
[0101]
浏览器引擎100c还可以执行构造cefbrowserhostimpl::set3dposition(116c)和cefbrowserhostimpl::set3drotation以确定处理程序(例如,具有“cefrefptr<cefuniversebrowserengineprivatehandler>handler=client_

>getuniversebrowserengineprivatehandler()”和“handler

>onsetvirtualwebpageposition(this,position.x(),position.y(),position.z())”,“handler

>onsetvirtualwebpagerotation(this,rotation.x(),rotation.y(),rotation.z())”)。浏览器引擎还可以执行公共函数cefuniversebrowserengineprivatehandler::onset3dwebpageposition和cefuniversebrowserengineprivatehandler::onset3dwebpagerotation以设置网页面板的3d位置和旋转。
[0102]
宇宙浏览器引擎126c可以用从浏览器引擎100c接收到的3d位置和旋转数据来执行clienthandler::onset3dwebpageposition和clienthandler::onset3dwebpagerotation(120c)、browser::onset3dwebpageposition和browser::onset3dwebpagerotation(122c)、以及browserwindow::onset3dwebpageposition和browserwindow::onset3dwebpagerotation(124c)。clienthandler包括在浏览器中运行的事件处理程序,而无需回调到服务器以提供定义规则的手段(例如,可以在浏览器中评估的声明性条件和动作以减少往返延迟或延时)。clienthandler也可以使用glm(opengl mathematics)并委托在虚拟3d空间(例如,棱镜)中设置网页位置和旋转。
[0103]
图1d图示了图1c中的一些前述框之间的通信,以说明如何在浏览器引擎100c处从宇宙浏览器引擎126c获得虚拟3d空间(例如,棱镜)中的3d位置和/或旋转数据。向下的箭头指示执行顺序和/或执行结果的传递;向上的箭头指示值的返回。
[0104]
在这些实施例中,以与上面参考图1c所描述的类似的方式,浏览器引擎100c可以在102c处执行window.virtualworld.3dposition和/或window.virtualworld.3drotation,以初始化用于在宇宙浏览器引擎中设置网页面板的3d位置和/或旋转数据的进程。此外,浏览器引擎100c还可以在104c处执行virtualworld::set3dposition以设置并获得网页面板的位置数据和/或旋转数据(未示出),其中virtualworld是表示平台的xr设备之一的类。应注意,图1d图示了设置并确定位置数据而不是旋转数据的示例,并且可以以与对应的代码相同或基本相似的方式进行旋转数据的设置和确定。
[0105]
与图1c中所图示的浏览器引擎100c不同,图1d中的浏览器引擎100c还可以执行localframeclientimpl::get3dposition(102d)和renderframeimpl:set3dposition(104d)。如同图1c的描述,构造renderframeimpl:get3dposition可以被用于调用renderwidget::get3dposition,并发送(一个或多个)ipc消息和/或将(一个或多个)值返回到virtualworld::3dposition以返回位置和/或定向数据。如同图1c中的localframeclientimpl::get3dposition,构造localframeclientimpl::get3dposition可以源自c localframeclientimpl.cpp,并使用例如低级图形抽象层(诸如gfx或gfx

rs)以及位置和旋转数据来设置并获得用于客户端框架的位置和/或旋转。
[0106]
如同图1c中的renderwidget::set3dposition,浏览器引擎100c还可以通过在106d处执行renderwidget::get3dposition来调用渲染器,将位置和/或定向数据(例如,网页的位置和/或定向数据)返回到renderframeimpl::get3dposition(104d),并进一步根据3d位置和旋转数据(例如,由网页的开发者设置的位置和旋转数据)来“绘制”或渲染感兴趣的网页的内容。在一些实施例中,渲染器进程renderwidget可以使用glue接口(例如,webwidgetdelegate),并在glue接口中实现抽象接口。该抽象接口可以包括例如显示空间中的接收输入事件并将内容渲染到其中的2d窗口或3d体积。在辅助显示项(例如,显示选项列表的具有上/下箭头的选择框、选项卡、弹出窗口、导航命令等)要被渲染的这些实施例中的一些实施例中,浏览器引擎100c还可以执行另一个渲染进程(例如,renderview)以用于这种显示项。
[0107]
图1e图示了一些实施例中的具有用于在浏览器引擎与宇宙浏览器引擎之间同步3d位置和旋转数据的伪代码的简化框图。例如,虚拟3d空间中的网页可以被修改(例如,由在虚拟3d空间中移动和旋转网页的用户)。图1e中的框图图示了如何在浏览器引擎100e与宇宙浏览器引擎126e之间同步网页的最新的3d位置和旋转数据。图1e还可以说明其中在初始化浏览器时宇宙浏览器引擎126e向浏览器引擎100e发送位置和旋转数据的实施例。
[0108]
如图1e所示,宇宙浏览器引擎126e可以在被初始化(120e)时或在接收到网页的修改后的3d位置和/或旋转数据时(未示出)重置网页体积、所渲染的浏览器、和/或棱镜的(一个或多个)变换(122e)。然后,3d位置和旋转数据被传递到浏览器引擎100e,其中浏览器引擎100e执行cefbrowserview::updatecached3dposition和cefbrowserview::updatecached3drotation(102e)。浏览器引擎100e进一步执行renderwidgethostimpl::
updatecached3dposition和renderwidgethostimpl::updatecached3drotation,以用来自宇宙浏览器引擎126e的最新的位置和/或旋转数据来更新位置和/或旋转数据。
[0109]
在一些实施例中,宇宙浏览器引擎126e还可以在121e处检查网络内容变换是否已经被改变。宇宙浏览器引擎126e可以执行以下示例代码/伪代码以确定网络内容变换是否已经用头文件中的对应类定义“void chekifwebcontenttransformchanged();”进行了改变。
[0110]
void webcontentsview::checkifwebcontenttransformchanged(){
[0111]
if(!cef_window_){
[0112]
return;
[0113]
}
[0114]
auto diff=web_contents_node_

>getcurrentvolumetransform()

[0115]
web_contents_node_transform_;
[0116]
const glm::mat4::value_type*pdiff=
[0117]
static_cast<const glm::mat4::value_type*>(glm::value_ptr(diff));
[0118]
for(int i=0;i<16; i){
[0119]
if(std::abs(pdiff[i])>0.0001f){
[0120]
web_contents_node_transform_=
[0121]
web_contents_node_

>getcurrentvolumetransform();
[0122]
cef_window_

>webcontenttransformchanged();
[0123]
return;
[0124]
}
[0125]
}
[0126]
return;
[0127]
}
[0128]
在以上示例中,如果“cef_window”不存在,则一些实施例保留变换的未初始化值而不执行附加操作。此外,代码段“if(std::abs(pdiff[i])>0.0001f)...”指示用于确定相关变换是否已被显著改变的条件语句。
[0129]
宇宙浏览器引擎可以确定由系统(例如,ar系统)确认的光标位置与实际的光标位置相同还是不同,并且用类定义“virtual void updateloop(float/*delta*/);”来更新虚拟三维空间中的舞台(stage)和3d体积。
[0130]
void browserwindowbase::updateloop(float/*delta*/){
[0131]
if(cursor_manager_!=nullptr){
[0132]
cursor_manager_

>updatecursorposition();
[0133]
}
[0134]
content_view_

>checkifwebcontenttransformchanged();
[0135]
}
[0136]
在一些实施例中,可以针对“变化量(delta)”确定阈值,以使得当前述两个光标位置之间的差异低于该阈值时将不执行更新。一些实施例用“content_view_

>checkifwebcontenttransformchanged();”来对节点变换改变进行池化,以更新舞台和分离的体积位
置。
[0137]
浏览器引擎100e进一步发送(一个或多个)ipc(进程间通信)消息(例如,viewmsg_updatecached3dposition、viewmsg_updatecached3drotation等),并执行renderwidget::onupdatecached3dposition和renderwidget::onupdatecached3drotation(108e)以及renderwidget::set3dposition和renderwidget::set3drotation(110e)。
[0138]
在一些实施例中,宇宙浏览器引擎126e可以将3d位置和旋转数据存储在浏览器引擎100e可访问的非暂时性计算机可读介质(例如,高速缓存存储器)中。因此,每当网页面板在虚拟3d空间中的位置和/或旋转被修改时,宇宙浏览器引擎126e和浏览器引擎100e就会同步。为了初始化并重置renderwidget中的位置和旋转变量,每当网页开始加载时,网页面板的(一个或多个)变换可以被重置为默认值,并且在renderwidget中存储的值也将被更新。
[0139]
图1f图示了一个或多个实施例中的宇宙浏览器棱镜的简化示例。在该示例中,在虚拟3d空间中针对佩戴混合现实设备的用户104f创建两个宇宙浏览器棱镜(或简称棱镜)100f和102f。应注意,虽然棱镜100f和102f看起来是矩形棱镜,但是棱镜可以是任何形状和尺寸(例如,圆柱体、立方体、球体、四面体等,甚至是不规则的3d体积)。
[0140]
棱镜是虚拟内容被渲染并被显示到其中的三维体积空间。在由扩展现实系统提供的虚拟3d空间中存在棱镜,并且在一些实施例中,由扩展现实系统提供的虚拟3d空间可以包括多于一个棱镜。在一些实施例中,一个或多个棱镜被放置在现实世界(例如,用户的环境)中,从而为棱镜提供一个或多个现实世界位置。在这些实施例中的一些实施例中,一个或多个棱镜可以相对于一个或多个对象(例如,物理对象、虚拟对象等)、一个或多个二维表面(例如,物理对象的表面、虚拟对象的表面等)、和/或一个或多个一维点(例如,物理对象的顶点、虚拟对象的表面等)而被放置在现实世界中。在一些实施例中,单个软件应用程序可以对应多于一个棱镜。在一些实施例中,单个应用程序对应于单个棱镜。
[0141]
在一些实施例中,棱镜可以表示用于扩展现实系统的用户的当前位置的多应用场景图的子树。检索先前被部署在用户的当前位置的一个或多个棱镜可以包括:从例如外部数据库(例如,在云环境中存储联结式世界模型的数据库)检索用于一个或多个棱镜的实例数据,以及用用于一个或多个棱镜的实例数据来重建本地数据库(例如,包括在外部存储的联结式世界模型的较小部分的内部联结式世界模型数据库)。
[0142]
在这些实施例中的一些实施例中,用于棱镜的实例数据包括定义棱镜的一个或多个棱镜特性的数据结构。棱镜特性可以包括例如位置、定向、范围宽度、范围高度、范围深度、锚点类型、和/或锚点位置中的至少一个。附加地或替代地,用于棱镜的实例数据可以包括一个或多个应用特定特性(诸如先前被应用程序渲染到棱镜中的虚拟内容的状态信息)的键值对。在一些实施例中,数据可以被完全存储在本地,因此不需要外部数据库。
[0143]
在一些实施例中,棱镜包括在创建时具有固定和/或可调整边界的3d有界空间,但是,也设想具有更低维度的退化3d棱镜。棱镜在被生成时可以被定位(例如,通过宇宙浏览器引擎或其实例)在xr系统的虚拟3d空间中和/或用户的环境中的位置或现实世界中的任何其他地方。棱镜的边界可由系统(例如,宇宙浏览器引擎)、用户、和/或网页的开发者至少部分地基于要在棱镜内被渲染的内容的尺寸或范围来限定。在一些实施例中,只有xr系统(例如,它的宇宙浏览器引擎)可以在xr系统上创建和/或调整棱镜的边界。在一些实施例
中,可以(例如,以在图形上不强调的方式)显示棱镜的边界。在一些其他实施例中,不显示棱镜的边界。
[0144]
棱镜的边界限定可以在其内创建虚拟内容和/或所渲染的内容的空间。在一些实施例中,棱镜的边界还可以限制网页面板可以被移动和旋转的位置和程度。例如,当网页面板将被定位、旋转和/或缩放以使得网页面板的至少一部分将处于棱镜之外时,系统(例如,宇宙浏览器引擎)可以阻止这种定位、旋转和/或缩放。
[0145]
在一些实施例中,响应于原始定位、旋转、或缩放请求,系统可以在最接近或接近原始位置、旋转或缩放的下一个可能位置处定位、旋转和/或缩放网页面板。在这些实施例中的一些实施例中,系统可以显示该下一个可能位置、旋转或缩放的鬼影图像或框架,并且可选地显示指示原始位置、旋转或缩放可导致网页面板的至少一部分处于棱镜之外的消息。
[0146]
应用程序可以至少部分地经由宇宙浏览器引擎来将图形渲染到棱镜中。在一些实施例中,宇宙浏览器引擎渲染场景图和/或对棱镜的定位、旋转、缩放等有完全的控制。此外,宇宙浏览器引擎可以提供将一个或多个棱镜附着到物理对象(诸如墙壁、表面等)并将棱镜注册到联结式世界的能力,该联结式世界可以在本文描述的多个xr系统用户之间共享。
[0147]
附加地或替代地,宇宙浏览器引擎可以控制内容在多个xr系统用户之间的共享。在一些实施例中,宇宙浏览器引擎还可以管理棱镜。例如,宇宙浏览器引擎可以创建棱镜,管理相对于一个或多个物理对象的定位和/或对齐(snapping)规则,提供用户界面控件(例如,关闭按钮、动作条、导航面板等),跟踪棱镜的记录或数据(例如,什么应用程序拥有或调用哪个棱镜,在哪里放置棱镜,如何锚定棱镜——以身体为中心(body

centric)、世界固定等)
[0148]
在一些实施例中,棱镜行为可以部分或全部基于一个或多个锚点。在一些实施例中,棱镜行为可以部分地基于定位、旋转和/或缩放(例如,用户通过用户交互对网页内容或棱镜本身的放置、开发者对网页面板的定位、旋转和/或缩放等)和/或身体动力学(例如,公告板、以身体为中心、惰性头部锁定(lazy headlock)等)。在一些实施例中,棱镜可以在3d虚拟空间内移动。在这些实施例的一些实施例中,宇宙浏览器引擎可以跟踪棱镜的移动(例如,公告板到以用户/身体为中心、惰性公告板、移动时摇摆、碰撞反弹等)并管理棱镜的移动。
[0149]
附加地或替代地,包括浏览器、网页面板和任何其他虚拟内容的棱镜可以通过将对应的变换应用到棱镜来以许多不同的方式进行变换。例如,棱镜可以在虚拟3d空间中被移动、旋转、缩放和/或变形。在一些实施例中,提供了用于网页、网页面板、浏览器窗口和棱镜等的变换的变换集。在一些实施例中,可以自动创建具有功能集合的棱镜。在一些实施例中,该功能集合可以包括例如对于棱镜允许的最小和/或最大尺寸和/或用于调整棱镜尺寸的纵横比。该功能集合可以包括棱镜与虚拟或物理3d空间环境中的对象(例如,虚拟对象、物理对象等)之间的关联。附加的虚拟内容可以被渲染到一个或多个附加棱镜中,其中在一些实施例中,每个虚拟内容可被渲染到单独的棱镜中,或者在一些其他实施例中,两个或更多个虚拟内容可以被渲染到同一棱镜中。
[0150]
在一些实施例中,棱镜可以是完全透明的,并因此对于用户不可见,或者在一些其
他实施例中,棱镜可以是半透明的,并因此对于用户可见。不同于在浏览器窗口内显示的传统网页,浏览器窗口可以可配置(例如,经由宇宙浏览器引擎)以在虚拟3d空间中显示或隐藏。在一些实施例中,浏览器窗口可以被隐藏,因此对于用户是不可见的,但一些浏览器控件(例如,导航、地址栏、主页图标、重新加载图标、书签栏、状态栏等)在虚拟3d空间中仍然可以对用户可见。在一些实施例中,这些浏览器控件可以被显示为与对应的网页一起被平移、旋转和变换,或者在一些其他实施例中,这些浏览器控件可以独立于对应的网页而被显示。
[0151]
在一些实施例中,棱镜可以不与虚拟3d空间中的其他棱镜重叠。棱镜可以包括用以确保不同的软件应用程序彼此适当地交互的一个或多个通用特征、和/或与从选项列表中选择的一个或多个应用特定的特征。
[0152]
在一些实施例中,棱镜的顶点(106f)可以以不强调的方式(例如,降低亮度等)被显示给用户,以使得用户知道虚拟对象或所渲染的网页可以在其内被平移或旋转的棱镜的范围。在例如网页或网页面板被平移或旋转以使得网页或网页面板的一部分落在由棱镜定义的范围之外的一些实施例中,系统仍然可以显示该网页或网页面板的仍然在棱镜内的剩余部分,但不显示网页的落在棱镜的范围之外的部分。在其他一些实施例中,混合现实系统限制网页或网页面板的平移、旋转和变换,以使整个网页或网页面板可以被自由地平移、旋转或变换,但受制于棱镜的边界的限制。
[0153]
如图1f中所图示的,虚拟3d空间可以包括一个或多个棱镜。此外,在一些实施例中,棱镜还可以包括一个或多个其他棱镜,以使得该棱镜可以被视为该一个或多个其他棱镜的父棱镜。在这些实施例中的一些实施例中,可以构建棱镜树结构,其中,每个节点表示棱镜,并且两个相连节点之间的边表示这两个相连节点之间的父子关系。两个棱镜可以以这种方式移动,以使其相互重叠或者甚至使一个棱镜完全被包括在另一个棱镜内。两个棱镜之间的包含关系可以指示也可以不指示在这两个棱镜之间存在父子关系,但是,混合现实系统可以被配置为用户指定两个棱镜之间的父子关系。此外,为了使父子关系存在,第一棱镜可以或可以不必须被完全包括在第二棱镜中。在一些实施例中,所有子棱镜继承已经被或将要被应用于父棱镜的变换、平移和旋转,以使得父棱镜及其子棱镜一起被变换、平移和旋转。
[0154]
图1g至图1i图示了在一些实施例中的用混合现实系统在三维虚拟空间中管理和显示网页和网络资源一些简化示例的投影视图。图1g图示了3d矩形棱镜100g的侧视图,该3d矩形棱镜100g是在用户114g的物理环境中相对于在物理环境中的地板116g上方的物理对象(例如,桌子)118g而创建的。混合现实系统可以应用本文描述的各种技术以在棱镜100g中显示网页106g。
[0155]
如上所述,在图1g中抑制了网络浏览器窗口的显示,因此,浏览器窗口对于用户114g是不可见的。尽管如此,但浏览器的控件(104g)仍可以被显示给用户,以便用户114g控制浏览器的行为。另外,应用的名称或其他标识(例如,浏览器的名称、网页的名称或标识等)102g也可以被渲染在棱镜100g以内或以外。在一些实施例中,102g可以被包含在与棱镜100g有关系(例如,固定的相对位置、或父子关系等)的单独棱镜内。
[0156]
采用混合现实头戴设备115g,用户能够查看虚拟内容,诸如经由混合现实头戴设备115g被投影到用户114g的眼睛的网页106g和浏览器控件104g。混合现实系统或其组件
(例如,宇宙浏览器引擎)可进一步地提供平移控键112g、旋转控键108g和110g、缩放控键(未示出)或一个或多个其他变换控键(未示出),以供用户在虚拟3d空间中平移、旋转、缩放和变换棱镜100g、浏览器窗口(隐藏)、网页106g、控件104g等。
[0157]
图1h图示了其中用户114g向下并以第一倾斜定向来移动和旋转图1g中的网页和控件(102h和104h)的场景。网页和控件可以在棱镜100g中以完全360度的方式被单独或联合移动、旋转和变换,其中,图1h图示了网页和控件被联合移动和旋转。例如,不是向下移动和向上倾斜网页和控件,而是可以向上移动和向下旋转网页和控件以如图1h中的106h和108h所示的配置来结束。
[0158]
图1i图示了其中佩戴混合现实头戴设备115g的用户114g向下并以第一定向来移动和旋转图1g中的网页和控件(102i和104i)、以使得网页104i和控件102i看起来停留在桌子118g之上的场景。用户114g还可以以第二定向向上移动网页和控件(106i和108i),以使得网页108i和控件106i看起来位于用户114g上方。网页和控件可以在棱镜100g中以完全360度的方式被单独或联合移动、旋转和变换,其中,图1i图示了网页(104i和108i)和控件可以被联合移动和旋转(106i和102i)。图1i还图示了其中控件104g可以由用户114g单独操纵的配置。
[0159]
图1j至图1l图示了用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的三个简化示例。图1j图示了本文描述的用于在3d虚拟空间中管理和显示网页的各种技术的应用的工作示例。在该示例中,开发者102j可以以旋转并移动棋盘104j的方式对网页进行编码,以使得棋盘104j在被混合现实系统投影到用户的眼睛时,在开发者或用户102j的视场106j内的正确视角中看起来像是放在房子桌子或台子(未示出)上。
[0160]
该示例可以进一步说明其中棋盘的平面网页视图(或其他3d透视图)最初在虚拟3d空间中被呈现给用户102j的场景。用户102j可以使用本文描述的技术以通过例如操纵定位和旋转控键(未示出)来将网页104j移动和/或旋转到期望位置和/或定向。采用由网页及其网站提供的网络资源(例如,每个玩家16个棋子),混合现实系统可以使用户102j能够使用用户的手、图腾或者控制器(108j)来将虚拟3d棋子放置在已经按用户102j的期望被定位和/或旋转的棋盘104j上。需要注意,在该示例中,网页、浏览器窗口和棱镜的边界被抑制(例如,隐藏),因此,这些边界对于用户是不可见的。在该示例中,可以在棋盘104j(父)与棋子110j的虚拟3d模型(子)之间创建父子关系,以使得虚拟3d棋子与在网页中显示的棋盘104j一起被变换、平移和旋转。
[0161]
图1k图示了本文描述的用于在3d虚拟空间中管理和显示网页的各种技术的应用的另一个工作示例。在该示例中,开发者102j可以以旋转和移动显示开发项目的附近的地图104m的方式对网页进行编码,以使得地图104j在被混合现实系统投影到建筑师的眼睛时,在建筑师102j的视场106j内的正确视角(例如,水平)中看起来像是放在桌子或台子(未示出)上。
[0162]
另外,开发者102j可以使用本文描述的技术以将网页104j(以及因此在其中显示的地图)移动和/或旋转到期望位置和/或定向。通过使用开发者的手、图腾、或控制器(104k)来将3d虚拟办公楼106k移动和旋转到地图中的正确位置,开发者可以定位由开发者构建的或从其他资源提供的办公楼106k的虚拟3d模型。开发者还可以将其他的虚拟3d模型(诸如树木112k、办公楼108k、车辆110k等)填充在地图上,以构建用于项目开发或3d导航的
虚拟3d项目或3d地图。
[0163]
随着至少一些虚拟对象被填充到地图上,开发者还可以旋转显示地图的网页。例如,随着办公楼108k被填充到地图上,这两个办公楼108k可能挡住开发者查看地图的一部分。在该示例中,开发者还可以旋转地图,以使得被遮挡的部分被露出给开发者,以便开发者进一步将其他虚拟对象填充到被遮挡的部分。类似于在图1j中图示的示例,也可以在地图102k(父)与虚拟3d对象106k、108k和110k(子)之间创建父子关系,以使得虚拟对象与被显示在网页中的地图102k一起被变换、平移和旋转。
[0164]
图1l图示了本文描述的用于在3d虚拟空间中管理和显示网页的各种技术的应用的另一个工作示例。在该示例中,佩戴混合现实头戴设备(未示出)的用户102l可以在用户的视场104l内被呈现了棱镜100l,棱镜100l包括可选的网站图标106l(或启动器)的排列或启动板,其例如可从浏览器的书签工具栏中被渲染或由本文描述的混合现实系统的宇宙浏览器引擎提供。用户可以经由例如手势、语音命令等来启动具有相应图标的对应网站的主页。
[0165]
该示例进一步说明用户可以主要通过如图1k所示并如上所述地用开发者的手、图腾或控制器122l填充3d虚拟对象(例如,124l)来在虚拟开发项目或3d地图108l上工作。用户102l还可以打开若干其他网页,并进一步通过使用本文描述的技术来操纵这些网页(例如,流视频网页110l、在线词典网页112l、社交媒体网页114l、在线维基网页116l、电子邮件客户端118l等)并将其排列到棱镜100l中用户期望的位置和定向。
[0166]
从图1j至图1l所图示的示例可以看出,由于对应的网页在虚拟3d空间中的移动和旋转,各种虚拟内容可以跨多个深度平面或焦平面来显示。本文描述的混合现实系统提供了通过使用多个深度平面或焦平面及其可变的聚焦机制来渲染这些虚拟内容的能力。在本技术的第一段中引用的美国专利申请中描述了关于混合现实系统的更多细节。
[0167]
图1m图示了一个或多个实施例中的用于用混合现实系统在虚拟3d空间中管理和显示网页和网络资源的示例用户物理环境和系统架构。代表性的环境100包括用户103通过头戴式系统160观看的用户景观110。用户景观110是世界的3d视图,其中用户放置的内容可以被合成在现实世界之上。代表性的环境100还包括经由可操作地耦合到网络(未示出)的处理器170访问宇宙应用或宇宙浏览器引擎130。
[0168]
虽然处理器170被示为与头戴式系统160分离的独立部件,但是在替代实施例中,处理器170可以与头戴式系统160的一个或多个组件集成,和/或可以被集成到代表性的环境100内的其他系统组件中,诸如例如访问计算网络(未示出)和(一个或多个)外部存储设备150的网络。在一些实施例中,处理器170可以不被连接到网络。处理器170可以被配置有软件(例如,宇宙应用或宇宙浏览器引擎130),用于接收和处理信息,诸如从头戴式系统160、本地存储设备137、(一个或多个)应用140、计算网络和/或(一个或多个)外部存储设备150接收的视频、音频和/或其他数据(例如,深度相机数据)。
[0169]
宇宙应用或宇宙浏览器引擎130可以是3d窗口管理器,其类似于在例如台式计算机上运行的用于管理在台式计算机的显示屏上显示的2d窗口的2d窗口管理器。然而,宇宙应用或宇宙浏览器引擎130(以下为简单起见可被称为“宇宙”)管理在3d空间环境中创建、放置和显示虚拟内容115以及在用户景观110中显示的多个虚拟空间115之间的交互。来自应用140的虚拟内容115在一个或多个3d窗口显示管理单元(诸如有界体积和/或3d窗口,在
下文中可被称为棱镜113)内被呈现给用户103。
[0170]
有界体积/3d窗口/棱镜113可以是矩形、立方形、圆柱形或可以在空间中被定位和定向的任何其他形状的空间体积。棱镜113可以是用于内容(例如,虚拟内容)被渲染/显示在其中的具有边界的体积显示空间,其中不显示边界。在一些实施例中,可以显示边界。棱镜113可以呈现对应用的内容及其放置的标准基本级别的交互和控制。棱镜113可以表示多应用场景图的子树,其可以被嵌入在宇宙浏览器引擎130内部,或者可以在宇宙浏览器引擎外部但可由宇宙浏览器引擎访问。场景图是通常由基于矢量的图形、编辑应用和现代游戏软件使用的通用数据结构,其排列图形场景的逻辑和经常(但不一定)的空间表示。场景图可以被认为是数据结构,它定义内容在其结构内如何相对于彼此进行定位和变换。(一个或多个)应用140被给予了棱镜113的实例以在其中放置内容。应用可以使用相对放置算法和任意变换来在棱镜113内渲染2d/3d内容,但宇宙浏览器引擎(130)仍然可以最终负责总体交互模式(诸如内容提取)。多个应用可以经由棱镜113渲染到宇宙浏览器引擎(130),其中进程边界分离棱镜113。每个应用进程可以有n个有界体积/棱镜113,但这显然是n:1的关系,因此,对于每个有界体积/棱镜113,每个应用只有一个进程可以在运行,但是,可以有m个进程在运行,每个进程有自己的有界体积/棱镜113。
[0171]
宇宙浏览器引擎(130)使用棱镜/分布式场景图方法来针对2d和/或3d内容进行操作。宇宙浏览器引擎的场景图的一部分被保留用于每个应用来渲染。与应用的每次交互(例如启动器菜单、景观或以身体为中心的应用区域(所有这些在下面更详细地描述))可以通过多应用场景图来完成。每个应用可以被分配表示场景图的子树的1到n个矩形棱镜。棱镜并非由客户端侧应用分配,而是例如当用户通过点击控制器上的按钮在景观中打开新的应用时,通过用户在宇宙浏览器引擎(130)内部的交互来创建的。在一些实施例中,应用可以向宇宙浏览器引擎(130)请求棱镜,但是该请求可以被拒绝。在一些实施例中,如果应用请求并被允许了新的棱镜,则该应用可以仅相对于它的其他棱镜之一来变换新的棱镜。
[0172]
宇宙浏览器引擎(130)包括在被称为棱镜113的对象中的来自(一个或多个)应用140的虚拟内容115。每个应用进程或实例可以将它的虚拟内容渲染到它自己的单独棱镜113或棱镜集中。宇宙浏览器引擎(130)管理世界空间(有时被称为景观),其中显示了棱镜113。在一些实施例中,宇宙浏览器引擎(130)提供了将应用贴附到墙壁和表面、将棱镜放置在空间中的任意位置、将它们注册到混合现实系统的世界数据库、和/或控制在混合现实系统的多个用户之间的内容共享的能力。
[0173]
在一些实施例中,棱镜113的目的是提供渲染和显示内容的行为和对其的控制。与其中窗口可被用于定义2d内容在2d窗口内的位置、菜单结构和显示的2d显示很像,采用3d虚拟显示,棱镜允许混合现实系统(例如,宇宙浏览器引擎(130))包裹与例如内容位置、3d窗口行为和/或在3d内容的显示周围的菜单结构相关的控制。例如,控制可以至少包括:将虚拟内容放置在用户景观110中的特定位置,从景观110移除虚拟内容,复制虚拟内容和/或将副本放置在不同位置等。在一些实施例中,棱镜可以由用户且仅由用户来创建和销毁。这可以明确地完成以帮助控制对所提供的界面的滥用和帮助用户保持对用户内容的控制。
[0174]
另外,在一些实施例中,(一个或多个)应用140不知道它们的体积在景观中被放置的位置——只知道它们存在。在一些实施例中,应用可以请求一个或多个棱镜,并且该请求可以或可以不被许可。在创建了新的棱镜之后,用户可以改变位置,和/或应用可以自动地
相对于与该应用相关联的当前已有棱镜来定位新的棱镜。在一些实施例中,利用宇宙浏览器引擎的服务以将3d内容(例如,合成的3d内容)渲染到宇宙浏览器引擎进程中的每个应用140可被要求首先向宇宙浏览器引擎注册监听器。该监听器可被用于基于用户移动和用户与渲染棱镜的交互来向应用140通知那些棱镜的创建和销毁。监听器是从进程间通信系统接收消息的接口对象。例如,在安卓(android)操作系统中,监听器是通过android binder接口来接收消息的对象。然而,可以使用任何ipc系统,因此并不总是使用binder。
[0175]
在一些实施例中,可以从以下交互中创建棱镜:(1)用户已经从可提取节点(在下面进一步公开)提取了内容;(2)用户已经从启动器启动了应用;(3)用户已经下载了附近的联结式世界(passable world)地图块(tile),其包括用户有权查看的已放置的应用实例;(4)用户已经下载了附近的联结式世界地图块,其包括联结式世界对象识别器基础结构已检测到的并且给定应用必须为其渲染内容的对象;和/或(5)用户已经触发了来自必须在不同应用中进行处理的另一个应用的分派。在一些实施例中,联结式世界模型允许用户有效地将用户世界的一部分(例如,周围环境、交互等)传递给另一个用户。
[0176]
可提取内容是棱镜内的可使用输入设备从棱镜中拉出并被放置在景观中的内容(包括但不限于图标、3d图标、文本显示的文字、和/或图像)。例如,棱镜可能显示了显示待售的跑鞋的网页。为了提取跑鞋,可以用输入设备选择并“拉动”跑鞋。用表示鞋子的3d模型创建新棱镜,该棱镜会从原始棱镜中移出并朝着用户移动。与任何其他棱镜一样,用户可以使用输入设备来在景观的3d空间中移动、增长、收缩或旋转包含鞋子的新棱镜。可提取节点是棱镜的场景图中的被标记为可被提取的事物的节点。在宇宙浏览器引擎中,提取内容意味着选择可提取节点,并且使用输入设备来将内容拉出棱镜。发起该拉动的输入可以是将6dof定点设备对准可提取内容并扣动输入设备上的触发器。
[0177]
每个用户的相应单独的混合现实系统(例如,混合现实设备)在用户经过或居住在环境中时捕获信息,混合现实系统处理该信息以产生联结式世界模型。在2014年3月11日提交的题为“system and method for augmented and virtual reality(用于增强和虚拟现实的系统和方法)”的美国专利申请no.14/205,126中描述了关于联结式世界的更多细节,该专利申请先前已通过引用被并入本文。单独的混合现实系统可以将联结式世界模型传送或传递到公共或共享的数据集合(其被称为云)。单独的混合现实系统可以将联结式世界模型直接或经由云被传送或传递给其他用户。联结式世界模型提供了有效传送或传递基本上包含至少用户的视场的信息的能力。在一个实施例中,系统使用姿势和定向信息以及上述的所收集的3d点来创建联结式世界。
[0178]
在一些实施例中,联结式世界模型允许用户能够将内容(例如,虚拟和/或物理内容)与现实世界相集成。联结式世界系统可以包括能够连接到云网络的一个或多个混合现实系统或混合现实用户设备、联结式世界模型、一组对象识别器、和数据库(例如,外部数据库150)。联结式世界模型可以被配置为从混合现实用户设备接收信息,并还通过网络向它们发送数据。例如,基于来自用户的输入,联结式世界的一部分可以从一个用户传递到另一个用户。联结式世界模型可以被认为是图像、点和其他信息(例如,现实世界信息)的集合,混合现实系统能够基于这些信息而在云上构造、更新和构建虚拟世界,并且有效地将虚拟世界的部分传递给各种用户。例如,可以在联结式世界模型中收集从混合现实用户设备收集的一组现实世界点。各种对象识别器可以通过联结式世界模型来爬取以识别对象、标记
图像等,并将语义信息附加到对象上。联结式世界模型可以使用数据库来构建它的世界知识、附加语义信息以及存储与联结式世界相关联的数据。
[0179]
在棱镜对于用户可见但其控制应用当前未被安装的情况下,宇宙浏览器引擎可以渲染用于该应用的临时占位符,该占位符在与用户交互时将用户重定向到该应用的应用商店页面。在一些实施例中,棱镜可以在类似的交互中被销毁:(1)用户已经从联结式世界地图块走得足够远,以致已放置的应用实例已经从易失性存储器中未加载(即,移除);(2)用户已经破坏了已放置的应用实例;和/或(3)应用已经请求关闭棱镜。
[0180]
在一些实施例中,如果应用的棱镜不可见和/或未被加载,则与那些棱镜相关联的进程可被暂停或结束。一旦该应用的已放置的棱镜再次可见,则该进程可以被重新启动。棱镜也可以被隐藏,但是在一些实施例中,这只可以在宇宙浏览器引擎和用户的要求下发生。在一些实施例中,多个棱镜可以被放置在相同的准确位置。在这种实施例中,宇宙浏览器引擎可以一次在一个地方仅显示已放置的棱镜的一个实例,并且通过在检测到用户交互之前隐藏棱镜(及其相关联的内容)的可见性来管理渲染,诸如用户“滑动”到在该位置的下一个可见元素(例如,棱镜)。
[0181]
在一些实施例中,可以采用用于访问棱镜113的特性并在场景图子树中注册用于共享资源(诸如网格、纹理、动画等)内容的方法,经由体积监听器接口将每个棱镜113开放给应用140。在一些实施例中,由于应用140不知道给定棱镜113在3d空间中被放置的位置,因此,体积监听器接口可以提供对一组提示的访问方法,该组提示有助于定义给定棱镜在宇宙浏览器引擎中的位置,例如,以手为中心、停留在景观中、以身体为中心等。这些特性另外指定了棱镜的预期行为,并且可以由用户、应用140或宇宙浏览器引擎以受限的方式进行控制。给定棱镜可以相对于应用所拥有的另一个棱镜被定位。应用可以规定在放置来自该应用的棱镜时,棱镜应当对齐在一起(它们的有界体积的两侧接触)。此外,棱镜可以提供用于键值数据存储的api。其中一些键值对仅可由特权应用写入。
[0182]
在一些实施例中,(一个或多个)应用140是客户端软件应用,其提供要在用户景观110中向用户103显示的内容。例如,应用140可以是视频流应用,其中视频数据可以被流式传输到用户以在2d平面上显示。作为另一个示例,应用140可以是提供物理对象的3d成像的halcyon应用,其可以标示过去对于用户是田园诗般快乐和平静的时间段。应用140提供用户可能想要包括在用户景观110中的内容。宇宙浏览器引擎经由棱镜113来管理由应用140生成的内容的放置和管理。
[0183]
当非沉浸式应用在用户景观110中被执行/启动时,它的内容(例如,虚拟内容)在棱镜113内部被渲染。非沉浸式应用可以是能够在共享3d环境中与一个或多个其他应用同时运行和/或显示内容的应用。尽管虚拟内容可以被包含在棱镜内,但是用户仍然可以与该虚拟内容交互,诸如例如悬停在对象上、点击它等。棱镜113还可以绑定应用140的显示内容,因此,不同的应用140不会相互干扰或者干扰用户景观110中的其他对象。棱镜113还可以提供有用的抽象,以用于中止、暂停和/或最小化来自(一个或多个)应用140的在视图以外或离用户太远的虚拟内容。
[0184]
棱镜113可以被锚定/附接/固定到用户景观110内的各种对象,包括对齐或锚定到另一个棱镜。例如,显示虚拟内容115(例如,来自视频流传输应用的视频115a)的棱镜113a可以被锚定到直立墙117a。作为另一个示例,显示来自halcyon应用的3d树115b的棱镜113b
在图1中被显示为锚定到台子117b。此外,棱镜113可以相对于用户103被锚定(例如,以身体为中心),其中,显示虚拟内容115的棱镜113可以被锚定到用户的身体,以使得随着用户的身体移动,棱镜113相对于用户的身体的移动而移动。以身体为中心的内容可以是跟随用户并在位置上与用户保持一致的应用内容,诸如平面、网格等。例如,跟随在用户周围但相对于用户的脊椎而不是景观110存在的小对话框。另外,棱镜113也可以被锚定到虚拟对象,诸如在用户景观110内显示的虚拟显示器。棱镜113可以以在下面公开的不同方式来锚定。
[0185]
宇宙浏览器引擎可以包括用于针对用户存储棱镜113的特性和特点的本地数据库137。所存储的棱镜信息可以包括在用户景观110内由用户激活的棱镜。本地数据库137可以可操作地耦合到可驻留在云中或在外部存储设施中的外部数据库150。外部数据库150可以是维持关于该用户和其他用户的混合现实环境的信息的持久数据库。
[0186]
例如,当用户启动新的应用以在用户的物理环境中显示虚拟内容时,本地数据库137可以存储与由宇宙浏览器引擎创建并放置在特定位置的棱镜相对应的信息,其中,应用140可以将内容渲染到棱镜113中以在用户景观110中显示。被存储在本地数据库137中的与棱镜113、虚拟内容115和应用140对应的信息可以被同步到外部数据库150以用于持久存储。
[0187]
在一些实施例中,持久存储可以很重要,因为当混合现实系统被关闭时,被存储在本地数据库137中的数据可被擦除、删除或是非持久的。因此,当用户开启混合现实系统时,宇宙浏览器引擎可在混合现实系统被关闭之前与外部数据库150同步以取回与用户103和用户景观110对应的本地数据库137的实例。本地数据库137可以是外部数据库150的实例,其中,本地数据库137的实例包括与用户103和用户的当前环境相关的信息。另外,外部数据库150可以存储其他用户、多个用户、相同用户随着时间推移、和/或其他环境的本地数据库的实例。外部数据库150可以包含用于在混合现实系统的多个用户之间管理和共享虚拟内容的信息,而本地数据库137存储和维护与用户103对应的信息。
[0188]
每当(一个或多个)应用140需要将虚拟内容115渲染到用户景观110上时,宇宙浏览器引擎可以创建用于应用140的棱镜113。在一些实施例中,由宇宙浏览器引擎创建的棱镜113允许应用140专注于渲染虚拟内容以用于显示,而宇宙浏览器引擎专注于创建和管理棱镜113的放置和显示,棱镜113使虚拟内容115显示在应用140的棱镜的边界内。
[0189]
由应用140渲染的在用户景观110中显示的每个虚拟内容115可以在单个棱镜113内被显示。例如,如果应用140需要渲染两个虚拟内容(例如,115a和115b)以被显示在用户景观110内,则应用140可以渲染两个虚拟内容115a和115b。由于虚拟内容115仅包括所渲染的虚拟内容,因此,宇宙浏览器引擎可以创建棱镜113a和113b以分别对应于虚拟内容115a和115b中的每一个。棱镜113可以包括3d窗口管理特性和虚拟内容115的特点,以允许宇宙浏览器引擎管理在棱镜113内部的虚拟内容115以及棱镜113在用户景观110中的放置和显示。
[0190]
当用户103开启混合现实设备时,宇宙浏览器引擎可以是用户103看到的第一个应用。宇宙浏览器引擎可以至少负责(1)渲染用户的世界景观;(2)平面应用的2d窗口管理和3d窗口(例如,棱镜)管理;(3)显示和执行应用启动器菜单;(4)允许用户将虚拟内容放置到用户景观110中;和/或(5)管理棱镜113在用户景观110内的显示的不同状态。
[0191]
头戴式系统160可以是混合现实头戴式系统,其包括位于用户103眼睛前面的显示
系统(例如,用户界面)、被耦合到头戴式系统并邻近用户的耳道的扬声器、用户感测系统、环境感测系统、以及处理器(均未示出)。头戴式系统160向用户103呈现显示系统(例如,用户接口)以用于与数字世界交互并体验数字世界。这种交互可以涉及用户和数字世界、与代表性的环境100相接的一个或多个其他用户、以及在数字和物理世界内的对象。
[0192]
用户接口可以包括通过用户接口经由用户输入来查看、选择、定位和管理虚拟内容。用户接口可以是以下至少一项或其组合:触觉接口设备,键盘,鼠标,操纵杆,运动捕捉控制器,光学跟踪设备,音频输入设备,智能电话,平板计算机,或头戴式系统160。触觉接口设备是允许人通过身体感觉和移动来与计算机交互的设备。触觉是指一种人机交互技术,它包含触觉反馈或其他身体感觉以在计算设备上执行动作或过程。
[0193]
触觉控制器的示例可以是图腾(未示出)。在一些实施例中,图腾是跟踪其相对于头戴设备160的位置和定向的手持式控制器。在该示例中,图腾可以是六自由度(六dof或自由度)控制器,其中用户可以通过向上或向下移动图腾来在高度和方位(在球壳上)上移动棱镜。在一些实施例中,为了将对象移近或移远,用户可以使用图腾上的操纵杆来“推”或“拉”棱镜,或者可以仅向前或向后移动图腾。这可以具有改变球壳的半径的作用。在一些实施例中,图腾上的两个按钮可以使棱镜增大或缩小。在一些实施例中,旋转图腾本身可以旋转棱镜。可以使用其他图腾操纵和配置,而不应限于上述的实施例。
[0194]
用户感测系统可包括一个或多个传感器162,其可操作以检测与佩戴头戴式系统160的用户103相关的某些特征、特性或信息。例如,在一些实施例中,传感器162可以包括相机或光学检测/扫描电路,其能够检测用户103的实时光学特性/测量,诸如例如以下一项或多项:瞳孔收缩/扩张,每个瞳孔的角度测量/定位、球度、眼睛形状(眼睛形状随着时间变化),以及其他解剖数据。这些数据可以提供或被用于计算可由头戴式系统160使用以增强用户的观看体验的信息(例如,用户的视觉焦点)。
[0195]
环境感测系统可以包括一个或多个传感器164,用于从用户景观110获得数据。由传感器164检测到的对象或信息可作为输入被提供给头戴式系统160。在一些实施例中,该输入可以表示用户与虚拟世界的交互。例如,查看桌子(例如,桌子188)上的虚拟键盘的用户(例如,用户103)可以用他们的手指做手势,就好像该用户在虚拟键盘上打字一样。手指移动的动作可以被传感器164捕捉并被提供给头戴式系统160作为输入,其中该输入可用于改变虚拟世界或创建新的虚拟对象。
[0196]
传感器164可以包括例如通常面向外的相机或扫描仪,用于例如通过连续地和/或间歇地投射的红外结构光来捕获和解释场景信息。环境感测系统可被用于通过检测并注册来自本地环境的一个或多个元素(包括静态对象、动态对象、人、手势和各种光照、大气和声学条件等)来映射用户103周围的用户景观110的一个或多个元素。因此,在一些实施例中,环境感测系统可以包括基于图像的3d重建软件,其被嵌入本地计算系统(例如,处理器170)中并可操作以数字地重建由传感器164检测到的一个或多个对象或信息。
[0197]
在一些实施例中,环境感测系统提供以下一项或多项:运动捕捉数据(包括手势识别),深度感测,面部识别,对象识别,独特对象特征识别,语音/音频识别和处理,声源定位,降噪,红外或类似激光投影,以及单色和/或彩色cmos传感器(或其他类似的传感器),视场传感器,和各种其他光学增强传感器。应当理解,环境感测系统可包括除了上面讨论的那些组件之外的其他组件。
[0198]
如以上所提及的,在一些实施例中,处理器170可以与头戴式系统160的其他组件集成,与代表性的环境100的系统的其他组件集成,或者可以是如图1所示的独立设备(可穿戴或与用户103分离)。处理器170可以通过物理的有线连接或者通过无线连接(诸如例如移动网络连接(包括蜂窝电话和数据网络)、wi

fi、蓝牙或任何其他无线连接协议)被连接到头戴式系统160的各种组件。处理器170可以包括存储器模块、集成的和/或附加的图形处理单元、无线和/或有线的互联网连接、以及能够将来自源(例如,计算网络、来自头戴式系统160的用户感测系统和环境感测系统)的数据变换成图像和音频数据的编解码器和/或固件,其中图像/视频和音频可以经由用户接口(未示出)被呈现给用户103。
[0199]
处理器170处理用于头戴式系统160的各种组件的数据处理以及头戴式系统160与软件应用(诸如宇宙浏览器引擎、外部数据库150等)之间的数据交换。例如,处理器170可被用于缓冲并处理用户103与计算网络(包括软件应用)之间的数据流传输,从而实现流畅、连续和高保真的用户体验。处理器170可以被配置为执行程序代码指令集。处理器170可以包括用于保存程序代码指令集的存储器,其中,程序代码指令集包括通过在体积显示空间内显示虚拟内容来在可用3d可显示空间的子集内显示虚拟内容的程序代码,其中,不显示体积显示空间的边界。在一些实施例中,处理器可以是可操作地耦接的两个或多个处理器。
[0200]
在一些实施例中,混合现实系统可以被配置为向棱镜分配通用特征和来自用于应用对显示定制的配置的预先批准的选项列表的应用选择/应用特定的特征。例如,通用特征确保不同的应用可以一起很好地交互。通用特征的一些示例可以包括最大/最小尺寸,不重叠棱镜(排除来自碰撞行为的临时重叠),在棱镜的边界以外不显示内容,如果应用想要访问传感器或敏感信息,则应用需要用户的许可。应用选择/应用特定的特征能够实现优化的应用体验。
[0201]
应用选择/应用特定的特征可以包括最大/最小尺寸(在系统的限制内)、默认尺寸(在系统的限制内)、身体动力学的类型(例如,无锁定/世界锁定、公告板、边缘公告板、跟随/惰性头部锁定、基于外部传感器的跟随、淡入淡出——下面所讨论的)、子棱镜产生位置、子头部姿势突出显示、子棱镜关系行为、表面行为、独立变换控制、调整尺寸与缩放、空闲状态超时、冲突行为、访问应用的权限/密码等。在另一个实施例中,混合现实系统可以被配置为将虚拟内容显示在一个或多个棱镜中,其中,一个或多个棱镜在一些实施例中彼此不重叠。
[0202]
在一些实施例中,一个或多个棱镜可以重叠以便提供特定交互。在一些实施例中,一个或多个棱镜可以重叠,但仅与来自同一应用的其他棱镜重叠。在另一个实施例中,混合现实系统可以被配置为至少部分地基于棱镜与用户的相对定位和位置来改变棱镜的状态。在另一个实施例中,混合现实系统可以被配置为管理应用中的内容创建和管理不同的应用中的内容显示。在另一个实施例中,混合现实系统可以被配置为打开将在棱镜中提供内容并同时将棱镜放置在混合现实环境中的应用。
[0203]
在一些实施例中,混合现实系统可以被配置为将位置、定向和范围数据分配给棱镜以用于在棱镜内显示虚拟内容,其中,虚拟内容是3d虚拟内容。在一些实施例中,混合现实系统可以被配置为将启动器应用固定到混合现实环境内的现实世界对象。在一些实施例中,混合现实系统可以被配置为向每个棱镜分配行为类型,该行为类型包括世界锁定、公告板、边缘公告板、跟随头部锁定、基于外部传感器的跟随、或淡入淡出(在下面更详细地描
述)。在一些实施例中,混合现实系统可以被配置为识别最常使用的内容或特定于启动器应用的放置位置的应用,并因此例如从最常用到最不常用来对应用重新排序。在另一个实施例中,混合现实系统可以被配置为在所放置的启动器应用处显示喜爱的应用,喜爱的应用至少部分地基于相对于所放置的启动器的位置的上下文。
[0204]
图1n图示了在一个或多个实施例中的用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的系统架构。系统100n包括宇宙或宇宙浏览器引擎130、应用140、图标网格应用160n、状态栏应用170n、社交面板应用180n和商店面板应用190n。这些应用可以表示系统100n上的基本级别应用,然而在一些实施例中,更多或更少的应用可以是系统100n的一部分。
[0205]
如在上面的图1m中所讨论的,宇宙浏览器引擎可以被认为是3d窗口(例如,棱镜)管理器,其类似于在常规的计算机桌面系统等中管理2d窗口的2d窗口管理器。图1n可以提供来自图1m的宇宙浏览器引擎的更多细节。在此,宇宙浏览器引擎130还可以包括宇宙服务器105n、加载器体积110n、辅助ui体积120n、宇宙客户端125n、启动器应用130和宇宙服务器105n。宇宙服务器105n可以是在用于多并行处理的多线程处理环境中的宇宙浏览器引擎的处理线程。
[0206]
加载器体积110n是占位符体积,其在宇宙浏览器引擎在创建用于在用户景观110中显示虚拟内容的棱镜时被显示给用户。例如,当用户选择应用以在用户景观110中在特定位置(例如,在用户景观110的直立墙上)显示时,同时宇宙浏览器引擎正在设置棱镜并启动用于将虚拟内容渲染到棱镜中的应用,宇宙浏览器引擎可以用默认图标将加载器体积110n显示为占位符体积,以向用户指示宇宙浏览器引擎正在设置棱镜以用于显示。一旦应用完成了将虚拟内容渲染到棱镜中以用于在用户的景观中显示,加载器体积110n被替换为包含所渲染的虚拟内容的实际棱镜。
[0207]
在一些实施例中,当宇宙浏览器引擎在启动用于显示虚拟内容的应用时,用户103可将加载器体积110n移动到期望的不同位置。在一些实施例中,用户可以将加载器体积110n移动到与最初被选择的加载器体积/棱镜的位置不同的位置。一旦宇宙浏览器引擎完成了棱镜的创建并且应用已经将虚拟内容渲染到棱镜中,无论用户可能已将加载器体积110n放置在何处,宇宙浏览器引擎都可以用显示虚拟内容的棱镜来替换加载器体积110n。
[0208]
辅助ui体积120n是另一个棱镜,其可以在创建棱镜(例如,它的“父棱镜”)时被创建。辅助ui体积120n向用户提供棱镜的通用界面。例如,辅助ui体积120n可以被视为窗口装饰,因为辅助ui体积120n提供了管理棱镜(例如,关闭/移除、共享、跟随、截屏棱镜的内容等)的机制。当创建棱镜时,如果该棱镜不是启动器的一部分(启动器应用可以没有辅助ui体积),则可以对该棱镜创建辅助ui体积120n。辅助ui体积120n提供空间/体积来显示图形用户界面图标,诸如关闭/移除、分享、跟随、截图等,以供用户与棱镜交互并进行管理。辅助ui体积120n与父棱镜相关联并可与父棱镜组合。辅助ui体积120n的寿命在它所关联的父棱镜的寿命结束时结束。
[0209]
在一些实施例中,辅助ui体积120n可以具有至少三种状态:(1)当父棱镜模糊时,不显示任何内容;(2)当父棱镜清晰时,显示组件的“可见名称”;以及(3)当检测到特定用户交互(例如,手持式控制器(例如,图腾或其他合适的用户交互控制器)的主页按钮已被按住数秒)时,显示应用菜单选项图标的“轮播”,其中,该轮播显示图标的集合,其中一个图标可
以是用于关闭棱镜的大的“x”图标。在一些实施例中,辅助ui体积120n经由它的父棱镜来接收输入。换言之,父棱镜可以确定辅助ui体积120n是否在显示它的轮播,如果是,则父棱镜将用户输入重定向到辅助ui。下面公开了辅助ui体积120n的轮播。
[0210]
在一些实施例中,启动器可以是用于混合现实系统的默认“主页”菜单。启动器可以将多个内容面板与系统状态栏集合在一起。每个面板可以表示不同的内容类型。应用可从启动器中被拉出并被固定到景观中以用于快速召回。启动器本身可以被放置在景观中,以用于按位置的定制和/或快速访问。
[0211]
启动器130n向用户提供将新应用启动到用户景观110中的能力。启动器130n可以是由一系列以身体为中心的棱镜(被称为面板)组成的应用。例如,面板可以垂直和水平地滚动,并且用户可以用滑动动作来在面板之间进行切换。在一些实施例中,每次一个面板(例如,中央面板)可见,它的两个相邻面板在它的一侧作为占位符面板可见。当用户滑动到下一个面板时,占位符面板可以展开以显示整个面板。面板可以包括图标网格应用160n、社交面板180n和商店面板190n。在一些实施例中,当用户滑动到下一个面板时,面板本身不会被移动或改变,而是在不同面板内的内容(例如,图标)可以动画地进出中央面板(例如,活动面板)。此外,应用可以从启动器130n中被拉出并被固定到用户景观110中以用于按位置的定制,这将在下面进一步讨论。
[0212]
在一些实施例中,应用140(在图1m中)可以经由每个应用140上的集中式渲染服务客户端150n与宇宙浏览器引擎通信。集中式渲染服务客户端150n可以与宇宙浏览器引擎130内的宇宙服务器105n通信。集中式渲染服务客户端150n可以是集中式渲染系统的客户端服务,其允许(一个或多个)应用140和生成内容以用于在用户景观中显示的其他应用经由宇宙服务器105n与宇宙浏览器引擎通信。
[0213]
宇宙服务器105n可以包括集中式渲染系统的允许宇宙浏览器引擎与提供要在用户景观中被显示的内容的应用进行通信的服务。在一些实施例中,通信可以不仅仅包括渲染数据(例如输入数据)、请求安全特权、请求显示或隐藏虚拟键盘等。
[0214]
在一些实施例中,集中式渲染系统可以是专用于从多个应用接收图形数据以显示在单个显示器上(例如,在混合现实系统中的用户景观中)的硬件和软件资源的系统。集中式渲染系统将来自多个应用140的图形数据组合成“集中式”数据结构(诸如场景图),其可被用于将反映来自多个应用的图形数据的场景以逼真有效的方式渲染到显示器上。为了实现集中式渲染系统,在一些实施例中,应用可以对被称为客户端棱镜的棱镜(例如,来自图1n的客户端棱镜115n)的本地表示进行改变。然后,这些改变可被发送到宇宙服务器105n并被存储在服务器棱镜中。然后,集中式渲染系统可以在服务器棱镜中渲染更新后的数据。集中式渲染系统在下文中可以被称为“cali”或“kali”系统。宇宙浏览器引擎可以被认为是例如cali服务器的增强版本,因为宇宙浏览器引擎可以管理现实世界中的棱镜。
[0215]
在一些实施例中,创建用于宇宙浏览器引擎的虚拟内容(例如,图1m中的115a或115b,图1o中的115)的每个应用140经由被安装在相应的(一个或多个)应用140的每一个上的集中式渲染服务客户端150n(下文可以被称为“cali客户端”)与集中式渲染系统和宇宙浏览器引擎进行通信。更多的信息可在2017年3月30日提交的题为“centralized rendering(集中式渲染)”的美国临时专利申请序列号62/479,134中被公开,其全部内容通过引用并入本文。集中式渲染系统通过确保来自多个不同应用的虚拟内容在必要时被正确
分析和处理以确保虚拟内容以逼真的方式被显示给用户来改善了用户体验。在一些实施例中,宇宙浏览器引擎是cali服务器的实例并带有附加功能(诸如管理棱镜)。在一些实施例中,客户端棱镜是客户端体积的实例,而服务器棱镜是服务器体积的实例,并带有附加功能,诸如提出应用选项显示、在棱镜正在加载它的内容显示加载器体积、与其他棱镜碰撞、以及成为变换树的一部分的能力。
[0216]
客户端棱镜115n

a和客户端棱镜115n

b包括由应用140生成并由cali客户端150n

a发送到宇宙服务器105n以在用户景观中显示的虚拟内容。在一些实施例中,当应用140对虚拟内容115n

a和115n

b进行改变时,虚拟内容的变化从客户端棱镜115n被传输到宇宙服务器105n,并且该信息被存储在对应的服务器棱镜数据结构中(例如,图1m至图1n中的113a或113b,或图1o中的113)的宇宙浏览器引擎内部。在一些实施例中,应用140不知道虚拟内容115n

a在用户景观中被显示的位置。宇宙浏览器引擎可以经由与客户端棱镜115n

a相关联的对应服务器棱镜113a来管理虚拟内容115n

a的显示位置(例如,在已被集中式渲染系统处理之后的虚拟内容115a)。
[0217]
应用140可以通过访问宇宙服务器105n来请求新的棱镜。在一些实施例中,宇宙服务器105n可以是宇宙浏览器引擎中的与来自提供虚拟内容以在用户景观110中显示的应用的(一个或多个)集中式渲染服务客户端150n进行通信的软件模块。例如,当用户想要启动应用并在用户景观中显示来自应用的虚拟内容时,应用可以将虚拟内容经由集中式渲染服务客户端从应用提供到宇宙浏览器引擎上的宇宙浏览器引擎集中式渲染服务以被显示在可被锚定在用户景观中的棱镜中。
[0218]
在一些实施例中,图标网格应用160n可以包括最新应用区(未示出)和/或通用应用区(未示出)。通用应用区包括表示被安装在混合现实系统上的每个应用的图标。通用应用区最初可用对软件包管理器(未示出)的调用以确定已安装的软件包的列表来填充。对每个软件包中的每个应用添加图标。当软件包管理器向宇宙浏览器引擎通知软件包安装和卸载时,图标网格应用160n相应地调整它的图标。软件包管理器服务管理应用的安装,并维护关于这些应用的信息,诸如它们的名称、图标图形、安全权限、可执行文件和数据文件。
[0219]
最新图标区可以最初从磁盘上的日志来重建,然后通过来自其他服务的调用进行更新。当生命周期服务向启动器通知应用启动事件时,并且当软件包管理器向启动器通知软件包卸载事件时,软件包名称可以被记录到磁盘。用户可通过选择要启动的图标或提取要放置到景观中的图标来与图标网格应用260交互。
[0220]
生命周期服务可以是管理启动、停止、进入睡眠和唤醒应用的进程的集中式服务。生命周期服务还知道应用何时意外终止(崩溃)。当这些事件中的任何一个事件发生时通知服务的监听器,而宇宙浏览器引擎是这些监听器之一。宇宙浏览器引擎访问该服务以启动、停止、睡眠和唤醒应用。在一些实施例中,生命周期服务提供用于控制在混合现实系统中运行的应用进程的生命周期的应用编程接口(api)。生命周期服务可以产生新的进程以运行具有一组权限的应用二进制文件,并在由应用实现的预定义接口上调用api以控制它们的生命周期。生命周期服务还提供监听器接口,其他模块可以通过该接口来跟踪被启动/停止/暂停/恢复的应用。生命周期服务可以是与启动器或宇宙浏览器引擎分离的程序。在一些实施例中,生命周期服务可以是中间件。
[0221]
在一些实施例中,如图1n所示,图标网格应用160n包括集中式渲染服务客户端
250b和客户端棱镜115n

c。如上所述,在一些实施例中,在用户景观内显示内容的应用可以将其内容经由与宇宙服务器105n通信的集中式渲染服务客户端150n发送到宇宙浏览器引擎。在此,对启动器菜单提供在混合现实系统上已安装的应用的图标的图标网格应用160n就像提供内容以用于在用户景观中显示的任何其他应用一样。然而,在一些实施例中,图标网格应用内的图标在被用户选择时可以指示宇宙浏览器引擎启动和开始新应用,此时,新应用可以请求宇宙浏览器引擎创建新的棱镜(例如,通过宇宙服务器105n),以使得应用可以提供内容以被显示到新的棱镜中。如果应用已经在执行中,则宇宙浏览器引擎可以请求应用打开新的棱镜。
[0222]
状态栏应用170n包括用于混合现实系统的状态指示符。状态指示符和状态栏应用170n可以不是用户可调整的。状态指示符最初可以通过查询用于操作和维护wi

fi服务的第一服务、用于维护蓝牙服务的第二服务、以及用于状态的第三服务来填充。当这些服务向状态栏应用170n通知更新后的状态时,状态栏可以相应地调整。状态栏向用户提供快速可浏览信息,他们可以从系统的任何地方快速有效地做出反应。在一些实施例中,状态栏可以被显示在启动器上方。状态栏中的四个主要区域可以是(1)全局搜索、(2)通知、(3)快速设置和(4)电源。在需要时可以向状态栏添加附加的临时区域,诸如音乐、调用、共享等。
[0223]
当用户在启动器菜单中时,状态栏被紧缩为可浏览图标。当用户向上滑动到顶部时,它可以触发动画,并且状态栏可以展开。状态栏可以保持在启动器上方,而用户可在启动器面板上左右滑动。当状态栏被突出显示时,它可以展开并向前动作。子选择突出显示可以默认出现在左侧,例如,在全局搜索中。如果其他区域具有更紧迫的内容(例如,最新通知、电池电量不足等),则子选择突出显示可以出现在该区域。
[0224]
社交面板应用180n可以由用户可以与之交互的一系列联系人组成。社交面板最初可用对用于可用联系人的联系人服务的调用来填充。每个联系人可以被添加到社交面板并作为图标被显示给用户。当社交面板应用280接收到新联系人事件、更新的联系人事件和移除的联系人事件时,社交面板应用180n可以相应地调整它的联系人信息。用户可以通过点击联系人图标以弹出具有各种联系人提供者可用的选项菜单来与联系人图标进行交互。当用户选择提供者时,启动器应用可以启动与联系人的信息相关联的应用。
[0225]
商店面板应用190n可以允许用户搜索、下载和安装用于混合现实系统的(一个或多个)应用140。当用户请求下载和安装应用时,启动器应用130n可以用身份验证服务(未示出)来验证用户的身份,然后可以用软件包管理器来安装应用。如果用户从面板启动应用,则可以调用生命周期服务。在一些实施例中,启动器中的每个面板可以用作单独的应用而不是作为一个启动器应用。
[0226]
在一些实施例中,宇宙客户端125n渲染专用于宇宙浏览器引擎的内容。宇宙服务器105n不渲染第三方应用。这是因为棱镜内的内容只能由宇宙客户端125n渲染,而不能由宇宙服务器105n渲染。因此,为了渲染无限棱镜、加载器体积/棱镜、和/或辅助ui(用户界面)棱镜,可能需要委托宇宙客户端125n来渲染那些用于服务器的特定类型的内容。例如,当两个棱镜碰撞时,宇宙可以使用无限棱镜来渲染棱镜周围的附加图形。无限棱镜将在下面进一步讨论。采用加载器棱镜和辅助ui棱镜,在宇宙服务器105n与宇宙客户端125n之间可以存在特定通信以协调某些功能。
[0227]
例如,宇宙服务器105n可以被告知应用完成加载。然后,宇宙服务器105n可以通知
当前正在加载应用的客户端侧加载器棱镜。加载器棱镜会不得不通过显示动画来对应用完成加载的事件做出反应。一旦客户端侧加载器棱镜完成了动画的显示,加载器棱镜可以通知宇宙服务器105n它完成了动画。然后,宇宙服务器105n可以通过强制放置加载器棱镜、销毁加载器棱镜、以及用已渲染的动画代替加载器棱镜来显示应用棱镜来对加载器棱镜完成了动画的通知做出反应。所公开的只是宇宙客户端125n如何运作的一个示例。本领域的普通技术人员可以理解,可以存在宇宙客户端125n何时可协助宇宙130的其他示例。
[0228]
图1o图示了一个或多个实施例中的宇宙浏览器棱镜的示例。应用内容在一个或多个有界体积(被称为棱镜)内部被呈现给用户。如上所述,当在混合现实系统中执行非沉浸式应用时,它的内容在棱镜内部被渲染。棱镜的特性和特点允许宇宙浏览器引擎一致地管理用户景观内的棱镜。
[0229]
棱镜113的体积空间可以具有清楚且明确的边界,如图1o中的虚线所指示的。边界提供了有界体积以用于虚拟内容115仅被显示在棱镜113的边界内。棱镜的边界防止在棱镜内显示的来自应用的内容溢出或流出棱镜并进入用户景观。当用户看件被显示在棱镜113内的虚拟内容115时,棱镜113的边界可以不被显示给用户。这是重要的特征,因为为了在用户景观中保持3d内容的逼真显示,重要的是不显示限制虚拟内容115的棱镜的边界。普通技术人员理解不显示包围虚拟内容115的棱镜的边界并因此虚拟内容可以在用户景观中以更逼真的方式显示的重要性。与2d窗口相反,通常显示2d窗口的边界和界限,因此,显示2d窗口的计算机的用户可以清楚地区分一个2d窗口内的内容与来自另一个2d窗口的内容。然而,在一些实施例中,至少暂时显示棱镜的边界以例如帮助解决一个或多个应用的问题可以是有利的。
[0230]
由宇宙浏览器引擎对应用给定棱镜113的实例以在其中放置内容。应用可以使用相对放置算法和/或任意变换来在棱镜113内渲染2d和/或3d内容,但是,宇宙浏览器引擎仍然最终负责总体交互模式(诸如内容提取)。多个应用可以经由棱镜113渲染到宇宙浏览器引擎,其中进程边界分离棱镜。
[0231]
在宇宙浏览器引擎中被分配的每个棱镜具有相关联的一组键值特性,这些键值特性可以被调整并可以确定各种行为位或传达关于给定棱镜存在的原因的信息。某些特性对于普通应用是只读的,但对于具有私有api的应用,这些特性是可写的。棱镜113可以包括棱镜特性110o、应用特定特性120o、以及虚拟内容115。另外,一些棱镜113包括用于向用户提供附加棱镜管理选项的辅助ui体积130o。然而,在一些实施例中,棱镜可以没有辅助ui体积130o,例如,因为这些其他类型的棱镜(例如,启动器菜单棱镜)可以不需要由辅助ui体积130o所提供的特征。对于棱镜的边界,辅助ui体积130o也可以不被显示给用户。当用户想要对棱镜进行改变时,用户可以发起显示应用选项菜单的请求,该应用选项菜单显示在辅助ui体积的体积空间内的棱镜的ui控件。
[0232]
取决于它们所拥有的应用,棱镜可以要求不同的特性,以便对它们的内容提供适当的反馈和行为。应用开发者在创建他们的应用时,可以基于他们的喜好而为他们的棱镜从多个预编程选项中进行选择,因此,他们的内容可以被正确地表示。以下是其中一些选项的示例。
[0233]
棱镜特性110o至少部分地定义棱镜,并允许宇宙浏览器引擎管理和维护用户景观内的棱镜。例如,棱镜特性110o可以包括以下中的一个或多个:默认尺寸,最大尺寸,最小尺
寸,锚定/放置类型(例如,公告的选项等),给定棱镜对锚定类型的行为,锚定位置,子棱镜产生位置,子头部姿势突出显示,表面行为,独立的变换控制,调整尺寸与重新缩放指示符,空闲状态超时变量等。棱镜特性110o允许宇宙浏览器引擎能够跟踪并管理用户景观内的每一个棱镜。使单个应用管理在用户景观内显示的虚拟内容确保了在用户环境内被显示的内容以一致且可靠的方式被显示。下面进一步公开一些棱镜特性110o。
[0234]
最大、最小和默认尺寸:应用可以具有由应用开发者(可选地,用来自宇宙浏览器引擎的附加限制)指定的上界和下界。此外,当应用首次启动时,应用开发者可具有默认尺寸。
[0235]
在移动序列期间公告的选项:某些对象(例如,是平面的内容)对于在移动序列期间向用户进行公告以鼓励易读性和较少管理是有意义的。例如,在平面表面上显示的特定内容可被定位在特定位置和/或相对于对象被定位,但它们的定向被自动地计算,以使得在平面表面上显示的内容始终面向用户观看在平面表面上显示的内容的方向。其他可选的身体动力学行为也可被添加到其中。
[0236]
子棱镜产生位置:棱镜可以产生子棱镜以创建灵活的布局。应用开发者应当能够确定子棱镜可相对于父棱镜产生的响应性位置范围。子头部姿势突出显示:应用可以能够选择在子棱镜上的头部姿势突出显示是否被视为单独的突出显示,或者是否继续将所有子/父棱镜作为一个单元来突出显示。
[0237]
子棱镜关系行为:棱镜可以确定它们的(一个或多个)子棱镜在平移、旋转和缩放时是否可被锚定到它们,并且还选择(一个或多个)子棱镜是否将与主棱镜一起关闭。
[0238]
表面行为:棱镜可以被对齐到表面,并查询该表面以确定它们是否想要尺寸/缩放变化。如果表面具有空间,则棱镜可以调整尺寸以适应整个表面或部分表面和用户的视场(fov)因素。
[0239]
独立的变换控制:应用可以请求对它的平移、旋转和缩放的独立控制。这可以允许应用移动和变换自身。
[0240]
调整尺寸与缩放:一些应用可以选择调整它们的边界的尺寸而不是仅缩放它们的内容。这可以容纳要在它们的边界内被显示的更多内容。这可以更像已有的计算机2d窗口那样起作用。
[0241]
空闲状态超时:应用可以能够选择它们进入其空闲状态所需的时间。这可以处理应用可能希望即使它们不在视野中也继续播放内容的情况。例如,即使用户暂时将视线移开,显示实时视频的应用也可能希望继续显示内容并播放音频。
[0242]
应用特定特性120o可以是存储针对每个棱镜的应用特定状态信息的键值对列表。键值对列表是特定于应用的,并且键值对提供正在棱镜内被显示或渲染的应用的内容的状态信息。取决于正渲染到棱镜中的应用,键值对列表对于每个棱镜可以不同。例如,如果应用是视频流传输应用,则一些键值对可以包括视频名称、视频的最新观看时间、用于显示视频的纵横比等。
[0243]
针对每个棱镜的棱镜特性110o和应用特定特性120o都可被存储在本地数据库137的数据结构内。当用户在操作混合现实系统并与棱镜交互时,棱镜数据被不断更新。如以上所讨论的,可以通过定期与外部数据库150进行同步来保持本地数据库137的棱镜实例数据。在一些实施例中,本地数据库137和外部数据库150可以近乎实时地进行同步。
[0244]
当用户在宇宙浏览器引擎中启动应用时,用户可以从启动器菜单中拉出棱镜并将所得到的体积放置在空间中。可以使用启动应用的其他方法,诸如点击应用图标。在一些实施例中,用户可以通过向上或向下移动控制器/输入设备(例如,图腾)来在高度和方位(在球壳上)上移动棱镜。为了将物体移近或移远,用户可以使用图腾上的操纵杆来“推”或“拉”棱镜,或者可以将用户的手指滑过图腾的触敏部分。这具有改变球壳的半径的效果。在一些实施例中,图腾上的两个按钮可以使棱镜增大或缩小。最后,旋转图腾本身可以旋转棱镜。这假设图腾可以有六个自由度(dof)。例如,这与在vr绘画应用中使用的控件种类一致,但图腾可以是任何合适的用户输入设备。
[0245]
在一些实施例中,棱镜可以不允许它们自己被放置成使得它们完全或部分地与其他棱镜相交。棱镜可以完全不相交,或者可以不在完全相同的位置(锚定点)驻留/主动显示,例外是棱镜可出于物理的目的而少量重叠,如下面所讨论的。如果超过一个棱镜被放置在完全相同的位置,则可显示活动的应用,并可隐藏被锚定在完全相同位置处的其他应用。用户可以能够通过例如在体积中显示的点来判断在一个位置有多个应用。例如,如果在特定位置有三个棱镜/应用,则可以有三个点。如果用户正在查看三个应用中的应用#2,则第二个点可以变亮,而其他点可以变暗。然后,用户可以滑动或滚动经过不同的应用。图形可以切换,并且点可以更新(例如,通过使活动点变亮)以显示哪个应用当前是活动的。
[0246]
在一些实施例中,几个棱镜可以共址在同一锚定位置。乍一看,这似乎是奇怪的事情。既然所有的3d空间可用于在用户景观中放置应用,为什么要将它们放置在同一位置呢?例如,用户喜欢玩虚拟棋盘游戏的地方可以是在厨房桌子上。早上,用户可能喜欢在吃早餐时玩“ticket to ride”。但是当用户下班回家时,用户可能喜欢与电脑对战“risk”。用户可以在同一位置有多个棋盘游戏,并在需要时在它们之间进行切换。
[0247]
在一些实施例中,棱镜可以被放置在空间中的任意位置。在这种情况下,棱镜可以通过立方体/矩形体积的中心点被锚定。但是,如果(例如,在放置期间)棱镜被移动到景观中的水平表面附近,则棱镜可以尝试对齐到该表面。然后,锚定点可以变成棱镜的底面的中心。类似地,如果朝着垂直表面(例如,墙壁)移动棱镜,则它可以尝试对齐到该垂直表面,并且锚定点可以变成棱镜的靠近垂直表面的侧面。
[0248]
锚定点的目的可以是放置棱镜,以使得它不与棱镜被锚定到的表面相互穿透。锚定点也可以随着它被锚定到的对象移动。当多个棱镜共享同一位置时,该位置可以是锚定点,而不是它们相应的体积的中心点。应用不知道也不需要知道它们所处的位置,但是应用可以询问它们相应的棱镜以看到相应的棱镜是如何被锚定的。应用还可以指定哪些锚定类型是有效的。例如,将halcyon锚定到垂直表面是没有意义的。
[0249]
用于应用的所有内容(图形)可以被包含在棱镜的体积内。宇宙浏览器引擎可以自动遮掩延伸到棱镜以外的图形。因为应用不知道世界中的其他应用,所以,宇宙浏览器引擎可以管理在不同应用的不同棱镜之间发生的交互。
[0250]
用于放置棱镜的用户界面设计可以要求棱镜在它们在放置状态下被移动时以物理方式摇摆(像在绳上的物体)。代替试图预测不同的应用想要什么种类的物理行为,棱镜可以在它被放置时(通过binder接口)将移动信息提供给应用。然后,应用可以适当地运行。
[0251]
当棱镜被放置时,也可以在棱镜之间存在物理行为。这可以覆盖(override)应用的物理实现,并且应用可以停止接收移动数据。棱镜最初可以抗拒相交。如果用户继续将两
个棱镜推到同一位置,则棱镜可以对齐到它与之相交的棱镜的锚定位置。这可以以感觉有弹性的方式(例如,类似于彼此相互作用的肥皂泡)来完成,并且大致基于物理学。
[0252]
音频发射器可以作为子节点被放置在应用的场景图中。这些节点对于根节点变换可以是本地节点。因此,棱镜可以被移动,其中棱镜的移动不需要应用更新音频节点的变换。宇宙浏览器引擎可以负责音频发射器到世界空间的最终变换。棱镜也可以负责将音频节点限制到它的边界。应用可以不从其相应的棱镜以外的点发出音频。
[0253]
在一些实施例中,可能不期望空间化音频。例如,如果用户将虚拟电视(tv)放在墙上并专注于tv图像,则tv的音频可以提供给用户而无需修改。这有可能向用户提供更好的音频体验。在环绕声的情况下,音频信号已经具有空间信息。声音可以从被放置在相对于电视的最佳位置的虚拟扬声器发出。
[0254]
在一些实施例中,在用户按下按钮以控制音频强度时,宇宙浏览器引擎可以检查头部姿势以确定用户正在看哪个棱镜并将音量增大或音量减小事件发送到对应的棱镜。棱镜可以将该信息转发到在棱镜中运行的应用,并且该应用可决定如何解释它。如果在景观中没有关注的应用,则音量按钮设置可以调整全局音量。
[0255]
在一些实施例中,传统的2d窗口与棱镜113之间的一个区别是:采用2d窗口,设置2d窗口的界限的边界旨在被用户看到,从而提供有形的边界以包含与2d窗口的边界以外的内容分开的2d窗口内的内容。然而,在一些实施例中,3d窗口(例如,棱镜113)的边界是不可见的。如果用户可以看见每一个棱镜的轮廓(例如,边界),则会打破“现实”的错觉,并且在使其边界被显示的棱镜内显示的虚拟内容会看上去像计算/数字/虚拟内容而不是真实内容。在一些实施例中,可以显示边界,例如以使用户能够按需操纵。
[0256]
另一个区别是2d窗口通常意味着由用户控制和/或与用户交互。例如,关闭按钮可以总是出现在传统2d窗口的右上角,或者菜单栏可以被显示在2d窗口的顶部边界。然而,采用棱镜,用户通常不与棱镜及其边界交互。相反,可以暂时下拉辅助菜单(例如,应用选项菜单),以供用户从选项列表中控制和管理/操纵棱镜。
[0257]
此外,2d窗口与其周围环境无关。例如,如果用户移动屏幕,则在计算机屏幕上所显示的内容不会自动改变。然而,棱镜需要被放置在现实世界的背景中。例如,每个棱镜可以相对于以下项而被放置到现实世界中:(1)真实环境中的对象,诸如墙壁、台子等;(2)虚拟对象,其被创建以提供棱镜要锚定到的幕布或画布;和/或(3)用户。在一些实施例中,棱镜可以被放置在联结式世界以及现实世界的背景中。
[0258]
更进一步,在一些实施例中,可以不允许棱镜彼此重叠/穿透,例外是棱镜可以为了物理目的而少量重叠。例如,在一些实施例中,当在两个或更多个棱镜内的虚拟内容碰撞时,虚拟内容可以看起来显示了当两个虚拟内容看起来彼此碰撞时在它们之间的反弹。在此,棱镜可以重叠一小部分以创建两个虚拟内容之间的反弹的效果。在一些实施例中,当两个或多个棱镜的边界框碰撞时,棱镜并因此棱镜的内容可以看起来反弹。
[0259]
然而,计算机上的2d窗口确实重叠,并且在许多情况下,2d窗口可以在彼此的顶部级联,从用户的视野隐藏彼此。在一些实施例中,如果两个棱镜被锚定在用户景观110中的相同位置,则可以显示其中一个棱镜,而另一个棱镜从显示中被最小化,其中图标或文本或图像(或任何其他视觉指示符)被显示以向用户指示另一个棱镜被锚定在完全相同的位置。在一些实施例中,例如当棱镜发生碰撞时,可以实现无限棱镜以在棱镜周围渲染附加图形。
在一些实施例中,无限棱镜可以是其边界被设置为无限的棱镜。
[0260]
例如,如果两个棱镜靠近而碰撞,则宇宙浏览器引擎可以在两个棱镜之间的空间区域中渲染微光。为了处理这些异常,宇宙浏览器引擎可以创建无限棱镜,其可以包含两个棱镜周围/四周的所有空间、用户的整个视场(用户当前可以看到的)、用户的整个观测场(用户如果四处移动则可看到的)等。这可以允许宇宙浏览器引擎在两个棱镜之间的任何地方绘制图形。在一些实施例中,无限棱镜可以不以任何方式碰撞或相互作用。在一些实施例中,无限棱镜没有辅助ui等。在一些实施例中,只有宇宙浏览器引擎可以访问无限棱镜。无限棱镜可以在宇宙浏览器引擎初始化时被创建,并可以一直存在,直到宇宙浏览器引擎关闭。在第二个示例中,无限棱镜可以有用,以便让角色(例如,化身、个人助理、蝴蝶、动物等)在其他景观应用之间移动,以例如向用户解释每个应用是什么和/或如何使用该应用。
[0261]
图1p图示了在一个或多个实施例中的浏览器的初始化以用于显示网页并将网页面板的位置和/或旋转数据重置为默认值的示例。在该示例中,浏览器(104p)初始化以加载感兴趣的网页(102p)。浏览器(104p)与宇宙浏览器引擎(106p)协同工作,在158p将默认位置和旋转数据发送到浏览器引擎(104p)。在156p,宇宙浏览器引擎(106p)进一步重置用于网页的网页面板的位置和旋转数据。在160p,浏览器引擎(104p)从宇宙浏览器引擎接收默认位置和旋转数据,并将默认位置和旋转数据存储在非暂时性计算机可读介质(108p)中。
[0262]
图1q图示了在一个或多个实施例中的用get请求来确定网页面板的位置和/或旋转数据的示例。在该示例中,感兴趣的网页(102q)可以被编码以例如在浏览器加载该网页时,响应于用户的输入,或者由某些事件触发等,在108q处向浏览器或浏览器引擎(104q)发出获得网页面板的位置和旋转数据的请求。在110q处,浏览器或浏览器引擎(104q)可以从非暂时性计算机可读介质(106q)获得位置和/或旋转数据。然后,在112q处,浏览器或浏览器引擎(104q)可以将该位置和/或旋转数据从非暂时性计算机可读介质(106q)返回给网页。
[0263]
图1r图示了在一个或多个实施例中的用set请求来确定网页面板的位置和/或旋转数据的示例。在该示例中,感兴趣的网页(102r)可以被编码以在浏览器加载该网页时在152r处向浏览器或浏览器引擎(104r)发出设置网页面板的位置和旋转数据的请求。在接收到位置和/或旋转数据后,在154r处,浏览器或浏览器引擎(104r)可以更新先前被存储在非暂时性计算机可读存储介质108r(例如,高速缓存)中的位置和/或旋转数据。
[0264]
在156r处,浏览器或浏览器引擎(104r)可以进一步将所接收的位置和/或旋转数据连同set请求一起传递给宇宙浏览器引擎(106r)。然后,浏览器或浏览器引擎(104r)可以将该位置和/或旋转数据从非暂时性计算机可读介质(108r)返回到网页。为了完成set请求,宇宙浏览器引擎106r可以通过使用与set请求一起接收并在158r处被发送的位置和/或旋转数据来在110r处设置网页面板的位置和/或旋转数据。
[0265]
参考图1s至图1x和图2j至图2m描述的至少一些实施例提供了操纵和使网页开发者能够操纵(例如,设置、调整等)网页的定向(例如,绕一个或多个轴旋转)而不是网页的位置的技术。在这些实施例中的一些实施例中,开发者被限定为将网页设置成相对于用户的参考框架的水平定向或垂直定向,而不是二者之间的任何其他角度。在其他一些实施例中,开发者可以被限定为将网页设置成水平定向或垂直定向以及两者之间的任何其他预定角度。对这些网页的位置的操纵可以例如由本文描述的宇宙浏览器引擎提供,但不提供给网
页开发者。在这些实施例中,网页开始于例如由本文描述的宇宙浏览器引擎确定的位置。采用例如由宇宙浏览器引擎提供操纵网页相对网页的开发者的定向的能力以及操纵网页的位置和定向的能力,这些实施例还可以提供操纵和使本文提供的xr系统的用户能够操纵网页的位置和定向的技术。
[0266]
更特别地,图1s图示了在一个或多个实施例中的与网站交互以用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的简化系统的高级框图。更特别地,宇宙浏览器引擎106s可以将网页的定向数据发送到浏览器引擎104s,以将这种数据存储在浏览器引擎104s中。宇宙浏览器引擎(例如,106s)可以充当3d窗口管理器,其类似于在膝上型计算机或台式计算机上运行的用于管理在膝上型计算机或台式计算机的显示屏上显示的2d窗口的2d窗口管理器。与宇宙浏览器引擎一起工作的宇宙浏览器应用还经由混合现实系统来管理虚拟内容在用户景观中的生成、放置和显示。当浏览器引擎104s初始化(例如,当用户启动浏览器或加载/访问网站时)以显示网站102s的网页或其中的内容时,当网站被编码以并入api集合(其被编码为既将定向数据设置到客户端的浏览器又从客户端浏览器获得定向数据)时,浏览器102s可以设置要由浏览器引擎104s渲染的网页的定向数据(108s)。
[0267]
浏览器引擎通常是网络浏览器的软件组件,其执行诸如将网页的html和/或其他资源变换为在用户的设备(例如,混合现实头戴设备)上的交互式视觉表示的任务。以下描述可以参考chromium或基于chromium的浏览器,但也可以设想其他浏览器(例如,mozilla的firefox、苹果的safari、微软的edge和internet explorer、google的chrome、opera、3d浏览器等);并且这些技术以完全相同的效果应用于与其相应的浏览器引擎对应的不同浏览器(例如,mozilla的gecko,用于safari的webkit,用于chrome、基于chromium的浏览器、微软的edge和opera的blink,以及用于internet explorer的trident等等。)
[0268]
浏览器引擎104s可以包括任何公开可用的浏览器,诸如上面刚刚提到的浏览器或任何定制浏览器(例如,3d浏览器)。浏览器引擎104s的功能之一是提供以下功能:例如,用网页的定向数据来将网页的html文档和其他资源变换为在用户的设备上的交互式视觉表示,使用由网站或由宇宙浏览器引擎106s提供的定向数据来计算视觉表示的图形坐标,绘制或渲染棱镜(或其一部分)等。
[0269]
与本文描述的用于管理和显示网页的一个或多个实施例相关的该api集合可以包括符合便携式操作系统接口(posix)api标准并且独立于平台或操作系统以提供空间计算功能的api。在一些实施例中,该api集合可以如上所述地被并入网站的代码中,和/或在一些其他实施例中,该api集合可以被集成到驻留在混合现实系统上的操作系统的一部分或软件应用中。
[0270]
该api集合不仅设置并得到网站102s、浏览器引擎104s和宇宙浏览器引擎106s之间的定向数据,而且结合操作系统与软件应用之间(或更准确地,操作系统服务层与软件应用之间)的运行层和一个或多个3d引擎起作用。该运行层包括库、应用、服务等,并(单独或与3d引擎结合)提供用于底层混合现实系统的高级图形用户界面以及各种计算功能,诸如三维平移和旋转变换、具有材料和骨架3d模型动画的3d模型、2d精灵动画、用于空间计算的高保真空间化文本渲染、2d和声场音频、2d和立体视频、刚体碰撞物理、实时粒子fx、输入事件和触摸控制、手势、语音识别和语音转文本、用于渲染对象、光照、阴影和现实世界遮挡等的实时空间计算技术。
[0271]
例如,该运行层可以包括三维平移和旋转变换集,其可被应用于例如在虚拟三维空间中显示的棱镜(将在后面描述)、虚拟对象、浏览器窗口、所渲染的网页等,以使得虚拟对象、浏览器窗口、所渲染的网页等或其任何属性(例如,显示坐标、尺寸、形状、视角、光照效果等)看起来是或被用户感知是真实的或接近真实的。
[0272]
返回到图1s,采用api集合,网站102s可以从浏览器引擎104s发送对定向的请求(112s)。在这种情况下,浏览器引擎104s可以将最新的定向数据发送到网站(114s)。如上所述,宇宙浏览器引擎106s可以将定向数据存储在浏览器引擎104s中或与浏览器引擎104s一起存储(例如,在浏览器引擎104s可访问的高速缓存中),以使得浏览器引擎104s可以对来自网站102s的这种请求做出响应,而无需例如从宇宙浏览器引擎106s获得这种定向数据的额外延迟。
[0273]
除了向网站102s返回最新的定向数据(114s)之外,浏览器引擎104s还可以将定向数据(110s)单独或连同所渲染的网页一起发送到宇宙浏览器引擎106s。宇宙浏览器引擎106s基于经由110s接收到的定向数据来创建或识别棱镜(或其较小的体积);并且宇宙浏览器引擎106s与浏览器引擎(104s)同步定向数据(116s)。宇宙浏览器引擎106s可以调用浏览器引擎104s以调用它的本机函数、库和/或api(例如,chromium或webkit中的renderwidget、opengl api、opengl es 2.0api等、几乎本机图形层引擎(almost native graphics layer engine)、direct3dapi、webgl、gfx api等或其任何组合)以基于定向数据来渲染网页的内容以用于在棱镜或其一部分中显示。
[0274]
在一些实施例中,宇宙浏览器引擎106s可以调用在操作系统堆栈中的操作系统核心和操作系统服务之上运行的一个或多个3d引擎来渲染3d内容。这些一个或多个3d引擎可以包括提供图形处理单元(gpu)的抽象层的商业或公开可用的3d引擎(例如,虚幻引擎4、虚幻引擎3、cryengine v、unity 3d、源引擎、源引擎2等)、用于3d和/或2d图形的任何自定义3d引擎。在这些实施例中的一些实施例中,混合现实系统不需要包含整个3d引擎。相反,混合现实系统可以包含较小的部分,诸如渲染引擎或渲染api、用于模拟物理定律的物理引擎、用于解析和执行脚本(诸如javascript脚本)的脚本引擎、存储器管理模块、和/或线程模块等。在一些实施例中,本文描述的混合现实系统可以调用用于渲染2d内容的渲染器和单独的用于渲染3d图形的渲染器。
[0275]
用户可以进一步通过混合现实系统来更改在虚拟3d空间中显示的网页的定向。例如,通过抓取分别与定向所显示的网页、其占位符、或网页的迷你预览版本相关联的软件控键,用户可以自由移动和/或旋转所显示的网页、其占位符、或网页的迷你预览版本。因此,网页的定向数据被修改;并且宇宙浏览器引擎106a还可以与浏览器引擎104s同步(116s)定向数据。一旦如此,浏览器引擎104s则用该修改后的定向数据来替换原始的定向数据。
[0276]
应当注意,在参考图1s至图1x和图2j至图2m描述的一些实施例中,网页或其面板的定向数据在一些实施例中可以包括定位数据和定向数据两者,但在其他一些实施例中,定向数据可以仅包括定向数据而不包括定位数据。还需要注意,在定向数据包括定位数据和定向数据两者的那些实施例中,定向数据可以是指定位数据、定向数据、或定位数据和定向数据两者。在定向数据仅包括定向数据(例如,绕一个或多个轴的旋转)的一些实施例中,这些实施例向网页开发者提供了操纵(例如,设置、改变等)网页的定向而非位置的能力。在一些实施例中,网页的开发者可以使用例如window.virtualworld.position和
window.virtualworld.rotation来获得网页面板的当前位置和旋转;并且开发者可以进一步使用例如window.virtualworld.position=newdompoint(x,y,z)和window.virtualworld.rotation=newdompoint(x,y,z)来分别设置位置和旋转。
[0277]
图1t图示了在一个或多个实施例中的与网站交互以用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的简化系统的另一个高级框图。更特别地,图1t图示了一些实施例中的用于网页102t的浏览器面板、浏览器引擎104t和宇宙浏览器引擎106t之间的交互以及由浏览器102t、浏览器引擎104t和宇宙浏览器引擎106t执行的相应任务和功能。浏览器或网络浏览器是用于访问万维网上的信息的软件应用,其中网络资源(例如,单独的网页、图像、视频等)由统一资源定位符标识以使网络浏览器能够从网络服务器检索这些网络资源并将它们显示在用户的设备上。
[0278]
浏览器引擎(例如,104t)是网络浏览器的软件组件,其执行诸如将网页的html和/或其他资源变换成在用户的设备(例如,混合现实头戴设备)上的交互式视觉表示的任务。本文描述的各种实施例利用任何公开或商业上可用的浏览器及其相应的引擎以供开发者和用户通过使用至少前述的api集合、混合现实系统、以及软件应用和库(例如,宇宙浏览器引擎)来管理和显示互联网内容并利用网络资源。
[0279]
网站可以设置感兴趣的网页或网页的面板(102t)设置定向数据(102t),并且还可以请求当前网页的当前定向(102t)。在网页的开发者可能期望以包括特定定向数据的特定方式呈现感兴趣的网页的一些实施例中,网站可以进一步将这种定向数据发送到浏览器(102t)。
[0280]
在一些实施例中,当启动或初始化浏览器以用于显示来自互联网的内容时,浏览器初始化以渲染并显示网站的网页或其中的内容(104t)。浏览器还可以发送要由浏览器引擎渲染的网页的定向数据(104t)。例如,当网站被编码为并入前述的api集合(其被编码为既将定向数据设置到客户端的浏览器,又从客户端浏览器获得定向数据)时,浏览器可以从网站接收该定向数据,并设置网页面板的定向数据以用于显示来自网站的内容。
[0281]
浏览器可以重置用于网页的网页面板的(一个或多个)变换、定向数据(104t)。例如,浏览器可以将网页面板的(一个或多个)3d变换(例如,(一个或多个)3d平移变换、(一个或多个)3d旋转变换、和/或(一个或多个)3d缩放变换)重置为(一个或多个)默认值或(一个或多个)状态。在一个实施例中,(一个或多个)默认值或(一个或多个)状态可以被存储在渲染器(例如,用于webkit和chromium的renderwidget)可访问的非暂时性存储器(例如,高速缓存)中。浏览器可以将来自网站的对定向的请求中继到它的浏览器引擎(104t)。浏览器引擎充当网站与驻留在扩展现实(xr)系统中的宇宙浏览器引擎之间的中介。
[0282]
在网页面板的定向数据被存储在前述的非暂时性存储器中的一些实施例中,浏览器或它的浏览器引擎可以快速响应来自网站的对定向数据的请求,而没有由于例如从宇宙浏览器引擎获得这种数据的额外延迟。当网站或浏览器改变数据或其一部分时,浏览器引擎可访问的该定向数据可以被同步。附加或替代地,浏览器引擎可访问的该定向数据可由浏览器初始化和重置。在一些实施例中,该定向数据可以通过网站的对定向数据的请求(参见102t)来更新。在浏览器引擎从网站接收定向数据的一些实施例中,浏览器引擎可以进一步将数据传递到浏览器。
[0283]
浏览器还可以将定向数据单独地或与所渲染的内容(例如,网页)一起发送到宇宙
浏览器引擎(104t)。宇宙浏览器引擎可以至少部分地基于来自浏览器引擎的定向数据来创建用于显示所渲染的网页的3d虚拟体积(例如,棱镜)。附加或替代地,一些实施例可以向用户提供在由扩展现实(xr)系统创建的虚拟3d空间中操纵所渲染的网页(或内容)的能力。
[0284]
因此,用户可以在虚拟3d空间中移动和/或旋转所渲染的网页,以使得新的变换集需要被应用于所渲染的网页。扩展现实系统的操作系统可以包括运行层和3d引擎,以至少部分地基于从浏览器引擎接收的定向数据来将具有一个或多个变换的新集应用于所渲染的网页。在应用了具有一个或多个变换的新集之后,宇宙浏览器引擎还可以将新的定向数据传送回浏览器引擎(在106t)以更新其中的先前的定向数据。
[0285]
当浏览器初始化所渲染的网页或者当用户操纵所渲染的网页并因此改变定向数据时,浏览器引擎可以从宇宙浏览器引擎接收定向数据(如果可用)(在104t)。因此,浏览器引擎可以用从宇宙浏览器引擎接收(在104t)到并例如在高速缓存存储器中存储的刷新的定向数据来更新被存储在非暂时性存储器(例如,高速缓存)中的定向数据。浏览器引擎还可以设置网页面板的定向数据(在104t)。在网页的开发者已经设置了网页的定向的示例中(例如,开发者已经设置了显示在线棋类游戏的网页的位置和/或旋转),浏览器还可以根据从网站接收到的定向数据来设置网页面板的定向数据。
[0286]
在允许用户更改在棱镜内显示的网页面板的位置的一些实施例中,宇宙浏览器引擎可以用基于用户对网页面板位置的操纵的并被存储在例如高速缓存中的更新后的位置数据来更新被存储在非暂时性存储器(例如高速缓存)中的位置数据。宇宙浏览器引擎也可以设置网页面板的位置数据(在104t)
[0287]
另外,浏览器引擎可以将定向数据发送到宇宙浏览器引擎(在104t),以使得宇宙浏览器引擎可以确定(例如,通过创建新的或从已有的识别)虚拟3d空间(例如,棱镜)以用于经由扩展现实系统呈现所渲染的网页。在向用户提供进一步操纵所渲染的网页的能力的一些实施例中,浏览器引擎可以将所渲染的网页的定向数据提供给宇宙浏览器引擎,后者进而提供软件控键以供用户操纵所渲染的网页,并执行对应的(一个或多个)变换以响应用户的操纵。
[0288]
宇宙浏览器引擎还可以包括操作系统、一个或多个操作系统服务、具有一个或多个运行时应用和库的集合、一个或多个3d引擎、以及扩展现实系统的应用套件,或者与它们结合起作用,以提供用于用户在106t处在虚拟3d空间(例如,一个或多个棱镜)中管理和显示网页和其他内容和/或资源的高级图形用户界面和功能。例如,宇宙浏览器引擎的功能之一是向浏览器引擎提供网页(或其他虚拟内容)的定向数据(和/或位置数据)(在104t)。宇宙浏览器引擎还与浏览器引擎同步最新的定向数据(和/或位置数据)(在106b),以使得最新的定向数据可以(从宇宙浏览器引擎)被推送到浏览器引擎或者(由浏览器引擎)从宇宙浏览器引擎拉取。
[0289]
图1u至图1w图示了在一个或多个实施例中的可在用混合现实系统在三维虚拟空间中管理和显示网页和网络资源中使用的示例浏览器引擎和宇宙浏览器引擎的更详细框图。更具体地,图1u图示了在一些实施例中的用于在虚拟3d空间(例如,棱镜)中设置网页面板的3d定向数据的简化伪代码。在这些实施例中,伪代码基于类似的用于chromium的代码集,但也可以设想用于其他网络浏览器的代码,并且本文描述的技术可以以完全相同的效果来应用。
[0290]
例如,浏览器引擎100u可以在102u执行window.virtualworld.orientation以初始化用于在宇宙浏览器引擎中设置网页面板的定向数据的进程。在一些实施例中,部分或全部基于定向数据以及用于2d或3d空间中的2d和3d实体的一个或多个变换,window.virtualworld.orientation可以利用例如opengl mathematics(glm)(或者任何其他数学库)或用于cse20211(gfx)的简单图形库来设置并获得网页面板的定向数据(例如,通过glm中的伪代码“glm::vec3old_pos(0.0f)”、“glm::quat rotation(glm::vec3(0.0f))”、“glm::vec3scale(1.0f)”和“glm::mat4 transform=web_container_

>getcurrentvolumetransform()”、或者gfx中的gfx::point3frot=local_frame_client

>getvirtualworldrotation()或gfx::point3fflat_rot{

m_pi_2,0.0f,0.0f})。在允许网页开发者仅操纵(例如,设置、更改等)以选择网页面板的0度到90度旋转而不是网页面板的位置的一些其他实施例中,window.virtualworld.orientation可以接受在浏览器引擎中被定义为枚举类型(“enum”)的输入(例如,字符串“flat(水平)”或“upright(竖直)”)。在这些实施例中的一些实施例中,宇宙浏览器引擎可以将枚举类型的输入变换为glm类型,并将数据设置到网页面板。例如,在输入指示水平网页面板的一些情况下,网页面板的旋转可以被设置为{

m_pi_2,0.0f,0.0f}。又例如,在输入指示竖直网页面板的一些情况下,网页面板的旋转可以被设置为{0,0,0}。应注意,在本技术中使用伪代码、编程语言、以及各种类、变量等的名称是为了说明和解释的目的,并且也可以设想服务相同或基本相似的目的任何其他合适的(一种或多种)编程语言、名称等,其也可被用于实现这种目的。以下是在头文件的一部分中实现以包括(一个或多个)函数声明的用于前述的描述的示例代码段,但应注意,也已设想并因此可使用其他类似或等效的实现:
[0291]
[0292][0293]
浏览器引擎100u还可以执行localframeclientimpl::setorientation(106u)(或localframeclient*)、renderframeimpl:setorientation(108u),并如上文所描述地或用在此描述的virtualworld::setorientation、renderframehost*、weblocalframeimpl*发送进程间通信(ipc)消息framehostmsg_setorientation。构造renderframeimpl:setorientation可以被用于调用renderwidget::setorientation和发送ipc消息。构造localframeclientimpl::setorientation是源自c localframeclientimpl.cpp,并使用例如低级图形抽象层(诸如gfx或gfx

rs)以及定向数据来设置和获得用于客户端框架的定向数据。
[0294]
构造renderframeimpl::setorientation是源自c renderframeimpl.cpp,并被配置为基于gfx和定向数据来调用渲染器(例如,用于chromium的浏览器的renderwidget),并将框架传递回浏览器引擎(例如,用于chromium的浏览器的blink)。浏览器引擎100u还可以至少通过在112u处执行renderwidget::setorientation来调用渲染器或渲染进程以更新网页面板的被存储在renderwidget类中的定向数据(例如,被存储在高速缓存存储器中的定向值)。单独的内容渲染进程可以进一步被一个或多个进程(例如,一个或多个渲染功能)执行或触发执行,以根据3d定向数据来“绘制”或渲染感兴趣的网页的内容。更特别地,渲染器进程renderwidget可以使用glue接口(例如,webwidgetdelegate),并在glue接口中实现抽象接口。抽象接口可以包括例如显示空间中的接收输入事件并将内容渲染到其中的2d窗口或3d体积。在辅助显示项(例如,显示选项列表的具有上/下箭头的选择框、选项卡、
弹出窗口、导航命令等)要被渲染的这些实施例中的一些实施例中,浏览器引擎100u还可以执行另一个渲染进程(例如,renderview)以用于这种显示项。
[0295]
上述的(一个或多个)头文件可以用下面列出的一些示例代码来扩充,但其他类似或等效的代码也已经被设想并因此可用于实现类似的目的。
[0296]
[0297]
[0298]
[0299][0300][0301]
下面的部分包括用于renderframe的一些示例代码,但其他类似或等效的代码也
已被设想并因此可用于实现类似的目的。
[0302][0303][0304]
以下包括用于得到定向的一些示例代码,但应注意,其他类似或等效的实现也已被设想并因此可被使用:
[0305][0306]
以下包括用于设置定向的一些示例代码,但应注意,其他类似或等效的实现也已经被设想并因此可被使用:
[0307]
[0308][0309]
在使用chromium或基于chromium的浏览器的一些实施例中,浏览器引擎100u使用它的渲染系统(“视图”)来渲染网页,其中用户界面被构造为负责渲染、布局和事件处理的组件(被称为“视图”)树。组件树中的每个视图有自己的界限并表示用户界面的不同组件;小组件(本机2d窗口或3d体积)位于这种树的根处。
[0310]
一些实施例用定向数据来创建虚拟3d空间(或2d窗口),并将虚拟3d空间(或2d窗口)传递到rootview,然后将事件传播到树中。一些显示项目可以使用被托管在特殊种类的视图中操作系统的控件来渲染,该特殊种类的视图知道如何显示本机小组件和调整其尺寸。这些显示项包括例如按钮、表格、单选按钮、复选框、文本字段、其他控件等。关于这种组件树的更多细节将在下面参考图2g至图2i进行描述。
[0311]
浏览器引擎可以进一步至少部分地基于定向数据来执行使用“delegate_

>setorientation(orientation)”和“delegate_

>setorientation(orientation)”的webcontentsimpl::onsetorientation(114u)。浏览器引擎进一步用宇宙浏览器引擎特定接口来执行cefuniversebrowserengineprivatehandler::onsetpageorientation(118u),该接口允许cef(chromium嵌入式框架)与宇宙浏览器引擎之间的自定义交互。基于cef的应用可以包括若干组件,诸如初始化cef和运行cef消息循环的入口点、处理进程特定的回调
的cefapp派生类、处理浏览器实例特定的回调(例如,用于浏览器使用寿命、上下文菜单、对话框、显示通知、拖动事件、焦点事件、键盘事件等的回调)的cefclient派生类、由cefbrowserhost::createbrowser()创建的一个或多个cefbrowser实例等。
[0312]
浏览器引擎100u还可以执行构造cefbrowserhostimpl::setorientation(116u)和cefbrowserhostimpl::setorientation(例如,在浏览器主机实现中)以确定处理程序(例如,具有“cefrefptr<cefuniversebrowserengineprivatehandler>handler=client_

>getuniversebrowserengineprivatehandler()”和“handler

>onsetpageorientation(this,orientation)”。应注意,定向可以是也可以不是vector3类型的。例如,定向可以是枚举类型(“enum”)的,例如“水平”、“竖直”等。在定向是vector3类型的一些实施例中,可以使用“handler

>onsetpageorientation(this,orientation.x(),orientation.y(),orientation.z())”。浏览器引擎也可以执行公共函数cefuniversebrowserengineprivatehandler::onsetpageorientation来设置网页面板的3d定向。
[0313]
宇宙浏览器引擎126u可以用从浏览器引擎100u接收到的3d定向数据来执行clienthandler::onsetpageorientation(120u)、browser::onsetpageorientation(122u)和browserwindow::onsetpageorientation和browserwindow::onsetpageorientation(124u)。clienthandler包括在浏览器中运行的事件处理程序,而无需回调到服务器以提供定义规则的手段(例如,可以在浏览器中评估的声明性条件和动作以减少往返延迟或延时)。clienthandler也可以使用glm(opengl mathematics)并委托在虚拟3d空间(例如,棱镜)中设置网页定向。
[0314]
图1v图示了在图1v中的一些前述框之间的通信,以说明如何在浏览器引擎100v处从宇宙浏览器引擎126c获得虚拟3d空间(例如,棱镜)中的3d定向数据。向下的箭头指示执行顺序和/或执行结果的传递;向上的箭头表示值的返回。
[0315]
在这些实施例中,以与上面参考图1u所描述的类似的方式,浏览器引擎100v可以在102v处执行window.virtualworld.orientation以初始化用于在宇宙浏览器引擎中设置网页面板的3d定向数据的进程。应注意,图1v图示了设置并确定一种类型的定向数据而不是另一种类型的定向数据(例如,旋转数据而不是位置数据)的示例,并且可以以与对应的代码相同或基本相似的方式来进行该另一种类型的定向数据的设置和确定。
[0316]
不同于图1u中所图示的浏览器引擎100u,图1v中的浏览器引擎100c可以进一步执行localframeclientimpl::getorientation(106v)和renderframeimpl:getorientation(108v)。如同图1u的描述,构造renderframeimpl:getorientation(108v)可以被用于调用renderwidget::getorientation(112v),并将(一个或多个)值返回给window.virtualworld::orientation以返回定向数据。如同图1u中的localframeclientimpl::getorientation,构造localframeclientimpl::getorientation可以源自c localframeclientimpl.cpp,并使用例如低级图形抽象层(诸如gfx或gfx

rs)以及定向数据来设置并获得客户端框架的定向。
[0317]
如同图1u中的renderwidget::setorientation,浏览器引擎100v也可以通过在106v处执行renderwidget::getorientation来查询定向数据,将定向数据(例如,网页的定向数据)返回到renderframeimpl::getorientation(104v),进而将定向数据返回给触发window.virtualworld.orientation调用的网页。在一些实施例中,渲染器进程
renderwidget可以使用glue接口(例如,webwidgetdelegate),并在glue接口中实现抽象接口。该抽象接口可以包括例如显示空间中的接收输入事件并将内容渲染到其中的2d窗口或3d体积。在辅助显示项(例如,显示选项列表的具有上/下箭头的选择框、选项卡、弹出窗口、导航命令等)要被渲染的这些实施例中的一些实施例中,浏览器引擎100v还可以执行另一个渲染进程(例如,renderview)以用于这种显示项。
[0318]
图1w图示了在一些实施例中的具有用于在浏览器引擎与宇宙浏览器引擎之间同步3d定向数据的伪代码的简化框图。例如,虚拟3d空间中的网页可以被修改(例如,由在虚拟3d空间中移动和旋转网页的用户)。图1w中的框图图示了如何在浏览器引擎100w与宇宙浏览器引擎126w之间同步网页的最新3d定向数据。图1w还可以说明在初始化浏览器时宇宙浏览器引擎126w向浏览器引擎100w发送定向数据的实施例。
[0319]
如图1w所示,宇宙浏览器引擎126w可以在被初始化(120w)时或在接收到网页的修改后的3d定向数据(未示出)时重置网页体积、所渲染的浏览器、和/或棱镜的(一个或多个)变换(122w)。然后,3d定向数据被传递到浏览器引擎100w,其中浏览器引擎100w执行cefbrowserview::updatecachedorientation(102w)。浏览器引擎100w进一步执行renderwidgethostimpl::updatecachedorientation,以用来自宇宙浏览器引擎126w的最新的定向数据来更新定向数据。
[0320]
浏览器引擎100w进一步发送(一个或多个)ipc(进程间通信)消息(例如,viewmsg_updatecachedorientation、viewmsg_updatecachedorientation等),并执行renderwidget::onupdatecachedorientation(108w)以及renderwidget::setorientation(110w)。
[0321]
在一些实施例中,宇宙浏览器引擎126w可以将3d定向数据存储在浏览器引擎100w可访问的非暂时性计算机可读介质(例如,高速缓存)中。因此,每当网页面板在虚拟3d空间中的定向被修改时,宇宙浏览器引擎126w和浏览器引擎100w就会被同步。为了初始化并重置renderwidget中的定向变量,每当网页开始加载时,网页面板的(一个或多个)变换可以被重置为默认值,并且在renderwidget中存储的值也将被更新。
[0322]
图1x图示了在一个或多个实施例中的用set请求来确定网页面板的定向数据的示例。在该示例中,感兴趣的网页(102x)可以被编码以在浏览器加载该网页时在152x处向浏览器或浏览器引擎(104x)发出设置网页面板的定向数据的请求。在接收到定向数据时,在154x处,浏览器或浏览器引擎(104x)可以更新先前被存储在非暂时性计算机可读存储介质108x(例如,高速缓存)中的定向数据。
[0323]
在156x处,浏览器或浏览器引擎(104x)可以进一步将所接收的定向数据与set请求一起传递到宇宙浏览器引擎(106x)。为了完成set请求,宇宙浏览器引擎106x可以通过使用与set请求一起接收并在158x处被发送的定向数据来在110x处设置网页面板的定向数据。
[0324]
图1y至图1aa图示了在一个或多个实施例中的可在用混合现实系统在三维虚拟空间中管理和显示网页和网络资源中使用的示例浏览器引擎和宇宙浏览器引擎的更详细框图。更具体地,图1y图示了在一些实施例中的用于在虚拟3d空间(例如,棱镜)中的网页面板的3d定向更新的示例流程。在这些实施例中,示例流程是基于类似的用于chromium的代码集,但也设想了用于其他网络浏览器的代码,并且本文描述的技术可以以完全相同的效果
来应用。在browserwindow中,在用输入定向值更新网络内容平面后,将调用contentview::onpageorientationchanged。此外,通过cef,将分派通知页面定向改变已完成的事件。在使用javascript的一些实施例中,宇宙浏览器引擎126y可以监听页面定向事件并调用回调。
[0325]
图1y图示了用于从浏览器引擎100y到宇宙浏览器引擎126y的网页变换更新的示例流程。示例流程类似于在上面描述的图1c中所图示的流程。更具体地,浏览器引擎100y可以调用或执行javascript函数调用“window.virtualworld.orientation”来在浏览器引擎100y的一部分上初始化在图1y中所图示的处理流程。
[0326]
如同图1c中的window.virtualworld.3dposition和window.virtualworld.3drotation,诸如图1y中的“window.virtualworld.orientation”和/或“virtualworld”的进程例如可以部分或全部基于3d位置数据、3d旋转数据、缩放、以及用于2d或3d空间中的2d和3d实体的一个或多个变换,利用opengl mathematics(glm)(或者任何其他数学库)来设置和获得网页面板的位置数据(例如,通过伪代码“glm::vec3old_pos(0.0f)”、“glm::quatrotation(glm::vec3(0.0f))”、“glm::vec3scale(1.0f)”和“glm::mat4transform=web_container_

>getcurrentvolumetransform()”)以及旋转数据(例如,通过伪代码“glm::vec3position(0.0f)”、“glm::quatold_rot(glm::vec3(0.0f))”、“glm::vec3scale(1.0f)”和“glm::mat4transform=web_container_

>getcurrentvolumetransform()”)。
[0327]
应注意,在本技术中使用伪代码、编程语言、以及各种类、变量等的名称是用于说明和解释的目的,并且服务相同或基本相似的目的的任何其他合适的(一种或多种)编程语言、名称等也被设想并也可以被用于实现这种目的。另外,应进一步注意,虽然图1y仅图示了设置网页面板的定向(例如,旋转),也可以使用类似技术包含诸如位置改变、缩放改变等其他网页面板变换。
[0328]
浏览器引擎100c可以进一步执行类似于图1c中的virtualworld::set3dposition的图1y中的virtualworld::setorientation以用于设置和获得网页面板的位置、旋转和/或缩放数据(未示出)。
[0329]
浏览器引擎126y可以进一步执行图1y中所图示的localframeclientimpl::setpageorientation、renderframeimpl::setpageorientation和renderwidget::setrotation。浏览器引擎100y可以通过执行或调用例如图1y中所图示的sendipcmessage::framehostmsg_setpageorientation来发送消息(例如,进程间通信(ipc)消息)。构造renderframeimpl:setpageorientation可以被用于调用函数renderwidget::setorientation,并经由sendipcmessage::framehostmsg_setpageorientation发送ipc消息。构造localframeclientimpl::setpageorientation是源自c localframeclientimpl.cpp,并使用低级图形抽象层(诸如gfx或gfx

rs)以及位置和旋转数据来设置和获得用于客户端框架的位置和/或旋转。localframeclientimpl::setpageorientation可以通过以下伪代码实现,以获得并设置网页面板的定向数据:
[0330][0331]
构造renderframeimpl::setpageorientation可以源自c renderframeimpl.cpp,并且被配置为调用渲染器(例如,用于基于chromium的浏览器的renderwidget)和位置和/或旋转数据,并将框架传递回浏览器引擎(例如,用于chromium的浏览器的blink)。
[0332]
浏览器引擎100y还可以通过执行renderwidget::setrotation来调用渲染器,以根据3d位置、旋转和/或缩放数据(例如,由网页面板的开发者设置的位置和旋转数据)来“绘制”或渲染感兴趣的网页。更特别地,渲染器进程renderwidget可以使用glue接口(例如,webwidgetdelegate),并在glue接口中实现抽象接口。该抽象接口可以包括例如显示空间中的接收输入事件并将内容渲染到其中的2d窗口或3d体积。在辅助显示项(例如,显示选项列表的具有上/下箭头的选择框、选项卡、弹出窗口、导航命令等)要被渲染的这些实施例中的一些实施例中,浏览器引擎100y还可以执行另一个渲染进程(例如,renderview)以用于这种显示项。
[0333]
在使用chromium或基于chromium的浏览器的一些实施例中,浏览器引擎100y使用它的渲染系统(“视图”)来渲染网页,其中用户界面被构造为负责渲染、布局和事件处理的组件(被称为“视图”)树。组件树中的每个视图有它自己的界限并表示用户界面的不同组件;小组件(本机2d窗口或3d体积)位于这种树的根处。一些实施例用位置和旋转数据来创建虚拟3d空间(或2d窗口),并将虚拟3d空间(或2d窗口)传递到rootview,然后将事件传播到树中。某些显示项目可以使用被托管在特殊种类的视图中的操作系统的控件来渲染,该特殊种类的视图知道如何显示本机小组件和调整其尺寸。这些显示项包括例如按钮、表格、单选按钮、复选框、文本字段、其他控件等。关于这种组件树的更多细节将在下面参考图2g至图2i进行描述。
[0334]
浏览器引擎进一步至少部分地基于位置、旋转和/或缩放数据来执行webcontentsimpl::onsetpageorientation和cefbrowserhostimpl::setpageorientation。
[0335]
浏览器引擎100y进一步执行cefprivatehandler::onsetpageorientation,并与宇宙浏览器引擎(126y)特定接口通信,该特定接口允许cef(chromium嵌入式框架)与宇宙浏览器引擎之间的自定义交互。基于cef的应用可以包括组件,诸如初始化cef并运行cef消
息循环的入口点、处理进程特定的回调的cefapp派生类、处理浏览器实例特定的回调(例如,用于浏览器使用寿命、上下文菜单、对话框、显示通知、拖动事件、焦点事件、键盘事件等的回调)的cefclient派生类、由cefbrowserhost::createbrowser()创建的一个或多个cefbrowser实例等。
[0336]
图1z图示了用于从宇宙浏览器引擎126y到浏览器引擎100y的网页变换更新的示例流程。当宇宙浏览器引擎126y确定网页变换已经发生时,浏览器引擎100y可以执行具有以下示例代码和在头文件中具有声明“virtual void onmlpageorientationchanged()=0;”的“cefbrowserview::onpageorientationchanged”。随着浏览器引擎知道网页变换,浏览器引擎100y可以进一步执行或调用在对应头文件中具有声明“void onmlpageorientationchanged()override;void onmlpageorientationchanged()override;”的“cefbrowserviewimpl::onpageorientationchanged”。
[0337][0338]
然后,当确定网页变换已经发生时,网络浏览器100y可以使用在对应头文件中具有“virtual void onmlpageorientationchanged()=0;”的以下示例代码来执行“renderbrowserviewimpl::onpageorientationchanged”和“renderwidgethostimpl::onpageorientationchanged”以用于主机实现。
[0339]
void renderwidgethostimpl::onmlpageorientationchanged(){
[0340]
send(new viewmsg_mlpageorientationchanged(getroutingid()));
[0341]
}
[0342]
然后,浏览器引擎100y可以通过使用以下示例代码来执行或调用“sendmessage::viewmsg_pageorientationchanged”以发送消息(例如,进程间消息或ipc)。
[0343]
ipc_message_handler(viewmsg_mlpageorientationchanged,
[0344]
onmlpageorientationchanged)
[0345]
一旦确定网页变换已经改变,则浏览器引擎可以执行具有以下示例代码和在对应头文件中具有“698ipc_message_handler(viewmsg_mlpageorientationchanged,onmlpageorientationchanged)”的
[0346][0347]
浏览器引擎100y可以进一步执行“document::dispatchevent”以分派用于网页变换的事件。javascript“document.addeventlistener(“pageorientaion”,callback)”用以发起指示位置、旋转和/或缩放(网页变换)的变化在浏览器引擎100y侧完成的回调。
[0348]
图1aa图示了在一些实施例中的用于虚拟3d空间(例如,棱镜)中的网页面板的3d定向更新的示例流程中的宇宙浏览器引擎(126y)的部分。在从浏览器引擎(例如,100y)接收到网页面板变换(例如,网页面板的位置、定向或缩放的变化)后,宇宙浏览器引擎126y可以进一步执行构造clienthandler::onsetpageorientation(102aa)以确定处理程序(例如,用“cefrefptr<cefuniversebrowserengineprivatehandler>handler=client_

>getuniversebrowserengineprivatehandler()”和“handler

>onsetvirtualwebpageposition(this,position.x(),position.y(),position.z())”、“handler

>onsetvirtualwebpagerotation(this,rotation.x(),rotation.y(),rotation.z())”)。
[0349]
宇宙浏览器引擎126y可以进一步用从浏览器引擎100y接收到的3d位置、旋转和/或缩放数据来执行browser::onsetpageorientation(104aa)和browserwindow::onsetpageorientation。clienthandler包括在浏览器中运行的事件处理程序,而无需回调到服务器以提供定义规则的手段(例如,可以在浏览器中评估的声明性条件和操作以减少往返延迟或延时。clienthandler也可以使用glm(openglmathematics)并委托在虚拟3d空间(例如,棱镜)中设置网页位置和旋转。
[0350]
图1ab

图1ac图示了一些实施例中的用于事件分派的流程的示例高级流程图。更具体地,在图1ab

图1ac中图示的事件分派流程通过synchronizevisualproperties进行。此外,browserwindowbase::renderloop周期性地或重复地检查以确定网页面板的变换(例如,位置、旋转和/或缩放等)是否已改变。如果browserwindowbase::renderloop确定网页面板的变换已改变,则已改变变换事件将被传播到javascript文档。
[0351]
在一些实施例中,以下示例代码可以被用于在对应头文件中具有类定义“virtual void updateloop(float/*delta*/);”的用于宇宙浏览器引擎(126ab)的browserwindowbase::updateloop(102ab):
[0352]
void browserwindowbase::dozoom(bool zoom_in){
[0353]
active_browser_

>zoom(zoom_in);
[0354]
}
[0355]
在一些实施例中,以下示例代码也可被执行或调用以用于在对应头文件中具有类定义“virtual void updateloop(float/*delta*/);”的用于宇宙浏览器引擎(126ab)的browserwindowbase::updateloop(102ab),以轮询网络节点变换改变并保持舞台和所分离的体积位置被更新:
[0356]
void browserwindowbase::updateloop(float/*delta*/){
[0357]
content_view_

>checkifwebcontenttransformchanged();
[0358]
}
[0359]
在一些实施例中,以下示例代码可以被用于在对应头文件中具有类定义“void checkifwebcontenttransformchanged();”的用于宇宙浏览器引擎(126ab)的webcontentsview::checkwebcontenttransformchanged(104ab):
[0360][0361]
函数cefwindow(106ab)可与对应头文件中的“virtual void webcontenttransformchanged()=0;”相对应。此外,当确定网络内容变换(例如,位置、旋转和/或缩放)已改变时,浏览器引擎100ab可以进一步执行具有以下示例代码的在对应头
文件中具有“void onwebcontenttransformchanged()override;”的函数renderwidgethostviewaura::onwebcontenttransformchanged()(114b):
[0362]
void renderwidgethostviewaura::onwebcontenttransformchanged(){
[0363]
host()

>synchronizevisualproperties();
[0364]
}
[0365]
此外,当确定网络内容变换(例如,位置、旋转和/或缩放)已改变时,浏览器引擎100ab可以进一步执行在对应头文件中具有“void webcontenttransformchanged webcontent();”的具有以下示例代码的widget函数(108ab):
[0366]
void widget::webcontenttransformchanged(){
[0367]
native_widget_

>webcontenttransformchanged();
[0368]
}
[0369]
此外,当确定网络内容变换(例如,位置、旋转和/或缩放)已改变时,浏览器引擎100ab可以进一步执行在对应头文件中具有“voidwebcontenttransformchanged()override;”的具有以下示例代码的函数desktopnativewidgetaura::webcontenttransformchanged()(110ab):
[0370][0371]
此外,当确定网络内容变换(例如,位置、旋转和/或缩放)已改变时,浏览器引擎100ab可以进一步执行在对应头文件中具有“voidwebcontenttransformchanged()override;”的具有以下示例代码的函数desktopwindowtreehostvirtualworld::webcontenttransformchanged()(112ab):
[0372][0373]
在一些实施例中,浏览器引擎(100ab)可以针对支持主框架的小组件执行renderwidget函数。在一些其他实施例中,浏览器引擎(100ab)可以针对支持远程主框架的小组件调用renderview函数。以下示例代码可以被用于在例如116ab和118ab中的
renderwidget函数。应注意,在以下示例代码中的“setisfullscreen(params.is_fullscreen_granted);”能够实现全屏模式而不改变视口尺寸。
[0374]
[0375]
[0376]
[0377][0378]
此外,当确定网络内容变换(例如,位置、旋转和/或缩放)已改变时,浏览器引擎100ab可以进一步执行在对应头文件中具有“void sendpageorientationchangeevent()override;”的具有以下示例代码的函数weblocalframeimpl(120ab):
[0379][0380]
浏览器引擎100ab可以执行“document(文档)”函数(122ab)以分派通知页面定向改变已完成的事件。附加的或替代地,浏览器引擎100ab可以执行javascript函数“document.addeventlistener”以监听(一个或多个)页面定向改变事件(124ab)。
[0381]
图2a图示了在一个或多个实施例中的用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的过程的高级框图。在这些实施例中,在202a,浏览器引擎可以接收用于网页的三维(3d)变换(例如,位置、旋转或缩放的变化)的输入。在一些实施例中,输入可以包括请求呈现感兴趣的网页的混合现实系统的用户的输入,或者偏好并因此编码网页以便以某种方式(例如,位置、定向/旋转、或缩放)被呈现的网页开发者的输入。在一些其他实施例中,输入可以包括对位置和旋转数据的请求。例如,在一些实施例中,可以由感兴趣的网页的网站发出对位置和旋转数据(或者在一些实施例中甚至缩放数据)的请求。例如,网页的开发者可以将应用编程接口(例如,上述的window.virtualworld.3dposition api和window.virtualworld.3drotation api)并入感兴趣的网页的代码中。
[0382]
如上面刚刚描述的,在一些实施例中,输入可以源自例如开发者,该开发者偏好当网页在虚拟3d空间中被呈现时在特定位置和/或以特定旋转来表示网页。在这些或其他实施例中的一些实施例中,输入可以来自用户在由混合现实系统创建的虚拟3d空间中对网页、先前访问过的同一网页、或来自同一网站或可选地来自其他网站的其他网页等的操纵。例如,可以在虚拟3d空间中为用户打开并显示网页;并且用户可以调整网页在虚拟3d空间中的位置和/或旋转。在这些实施例中的一些实施例中,类似的技术还可以应用以操纵用于网页的网页浏览器或在其中渲染网页的棱镜。用户可以在虚拟3d空间中自由地定位并旋转网页表示;并且对这种定位和旋转的唯一约束包括棱镜的边界。在一些实施例中,这种位置和旋转也可以可选地受到网页表示与虚拟3d空间中的一个或多个其他物理和/或虚拟对象之间的碰撞和/或重叠动态的约束,以使得网页表示和虚拟对象看起来是真实的或者被感知为是真实的。
[0383]
浏览器引擎(例如,blink、gecko、webkit、trident等)不是独立的计算机程序。相反,浏览器引擎是网络浏览器的软件组件,它将网页的资源(例如,html文档等)变换成交互式视觉表示。通常用于浏览器引擎的其他术语例如包括布局引擎、渲染引擎等,通过基于层叠样式表(css)中的规则来计算用于视觉表示的图形坐标。
[0384]
顾名思义,浏览器引擎对网页执行布局和渲染,实施安全策略,并实现被开放给页面脚本的dom(文档对象模型)数据结构。浏览器引擎还可以处理超链接和网页表单。在一些实施例中,浏览器引擎利用另一个专用脚本引擎来执行javascript代码。除了执行用于网络浏览器的至少前述功能以外,浏览器引擎还可以针对其他软件程序(诸如电子邮件客户端、软件应用的其他框架(例如,谷歌的电子框架))执行相同或基本相似的功能。
[0385]
在204a处,浏览器引擎可以确定位置和旋转数据,并对3d位置和/或旋转请求进行响应。在一些实施例中,浏览器引擎可以将最新的位置和旋转数据存储在浏览器引擎可访问的非暂时性计算机可读介质(例如,高速缓存存储器)中。每当位置和/或旋转数据被修改(例如,被用户进一步移动、旋转或变换在虚拟3d空间中显示的网页)时,混合现实系统的宇宙浏览器引擎可发送这种位置和旋转数据。
[0386]
当网络浏览器初始化以渲染并显示网页时,它的浏览器引擎可以用被存储在例如浏览器引擎可访问的高速缓存存储器中(例如,在基于chromium的浏览器中的renderwidget类中)的位置和旋转数据来响应这种位置和/或旋转请求。一旦位置和/或旋转数据被修改,则浏览器引擎可用更新后的位置和/或旋转数据或者对来自宇宙浏览器引擎的位置和/或旋转数据的更新来刷新它所存储的位置和/或旋转数据。采用最新的位置和旋转数据,浏览器引擎可以使用例如最新的位置和旋转数据以及管理所渲染的内容的布局的规则(例如,层叠样式表)来渲染网页的内容(例如,通过调用renderwidget类)以计算所渲染的内容的图形坐标。
[0387]
在206a,混合现实系统的宇宙浏览器引擎可以调用浏览器引擎,该浏览器引擎进而调用一个或多个混合现实软件模块和/或硬件机制以在虚拟3d空间中显示网页。例如,取决于网页在虚拟3d空间中(例如,在棱镜中)的旋转和定位,网页的虚拟3d表示可以跨越多个深度平面或多个焦平面。混合现实系统可以利用例如它的可切换的焦平面或可变聚焦机制以基于3d位置和旋转数据来渲染网页的虚拟3d表示。关于混合现实系统的更多细节在本技术的第一段中引用的美国专利申请中进行了描述。在一些实施例中,混合现实机制的这
种调用可以经由浏览器(例如,chromium)和/或浏览器引擎(例如,用于chromium的blink)来完成。例如,浏览器(或它的浏览器引擎)可以将位置和/或旋转数据(或甚至可选地,缩放数据)应用到网页面板,并调用混合现实机制以显示虚拟3d内容。
[0388]
图2b图示了在一个或多个实施例中的用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的过程的更详细的框图。在202b,响应于打开网页的指令(例如,通过用户点击链接、通过用户在搜索字段中输入搜索条件、通过输入网站的url等),网络浏览器或网页面板被启动。宇宙浏览器引擎可以将位置和旋转数据发送到网络浏览器的浏览器引擎,以使得位置和旋转数据可以被存储在非暂时性计算机可读介质(例如,高速缓存)中,或者可以刷新非暂时性计算机可读介质中的位置和旋转数据。然后,浏览器引擎可以将所接收的位置和旋转数据缓存或存储在例如浏览器引擎可访问的高速缓存存储器中。在位置和旋转数据已经被存储在浏览器引擎可访问的非暂时性计算机可读存储器(例如,高速缓存)中的一些实施例中,被存储在非暂时性计算机可读存储器中的所存储的位置和旋转数据可以通过来自宇宙浏览器引擎的位置和旋转数据来被初始化。
[0389]
在204b,网页可以可选地向浏览器引擎发送位置和旋转请求。例如,网页的开发者可以将应用编程接口(api)集合(例如,上述的window.virtualworld.3dpositionapi和window.virtualworld.3drotation api)并入网页的代码中,以使得网络页面在初始化时或在初始化后不久向浏览器引擎发送位置和/或旋转请求。在网页的开发者可能期望以特定的位置和/或旋转表示网页的一些实施例中,网页还可以利用api集合以通过将位置和旋转数据传送到浏览器引擎来设置位置和旋转数据。在这些实施例中的一些实施例中,网页可以响应于用户输入(例如,用户点击链接、用户在搜索字段中输入搜索条件、用户输入网站的url等)而从浏览器引擎获得网页面板的位置和/或旋转数据。
[0390]
在206b,响应于可选的来自网页的位置和/或旋转请求,浏览器引擎可以用被存储在浏览器引擎可访问的非暂时性计算机可读介质中的最新的位置和旋转数据来响应该请求,而没有由于例如从混合现实系统的宇宙浏览器引擎获得这种位置和旋转数据的进一步延迟。如果最新的位置和旋转数据不可用(例如,由于混合现实系统首次被初始化或其他原因),则浏览器引擎可以用默认的位置和旋转的数据来响应来自网页的这种请求。
[0391]
在208b,浏览器引擎还可以将位置和旋转数据发送到宇宙浏览器引擎。例如,一些实施例可以向用户提供在虚拟3d空间中定位和/或旋转网页表示的能力。在接收到get请求的一些实施例中,浏览器引擎将已经被存储在非暂时性计算机可读介质(例如,高速缓存)中的位置和旋转数据返回给网页。宇宙浏览器引擎从网络浏览器的浏览器引擎接收位置和旋转数据,并调用混合现实系统的其他模块(例如,如上所述的运行层、操作系统服务层、一个或多个3d引擎、或一个或多个软件应用等)以及其他硬件和软件组件,以使用户能够在虚拟3d空间(例如,棱镜)中自由地定位和/或旋转网页的表示。在一些实施例中,当网页获得(“get”)位置和/或旋转数据时执行206b;而当网页确定(“set”)位置和/或旋转数据时执行208b。
[0392]
在一些实施例中,当从浏览器引擎接收到位置和旋转数据时,在210b,宇宙浏览器引擎更新网页的位置和旋转数据。在接收到对新的位置和/或旋转数据的set请求的一些其他实施例中,新的位置和/或旋转数据可以被存储在用于浏览器引擎的非暂时性计算机可读介质(例如,高速缓存)中,并且可以进一步被传递给宇宙浏览器引擎。宇宙浏览器引擎进
一步确定位置和/或旋转数据是否已被更新。例如,用户对网页表示的任何定位和旋转可以修改位置和/或旋转数据。如果宇宙浏览器引擎确定位置和/或旋转数据已经改变,则在212b,宇宙浏览器引擎可以更新位置和/或旋转数据,并将位置和/或旋转数据的最新版本发送到浏览器引擎。然后,浏览器引擎可以进而将被存储在非暂时性计算机可读介质(例如,高速缓存)中的位置和/或旋转数据与位置和/或旋转数据的最新版本一起存储。
[0393]
在一些实施例中,在接收到位置和/或旋转数据的最新版本后,浏览器引擎可以进一步计算网页的内容的图形坐标,并渲染网页的内容。然后,可以至少部分地基于位置和/或旋转数据的最新版本来平移、旋转、缩放或以其他方式变换网页面板。在这些实施例中,浏览器引擎可以将所渲染的内容传递给宇宙浏览器引擎,宇宙浏览器引擎进而调用混合现实系统的各种软件和硬件模块以生成所渲染的内容在虚拟3d空间中的表示,并在214b处将所渲染的内容的表示在虚拟3d空间中在平移、旋转、缩放或以其他方式变换后的网页面板中显示给用户。
[0394]
在一些其他实施例中,浏览器引擎用被存储在浏览器引擎的高速缓存中的位置和旋转数据来渲染网页的内容,并将所渲染的内容以及位置和旋转数据发送到宇宙浏览器引擎。宇宙浏览器引擎将所渲染的内容视为软件对象,并允许用户定位和/或旋转网页的所渲染的内容。一旦用户已经确定了网页表示的位置和/或旋转,则宇宙浏览器引擎更新位置和旋转数据,并调用例如变换和渲染模块,以针对软件对象生成网页在虚拟3d空间中的更新表示并将网页的更新表示呈现给用户。在这些实施例中的一些实施例中,当用户在改变网页在虚拟3d空间中的位置和/或旋转时,混合现实系统可以以几乎实时的方式在虚拟3d空间中显示网页(214b),其中在用户的操纵与网页的显示之间没有可察觉的滞后。
[0395]
图2c图示了在一个或多个实施例中的用于识别或创建宇宙棱镜的高级框图,该宇宙棱镜可被用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源。如上所述,棱镜包括具有边界的三维空间,其可以用一个或多个三维矩阵来被平移、旋转和/或变换。定义棱镜的三维空间也可以是降维的。例如,棱镜可以包括从三维空间降低的二维(或甚至一维)区域。在图2c中所图示的这些实施例中,在202c,可以部分或全部基于用户、棱镜或要在棱镜中被渲染的内容的一个或多个行为类型,识别(如果预先存在)或创建棱镜。
[0396]
在一些实施例中,这些一个或多个行为类型包括例如世界锁定、公告板、边缘公告板、跟随头部锁定、基于外部传感器的跟随、或淡入淡出等。公告板类型的行为包括规则、约束、要求或偏好:更明智的是在用户、用户的头部和/或用户的(一只或两只)眼睛的移动序列期间,以朝向(例如,面向)用户公告的方式来显示特定对象,以增强虚拟对象的易读性以及减少用户在移动序列中管理虚拟对象和/或棱镜的努力。例如,平面虚拟对象(例如,显示特定信息的网页)可以通过相对于物理环境在棱镜内自动地平移、旋转和/或变换平面虚拟对象来被定位和定向,以使得平面虚拟对象在用户的移动序列期间面向用户。因此,在202c,可以创建或识别棱镜以适应这种类型的行为。
[0397]
如果或者当用户会以某一预定义的倾斜角度观看虚拟内容时,边缘公告板类型的行为开始朝着混合现实系统的用户平移、旋转或变换,但虚拟内容在这种平移、旋转或变换由倾斜视角触发之前保持静止。世界锁定类型的行为锁定棱镜而不适应用户或(一个或多个)虚拟对象的任何动力学方面。
[0398]
在跟随头部锁定类型的行为中,一个或多个虚拟对象(例如,网页面板、用于网络
浏览器的控件等)可以被平移、旋转和/或变换,以使得这些一个或多个虚拟对象看起来相对于用户的头部是固定的,并因此与用户的头部移动一起移动。类似地,可以存在跟随身体锁定类型的行为、跟随眼睛锁定类型的行为、以及基于一个或多个外部传感器的跟随。可以识别(如果预先存在)或新创建(如果不存在)用于显示这样的一个或多个虚拟对象的棱镜以适应这些类型的行为。
[0399]
在淡入淡出类型的行为中,虚拟对象可以在指定距离处开始溶解或消失(例如,混合现实系统停止渲染虚拟对象)。在一些实施例中,虚拟对象平滑地淡出,而在其他一些实施例中,虚拟对象突然消失。另一个个类型的行为包括棱镜相对于另一个对象(诸如另一个棱镜、虚拟空间中的锚定位置)的行为。例如,棱镜可以被生成或放置在物理对象(例如,墙壁、桌子、地板、天花板等)的表面上。
[0400]
关系类型的行为包括一个棱镜关于另一个棱镜的行为。例如,可以生成或放置第二棱镜以保持与第一棱镜的子

父关系,其中第一棱镜是第二棱镜的父棱镜。这两个棱镜可以用相同的变换来被平移、旋转和/或变换。这种父

子棱镜的示例可以包括用于网页的父棱镜和用于网络浏览器控件的子棱镜,以使得当父棱镜被平移、旋转或变换时,子棱镜也与父棱镜一起平移、旋转或变换,但是,这两个棱镜也可以如上所述地独立地被平移、旋转和/或变换。
[0401]
另一个类型的行为包括碰撞和重叠行为。这种类型的行为管理两个棱镜在发生碰撞时的行为方式、两个棱镜是否可以相互重叠等。例如,该类型可以许可或防止两个棱镜之间的碰撞以及在这两个棱镜之间允许重叠(如果被许可)的程度。在可以通过这种类型的行为防止碰撞和重叠的一些实施例中,用户可以通过继续平移、旋转或变换一个或多个棱镜(例如,通过继续操纵棱镜、通过忽略关于碰撞/重叠的消息等)来覆盖这种规则,因此,混合现实系统可以考虑被覆盖的这些规则并允许棱镜相互碰撞或重叠。因此,可以至少部分地基于上述类型的行为来识别或生成棱镜。
[0402]
在204c,可以启动网络浏览器及其浏览器引擎。可以响应于用户动作或与宇宙浏览器引擎的交互(诸如打开新的应用、输入搜索条件、输入或点击url(用(一个或多个)手势、使用控制器、用(一个或多个)语音命令等))、与启动器的交互等来启动网络浏览器,并且在204c可以用服务来启动网络浏览器和网络引擎。
[0403]
宇宙浏览器引擎使用棱镜和可选的用于2d和/或3d内容的分布式场景图、并且还使用用于渲染网页的内容的浏览器引擎(以及可选的混合现实系统的其他服务,诸如运行层、一个或多个3d引擎、库等)来操作。分布式场景图是可由基于矢量的图形、编辑应用和游戏软件等使用并使用例如相对放置算法和/或任意变换来排列图形场景的逻辑表示(和可选的空间表示)的数据结构。场景图可以定义内容在它的结构内如何相对于彼此被排列和变换。
[0404]
另外,超过一个软件应用(例如,网络浏览器、电子邮件客户端等)可以被渲染到也由宇宙浏览器引擎管理的虚拟3d空间中。由于可以针对每个软件应用分配一个或多个棱镜,因此,用于软件应用的这些一个或多个棱镜可以构成分布式场景图的子树。此外,可以经由用户动作或交互或由应用来创建棱镜。例如,软件应用可以请求生成棱镜,但是宇宙浏览器引擎可以拒绝这种请求。宇宙浏览器引擎而不是任何其他特定软件组件负责棱镜的管理和生成。在206c,可以由例如软件包管理器服务来确定网络浏览器(或它的浏览器引擎)
的唯一标识。类似地,宇宙浏览器引擎也可以确定网络浏览器(或它的浏览器引擎)的唯一标识。
[0405]
在208c,棱镜被创建或放置的网络浏览器(或它的浏览器引擎)可以向宇宙浏览器引擎注册监听器。监听器包括接收消息或通信的接口对象。例如,监听器可以接收ipc(进程间通信)消息,或者在android系统的情况下从android binder接口接收。监听器可以用于部分或全部基于用户相对于棱镜的移动或交互来向网络浏览器(或它的浏览器引擎)通知棱镜的生成和销毁。
[0406]
然后,宇宙浏览器引擎可以在210c将棱镜关联到监听器,并在212c通过使用前述的唯一标识来将棱镜分配给网络浏览器(或它的浏览器引擎)。然后在214c,宇宙浏览器引擎可以通过使用前述的场景图来将棱镜放置在混合现实系统的3d虚拟空间或3d可显示空间中。在一些实施例中,宇宙浏览器引擎可以部分地基于将要被渲染到3d虚拟或可显示空间中的网页(或网页面板)的位置和旋转数据来将棱镜放置在3d空间中。
[0407]
图2d图示了根据一些实施例的用于在宇宙浏览器棱镜中打开和放置网页的高级框图。在这些实施例中,在202d,混合现实系统可以接收指示用户对来自互联网的内容感兴趣的第一用户输入。第一用户输入可以包括例如用户从互联网上的可提取节点(例如,在其网页中提供可提取内容的网站)提取内容的动作。第一用户输入可以包括启动软件应用(例如,网络浏览器、电子邮件客户端等)的用户动作或交互(例如,通过点击控制器、通过(一个或多个)手势、经由(一个或多个)语音命令等)。第一用户输入还可以包括用户触发来自另一个软件应用的分派,其中该分派必须由不同应用来处理。例如,用户可以(用控制器、经由手势、或使用(一个或多个)语音命令)点击社交媒体页面中的链接,并且该链接将要由网络浏览器来处理。
[0408]
响应于第一用户输入,在204d,可以启动软件应用(例如,网络浏览器)以生成感兴趣的内容。例如,宇宙浏览器引擎可以响应于用户在搜索字段中输入搜索条件而启动网络浏览器(及其浏览器引擎),其中搜索字段也被提供在由混合现实系统生成的虚拟3d空间中。在206d,可以确定棱镜以用于显示感兴趣的内容。例如,宇宙浏览器引擎可以响应于第一用户输入来确定预先存在的棱镜或生成新的棱镜以用于显示感兴趣的内容。
[0409]
可选地,在208d,在虚拟3d空间中以很少的细节或根本没有可辨别/清晰的细节生成感兴趣的内容的迷你预览。在一些实施例中,可以在208d生成迷你预览棱镜并将其显示给用户,并且迷你预览棱镜可以或者可以不包括感兴趣的内容的迷你预览。可以在渲染感兴趣的内容之前生成内容的迷你预览和/或迷你预览棱镜,并将其呈现给用户,以使得用户可以确定是否重新定位、旋转和/或变换迷你预览内容或迷你预览棱镜。
[0410]
在210d,可以接收第二用户输入。第二个用户输入指示棱镜、迷你预览棱镜、内容或迷你预览内容是否要被平移、旋转和/或变换,并且如果是,则指示棱镜、迷你预览棱镜、内容、或者迷你预览内容要被平移、旋转和/或变换的程度。例如,宇宙浏览器引擎可以确定用户是否会平移、旋转和/或变换棱镜或感兴趣内容。如果确定是肯定的,则宇宙浏览器引擎可以进一步至少部分地基于第二用户输入(例如,用户将内容或网页移动和旋转到新的位置和新的定向)来确定这种平移、旋转和/或变换的程度。
[0411]
如上所述,宇宙浏览器引擎可以与浏览器引擎结合起作用,以在完全渲染感兴趣的内容之前首先向用户显示网页的迷你预览棱镜或迷你预览。一旦用户完成了平移、旋转
和/或变换迷你预览内容或迷你预览棱镜,则新的位置和旋转数据可以被传送回浏览器引擎,浏览器引擎进而计算图形坐标,并至少用所计算出的图形坐标来渲染感兴趣的内容。在一些其他实施例中,宇宙浏览器引擎和浏览器引擎渲染感兴趣的内容并将其显示给用户;用户随后可以平移、旋转和/或变换所渲染的感兴趣的内容。宇宙浏览器引擎将类似地将从平移、旋转和/或变换产生的新的位置和/或旋转数据传送回浏览器引擎,浏览器引擎进而更新它所存储的位置和/或旋转数据。然后,在212d,可以至少部分地基于第二用户输入来在棱镜中显示感兴趣的内容。
[0412]
图2e图示了一个或多个实施例中的用于在宇宙浏览器棱镜中变换软件对象的高级框图。在202e,可以从变换树结构识别网页或网页面板。变换树结构可以包括具有多个节点的场景图,并且每个节点提供与棱镜对应的可移动局部空间。棱镜也可以是变换树结构中的节点,以部分地或完全地基于变换树结构中的与棱镜相关的分层结构而经受一个或多个变换。
[0413]
变换树结构还可以包括不是棱镜的节点。相反,这些节点可以用于对内容进行分组或者可以用作中间变换(例如,缩放、平移、旋转等)。例如,一组节点可以经受相同的变换集,以使得当该变换集被应用于一个节点时,该组中的剩余节点也与该节点一起被变换。
[0414]
在204e处,可以从变换树结构识别在202e处识别的网页的一个或多个父网页。变换树结构中的节点可以具有零个或更多子节点,但可以最多有一个父节点。在一些实施例中,棱镜可以被初始化以在对应变换树结构中具有空父节点和零子节点。随后,基于随后被渲染到棱镜中的内容,该变换树结构可以被填充更多的节点。变换树结构中的父节点的子节点继承该父节点所经受的(一个或多个)变换。
[0415]
在一些实施例中,变换树结构中的根节点对应于根节点变换,该根节点变换在被应用以变换棱镜时不需要更新对于根节点变换是局部的节点的变换。例如,表示音频内容的节点对于根节点变换可以是局部的,以使得即使在棱镜被变换时,音频信号也被限制在棱镜内并且不会被感知为从棱镜的外部发出。在一些实施例中,子节点可以改变它的父节点,但是子节点在改变之后不改变它的当前位置或定向,除非期望或要求子节点经受不同的变换集以发起它的父节点的改变。例如,面向用户的子棱镜可以将它的父棱镜改变成新的父棱镜。尽管如此,但该改变不改变子棱镜的位置和旋转,因此,子棱镜在改变之后继续面向用户。
[0416]
在206e,宇宙浏览器引擎可以从浏览器引擎接收网页或网页面板的位置和/或旋转数据。这种位置和/或旋转数据在一些实施例中可以作为单独的位置和/或旋转数据或者在一些其他实施例中作为其他数据的一部分(例如,作为由浏览器引擎渲染的网页的一部分)直接从浏览器引擎接收。宇宙浏览器引擎从浏览器引擎接收网页的位置和旋转数据,以便允许用户操纵(例如,平移、旋转和/或变换)网页或其面板。
[0417]
如上所述,在一些实施例中,虽然宇宙浏览器引擎管理虚拟内容在3d空间环境中的创建、放置和显示,但是在一些实施例中,宇宙浏览器引擎可以与浏览器引擎一起(例如在浏览器引擎可访问的高速缓存存储器中)存储位置和旋转数据,以使得浏览器引擎可以快速响应来自网页的位置和/或旋转请求,而没有由于向宇宙浏览器引擎请求这种位置和/或旋转数据的进一步延迟。在一些其他实施例中,宇宙浏览器引擎还可以将位置和旋转数据存储在宇宙浏览器引擎可访问的另一个非暂时性计算机可读介质中;并且每当位置和/
或旋转数据改变时,则同步位置和旋转数据的两个副本。
[0418]
在208e,宇宙浏览器引擎可以进一步接收用于网页的位置和/或旋转输入。例如,用户可以平移、旋转和/或变换网页或其面板,并因此提供用于网页的位置和/或旋转数据的输入。至少部分地基于在208e接收到的位置和/或旋转输入,在210e,宇宙浏览器引擎可以确定用于网页或其一部分(例如,网页的控件、子面板等)的位置和/或旋转数据。应注意,除非另有明确说明(例如,网页的较小部分),否则网页或其一部分在本技术中可以互换使用。由于位置和/或旋转输入修改了网页(或其面板)的位置和/或旋转数据,因此,在212e,宇宙浏览器引擎可以将它的位置和/或旋转数据与浏览器引擎所存储的对应数据同步。在一些实施例中,宇宙浏览器引擎与浏览器引擎同步整个位置和旋转数据。在一些其他实施例中,宇宙浏览器引擎跟踪它的位置和旋转数据的变化,并且与浏览器引擎仅同步它自己的位置和旋转数据与对应数据之间的变化量。
[0419]
浏览器引擎从宇宙浏览器引擎接收更新后的位置和/或旋转数据,计算要被渲染的内容的图形坐标,并通过调用渲染器进程(例如,用于blink或webkit的renderwidget)来渲染内容。然后,宇宙浏览器引擎可以结合浏览器引擎和混合现实系统工作,以在214e处使用至少网页的位置和旋转数据来在棱镜中显示所渲染的内容。
[0420]
图2f图示了根据一些实施例的关于图2e中图示的框图的一部分的更多细节。更具体地,图2f图示了关于部分或全部基于在图2e的208e处接收的位置和/或旋转输入来在210e处确定网页的位置和/或旋转数据的更多细节。在这些实施例中,可选地在202f,可以针对网页的父网页(如果有的话)识别变换集。在一些其他实施例中,浏览器引擎可以识别位置和/或旋转数据;并且在202f处,宇宙浏览器引擎可以单独以位置和/或旋转数据的形式直接或者作为其他数据(例如,所渲染的网页)的一部分从浏览器引擎识别位置和/或旋转数据,而无需识别网页(或其一部分)的父网页的变换集。在204f,部分或全部基于在208e接收到的位置和/或旋转输入,可以针对网页识别变换集的变换特性。变换特性可以包括例如针对网页的所期望或要求的变换(例如,由网页的开发者设想的所期望或要求的变换)、表示网页的节点的(一个或多个)父节点、网页或在其中渲染网页的棱镜的行为类型、网页被渲染到其中的棱镜的特性(例如,范围、碰撞特性、重叠/交叉特性等)、或其任何组合。
[0421]
在一些实施例中,位置和/或旋转输入可以包括与变换树结构中的表示网页的节点相关的(一个或多个)父子关系的改变。例如,位置和/或旋转输入可以改变网页的节点的父节点。通常,被应用于父节点的变换集也适用该于父节点的子节点。在一些实施例中,改变子节点的父节点可以不一定改变被应用于子节点的变换。例如,如果网页用跟随头部锁定(或跟随眼睛锁定)类型的行为来呈现,则改变表示网页的子节点的父节点可以不改变被应用于网页的变换集,因为被应用于父节点的父变换集可以被这种类型的行为覆盖。
[0422]
在206f,可以识别用于网页的位置和/或旋转输入。例如,在206f处,用户可以平移、旋转和/或变换网页或其面板,并因此提供用于网页的位置和/或旋转输入。如上所述,位置和/或旋转输入可以包括变换树结构的节点结构的改变。例如,表示网页的节点可以添加一个或多个节点作为它的父节点和/或子节点和/或移除一个或多个节点。
[0423]
改变表示网页的节点的父节点可以或可以不改变被应用于表示网页的节点的变换集。例如,在世界变换被应用于变换树结构中的所有节点的一些实施例中,改变表示网页的节点的父节点可以不改变该世界变换,尽管该世界变换被应用于该节点以及变换树结构
中的其他节点。作为另一个示例,如果网页根据跟随头部锁定行为类型而将要被呈现为面向用户,则该行为类型可以覆盖可干扰跟随头部锁定行为类型的一个或多个其他变换,以使得这些一个或多个其他变换不被应用于该节点。
[0424]
在208f,至少部分地基于例如位置和/或旋转输入、用于父节点的变换集、或在204f识别的用于网页的变换特性中的一个或多个,可以确定用于网页的变换集。在一些实施例中,变换树结构中的表示网页的节点可以包括或对应于网页(或其面板)在虚拟3d空间中的范围、用于网页的一个或多个局部变换、管理网页的旋转的3d旋转矩阵、与局部变换相对应的缩放因子、网页的位置矢量、一个或多个局部到世界变换、或局部到世界缩放中的一个或多个。
[0425]
局部变换包括被应用于变换树结构中的表示网页的节点的父节点的变换。在表示网页的节点没有父节点的一些实施例中,(从通用或默认空间到在其中渲染网页的局部棱镜的)世界变换可以被指定为局部变换。在节点包括或对应于上述的多个元素(例如,多个变换)的一些实施例中,可以通过连续地应用这些多个元素来确定局部变换。例如,如果网页的节点经历了平移变换、缩放变换和旋转变换,则局部变换可以被确定为是下面的符号表示:局部变换=平移*旋转矩阵*缩放。当被应用于网页时,该局部变换根据(一个或多个)缩放因子来缩放网页(例如,可以支持三轴之间的非均匀缩放),根据旋转矩阵来旋转缩放后的网页,然后根据平移矩阵来移动缩放并旋转后的网页。
[0426]
在一些实施例中,可以使用opengl mathematics(glm)来完成对网页的变换,但是也可以使用其他数学库来完成。下面的示例代码演示了使用glm来完成网页的变换。
[0427]
transformnode::getcurrentvolumetransform();
[0428]
transformnode::setvolumetransform(const glm::vec3*apos,const
[0429]
glm::quat*arot,const glm::vec3*ascale,propagatemode apropagate);
[0430]
在上述代码中,“transformnode::getcurrentvolumetransform()”可以用于获得网页面板的变换;另一个代码段可以用于设置网页面板的变换。此外,以下示例代码可以用于将网页面板的变换分解为位置和旋转,但应注意,其他类似或等效的实现也已被设想并也可以被用于实现相同或基本相似的目的。
[0431]
operatingsystem::math::decompose(const glm::mat4&a_transform,
[0432]
glm::vec3&a_position,glm::quat&a_rotation,glm::vec3&a_scale)
[0433]
采用在208f确定的用于网页的变换集,在210f,可以通过将变换集应用于网页来确定用于网页(或其面板)的位置和旋转数据。采用位置和旋转数据,浏览器引擎可以计算要被渲染的内容的图形坐标,并且可以调用渲染器(例如,renderwidget或其他渲染器)来渲染内容。然后,在212f,可以全部或部分地基于位置和旋转数据,在棱镜中显示所渲染的内容。
[0434]
图2g至图2i图示了可以以任何方式对任何节点进行分组并且对应的(一个或多个)变换可以取决于从对节点的这种分组产生的父子关系的实施例。在一些实施例中,在图2g至图2i中图示的这些示例包括各种变换树和组树和/或创建新组。例如,关于图2g中的变换树200g,该实施例图示了将节点a(202g)和节点e(210g)组合在一起,它们当前是在分开的变换树中。可以首先确定节点a(202g)或节点e(210g)是否已经在组中。当前,节点a(202g)和节点e(210g)都没有组父节点,因此,也都不在组中。因此,可以创建组根。
[0435]
在图2h中,创建具有组根202h的组树1022。如图2h中所描绘的,节点a(202g)和节点e(210g)的组父节点被分配给组根202h。此外,确定节点e(210g)是否是节点a(202g)的祖先(或父节点)。节点e(210g)不是节点a(202g)的祖先,因为节点a(202g)没有父节点。另外,可以另外确定节点a(202g)是否是节点e(210g)的祖先(或父节点)。类似地,节点a(202g)不是节点e(210g)的祖先,因为节点e(210e)没有父节点。
[0436]
图2i图示了根据本公开的一些实施例的样本计算。在一些实施例中,被直接应用于属于组的节点的任何变换可以随节点一起变换该组。对组节点进行的间接变换可以不变换组。例如,如果父节点不在组中、它的子节点在组中并且父节点被变换,则即使子节点的变换在改变,子节点的组中的节点也不与子节点一起变换。如果需要移动整个组,则父节点应被添加到组中。为了计算要应用于组的变换,要使用的变换必须被应用于组根的每个直接子节点。
[0437]
对于如图2i中所描绘的给定变换树200g和组树200h,该实施例对节点a(202g)应用变换。由于节点a(202g)属于组树200h,因此,预期节点c(206g)、d(208g)和e(210g)将与节点a(202g)一起被变换。另外,不属于该组的节点b(204g)也必须与组一起变换,因为它是节点a(202g)的子节点。节点a(202g)的新世界矩阵可以被标记为maw',其中maw'表示“对新世界的矩阵”。节点a(202g)的旧世界矩阵可以被标记为maw,其中maw表示“对旧世界的矩阵”。要应用于节点a(202g)以获得maw'的矩阵可以被标记为mgw,其中mgw表示“对组世界的矩阵”。目标之一是确定要设置到组根的矩阵(mgw),其中当它被应用于节点a的世界矩阵时,它将等于节点a的新矩阵。该同一矩阵可以被应用于组根的其他直接子节点。
[0438]
图2j图示了在一个或多个实施例中的用扩展现实系统在三维虚拟空间中管理和显示网页和网络资源的过程的高级框图。在这些实施例中,在202j,浏览器引擎可以接收用于网页的三维(3d)定向的输入。在一些实施例中,输入可以包括请求呈现感兴趣网页的混合现实系统的用户的输入,或者偏好并因此编码网页以便以某种方式被呈现的网页开发者的输入。在一些其他实施例中,输入可以包括对定向数据的请求。例如,在一些实施例中,可以由感兴趣网页的网站发出对定向数据(例如在一些实施例中,定位数据、旋转数据和/或甚至缩放数据)的请求。例如,网页的开发者可以将应用编程接口(例如,上述的window.virtualworld.orientation api)并入感兴趣网页的代码中。
[0439]
如上面刚刚描述的,在一些实施例中,输入可以源自例如开发者,该开发者偏好当网页在虚拟3d空间中被呈现时以特定定向(例如,特定旋转)来表示网页。在这些或其他实施例的一些实施例中,输入可以来自用户在由混合现实系统创建的虚拟3d空间中对网页、先前访问过的同一网页、或来自同一网站或可选地来自其它网站的其他网页等的操纵。
[0440]
例如,可以在虚拟3d空间中为用户打开并显示网页;并且用户可以调整网页在虚拟3d空间中的定向。在这些实施例中的一些实施例中,类似的技术还可以应用以操纵用于网页的网页浏览器或在其中渲染网页的棱镜。用户可以在例如由宇宙浏览器引擎和/或网页开发者提供的虚拟3d空间中自由调整网页表示的定向;并且对这种定向操纵的约束包括例如棱镜的边界、(一个或多个)可允许定向值、(一个或多个)可允许定向范围等。在一些实施例中,这种定向也可以可选地受到网页表示与虚拟3d空间中的一个或多个其他物理和/或虚拟对象之间的碰撞和/或重叠动态的约束,以使得网页表示和虚拟对象看起来是真实的或者被感知为是真实的。
[0441]
浏览器引擎(例如,blink、gecko、webkit、trident等)不是独立的计算机程序。相反,浏览器引擎是网络浏览器的软件组件,它将网页的资源(例如,html文档等)变换成交互式视觉表示。通常用于浏览器引擎的其他术语包括例如布局引擎、渲染引擎等,通过基于层叠样式表(css)中的规则来计算用于视觉表示的图形坐标。
[0442]
顾名思义,浏览器引擎对网页执行布局和渲染,实施安全策略,并实现被开放给页面脚本的dom(文档对象模型)数据结构。浏览器引擎还可以处理超链接和网页表单。在一些实施例中,浏览器引擎利用另一个专用脚本引擎来执行javascript代码。除了执行用于网络浏览器的至少前述功能以外,浏览器引擎还可以针对其他软件程序(诸如电子邮件客户端、软件应用的其他框架(例如,谷歌的电子框架))执行相同或基本相似的功能。
[0443]
在204j,浏览器引擎可以确定定向数据,并对3d定向和/或3d定向操纵的请求进行响应。在一些实施例中,浏览器引擎可以将最新的定向数据存储在浏览器引擎可访问的非暂时性计算机可读介质(例如,高速缓存存储器)中。每当定向数据被修改(例如,被用户进一步移动、旋转或变换在虚拟3d空间中显示的网页)时,混合现实系统的宇宙浏览器引擎可发送这种定向数据。
[0444]
当网络浏览器初始化以渲染并显示网页时,它的浏览器引擎可以用被存储在例如浏览器引擎可访问的高速缓存存储器中(例如,在基于chromium的浏览器中的renderwidget类中)的定向数据来响应这种对定向的请求。一旦定向数据被修改,则浏览器引擎可以用更新后的定向数据或者对来自宇宙浏览器引擎的定向数据的更新来刷新它所存储的定向数据。采用最新的定向数据,浏览器引擎可以使用例如最新的定向数据和管理所渲染的内容的布局的规则(例如,层叠样式表)来渲染网页的内容(例如,通过调用renderwidget类)以计算所渲染的内容的图形坐标。
[0445]
在206j,混合现实系统的宇宙浏览器引擎可以调用浏览器引擎,该浏览器引擎进而调用一个或多个混合现实软件模块和/或硬件机制以在虚拟3d空间中显示网页。例如,取决于网页在虚拟3d空间中(例如,在棱镜中)的定向,网页的虚拟3d表示可以跨越多个深度平面或多个焦平面。扩展现实系统可以利用例如它的可切换焦平面或可变聚焦机制以基于3d定向数据来渲染网页的虚拟3d表示。
[0446]
在本技术的第一段中引用的美国专利申请中描述了关于扩展现实系统的更多细节。在一些实施例中,混合现实机制的这种调用可以经由浏览器(例如,chromium)和/或浏览器引擎(例如,用于chromium的blink)来完成。例如,浏览器(或它的浏览器引擎)可以将定向数据(或者甚至可选地,缩放数据)应用于网页面板,并调用混合现实机制以显示虚拟3d内容。
[0447]
图2k图示了在一个或多个实施例中的用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的过程的更详细的框图。在202k,响应于打开网页的指令(例如,通过用户点击链接、通过用户在搜索字段中输入搜索条件、通过输入网站的url等),网络浏览器或网页面板被启动。
[0448]
宇宙浏览器引擎可以将定向数据发送到网络浏览器的浏览器引擎,以使得定向数据可以被存储在非暂时性计算机可读介质(例如,高速缓存)中或者在非暂时性计算机可读介质中的定向数据可以被刷新。然后,浏览器引擎可以将所接收到的定向数据缓存或存储在例如浏览器引擎可访问的高速缓存存储器中。在定向数据已经被存储在浏览器引擎可访
问的非暂时性计算机可读存储器(例如,高速缓存)中的一些实施例中,被存储在非暂时性计算机可读存储器中的所存储的定向数据可以通过来自宇宙浏览器引擎的定向数据来被初始化。
[0449]
在204k,可选地,网页可以向浏览器引擎发送定向请求。例如,网页的开发者可以将应用编程接口(api)集合(例如,上述的window.virtualworld.orientation ap)并入网页的代码中,以使得网页在初始化时或在初始化后不久向浏览器引擎发送对定向数据的请求。在网页的开发者可能期望以特定定向表示网页的一些实施例中,网页还可以利用api集合以通过将定向数据传送给浏览器引擎来设置定向数据。在这些实施例中的一些实施例中,网页可以响应于用户输入(例如,用户点击链接、用户在搜索字段中输入搜索条件、用户输入网站的url等)来从浏览器引擎获得网页面板的定向数据。
[0450]
在206k,响应于来自显示网页的网络浏览器的可选的定向请求,浏览器引擎可以用被存储在浏览器引擎可访问的非暂时性计算机可读介质中的最新的定向数据来响应该请求,而没有由于例如从混合现实系统的宇宙浏览器引擎获得这种定向数据的进一步延迟。如果最新的定向数据不可用(例如,由于首次初始化混合现实系统或其他原因),则浏览器引擎可以用默认的定向数据来响应来自网页的这种请求。
[0451]
在208k,浏览器引擎还可以将定向数据发送到宇宙浏览器引擎。例如,一些实施例可以向用户提供在虚拟3d空间中对网页的表示进行定向的能力。在接收get请求的一些实施例中,浏览器引擎将已经被存储在非暂时性计算机可读介质(例如,高速缓存)中的定向数据返回给网页。
[0452]
宇宙浏览器引擎从网络浏览器的浏览器引擎接收定向数据,并调用混合现实系统的其他模块(例如,如上所述的运行层、操作系统服务层、一个或多个3d引擎、或一个或多个软件应用等)以及其他硬件和软件组件,以使得用户能够在虚拟3d空间(例如,棱镜)中自由调整网页的表示的3d定向。在一些实施例中,当网页获得(“get”)定向数据时,执行206k;当网页确定(“set”)定向数据时,执行208k。
[0453]
在一些实施例中,在从浏览器引擎接收到定向数据时,在210k,宇宙浏览器引擎更新网页的定向数据。在接收对新的定向数据的set请求的一些其他实施例中,新的定向数据可以被存储在用于浏览器引擎的非暂时性计算机可读介质(例如,高速缓存)中,并且可以进一步被传递给宇宙浏览器引擎。宇宙浏览器引擎进一步确定定向数据是否已被更新。
[0454]
例如,用户对网页表示的任何定向可以修改定向数据。如果宇宙浏览器引擎确定定向数据已经改变,则在212k,宇宙浏览器引擎可以更新定向数据,并将定向数据的最新版本发送到浏览器引擎。然后,浏览器引擎可以将被存储在非暂时性计算机可读介质(例如,高速缓存)中的定向数据与定向数据的最新版本一起存储。
[0455]
在一些实施例中,在接收到定向数据的最新版本时,浏览器引擎可以进一步计算网页的内容的图形坐标,并渲染网页的内容。然后,可以至少部分地基于定向数据的最新版本来平移、旋转、缩放或以其他方式变换网页面板。然后,在这些实施例中,浏览器引擎可以将所渲染的内容传递给宇宙浏览器引擎,宇宙浏览器引擎进而调用混合现实系统的各种软件和硬件模块以生成所渲染的内容在虚拟3d空间中的表示,并在214k处,将所渲染的内容的表示在虚拟3d空间中在平移、旋转、缩放或以其他方式变换后的网页面板中显示给用户。
[0456]
在一些其他实施例中,浏览器引擎用被存储在浏览器引擎的高速缓存中的定向数
据来渲染网页的内容,并将所渲染的内容和定向数据发送到宇宙浏览器引擎。宇宙浏览器引擎将所渲染的内容视为软件对象,并允许用户调整网页的所渲染的内容的3d定向。
[0457]
一旦用户已经确定了网页表示的定向,宇宙浏览器引擎则更新定向数据,并调用例如变换和渲染模块以针对该软件对象生成网页在虚拟3d空间中的更新表示并将网页的更新表示呈现给用户。在这些实施例中的一些实施例中,当用户在改变网页在虚拟3d空间中的定向时,混合现实系统可以以近乎实时的方式在虚拟3d空间中显示网页(214k),其中在用户的操纵与网页的显示之间没有可察觉的滞后。
[0458]
图2l图示了在一个或多个实施例中的用于在宇宙浏览器棱镜中变换软件对象的高级框图。在202l,可以从变换树结构中识别网页或网页面板。变换树结构可以包括具有多个节点的场景图,并且每个节点提供与棱镜对应的可移动局部空间。棱镜也可以是变换树结构中的节点,以部分或完全基于变换树结构中的与棱镜相关的分层结构而经受一个或多个变换。
[0459]
变换树结构还可以包括不是棱镜的节点。相反,这些节点可以用于对内容进行分组或者可以用作中间变换(例如,缩放、平移、旋转等)。例如,一组节点可以经受相同的变换集,以使得当该变换集被应用于一个节点时,该组中的剩余节点也与该节点一起被变换。
[0460]
在204l处,可以从变换树结构识别在202l处识别的网页的一个或多个父网页。变换树结构中的节点可以具有零个或更多子节点,但可以最多有一个父节点。在一些实施例中,棱镜可以被初始化以在对应的变换树结构中具有空父节点和零子节点。随后,基于随后被渲染到棱镜中的内容,该变换树结构可以被填充更多的节点。变换树结构中的父节点的子节点继承该父节点所经受的(一个或多个)变换。
[0461]
在一些实施例中,变换树结构中的根节点对应于根节点变换,该根节点变换在被应用以变换棱镜时不需要更新对于根节点变换是局部的节点的变换。例如,表示音频内容的节点对于根节点变换可以是局部的,以使得即使在棱镜被变换时,音频信号也被限制在棱镜内并且不会被感知为从棱镜的外部发出。
[0462]
在一些实施例中,子节点可以改变它的父节点,但是子节点在改变之后不改变它的当前定向,除非期望或要求子节点经受不同的变换集以发起它的父节点的改变。例如,面向用户的子棱镜可以将它的父棱镜改变成新的父棱镜。尽管如此,但该改变不改变子棱镜的定向,因此,子棱镜在改变之后继续面向用户。
[0463]
在206l,宇宙浏览器引擎可以从浏览器引擎接收网页或网页面板的定向数据。这种定向数据在一些实施例中可以作为单独的定向数据或者在一些其他实施例中作为其他数据的一部分(例如,作为由浏览器引擎渲染的网页的一部分)直接从浏览器引擎接收。宇宙浏览器引擎从浏览器引擎接收网页的定向数据,以便允许用户操纵(例如,平移、旋转和/或变换)网页或其面板。
[0464]
如上所述,虽然宇宙浏览器引擎管理虚拟内容在3d空间环境中的创建、放置和显示,但是在一些实施例中,宇宙浏览器引擎可以与浏览器引擎一起(例如在浏览器引擎可访问的高速缓存存储器中)存储定向数据,以使得浏览器引擎可以快速响应来自网页的定向请求,而没有由于向宇宙浏览器引擎请求这种定向数据的进一步延迟。在一些其他实施例中,宇宙浏览器引擎还可以将定向数据存储在宇宙浏览器引擎可访问的另一个非暂时性计算机可读介质中;并且每当定向数据改变时,则同步定向数据的两个副本。
[0465]
在208l,宇宙浏览器引擎可以进一步接收用于网页的定向输入。例如,用户可以平移、旋转和/或变换网页或其面板,并因此提供用于网页的定向数据的输入。至少部分地基于在208l接收到的定向输入,在210l,宇宙浏览器引擎可以确定用于网页或其一部分(例如,网页的控件、子面板等)的定向数据。应注意,除非另有明确说明(例如,网页的较小部分),否则网页或其一部分在本技术中可以互换使用。
[0466]
由于定向输入修改了网页(或其面板)的定向数据,因此,在212l,宇宙浏览器引擎可以将它的定向数据与浏览器引擎所存储的对应数据同步。在一些实施例中,宇宙浏览器引擎与浏览器引擎同步整个定向数据。在一些其他实施例中,宇宙浏览器引擎跟踪它的定向数据的变化,并且与浏览器引擎仅同步它自己的定向数据与对应数据之间的变化量。
[0467]
浏览器引擎从宇宙浏览器引擎接收更新后的定向数据,计算要被渲染的内容的图形坐标,并通过调用渲染器进程(例如,用于blink或webkit的renderwidget)来渲染内容。然后,宇宙浏览器引擎可以结合浏览器引擎和混合现实系统工作,以在214l处使用至少网页的定向数据来在棱镜中显示所渲染的内容。
[0468]
图2m图示了根据一些实施例的关于图2l中图示的框图的一部分的更多细节。更具体地,图2m图示了关于部分或全部基于在图2l的208l处接收的定向输入来在210l处确定网页的定向数据的更多细节。在这些实施例中,可选地,在202m,可以针对网页的父网页(如果有的话)识别变换集。在一些其他实施例中,浏览器引擎可以识别定向数据;并且在202m,宇宙浏览器引擎可以单独以定向数据的形式直接或者作为其他数据(例如,所渲染的网页)的一部分从浏览器引擎识别定向数据,而无需识别网页(或其一部分)的父网页的变换集。
[0469]
在204m,可以部分或全部基于在208l接收到的定向输入,针对网页识别变换集的变换特性。变换特性可以包括例如针对网页的所期望或要求的变换(例如,由网页的开发者设想的所期望或要求的变换)、表示网页的节点的(一个或多个)父节点、网页或在其中渲染网页的棱镜的行为类型、网页被渲染到其中的棱镜的特性(例如,范围、碰撞特性、重叠/交叉特性等)、或其任何组合。
[0470]
在一些实施例中,定向输入可以包括与变换树结构中的表示网页的节点相关的(一个或多个)父子关系的改变。例如,定向输入可以改变网页的节点的父节点。通常,被应用于父节点的变换集也适用于该父节点的子节点。在一些实施例中,改变子节点的父节点可以不一定改变被应用于子节点的变换。例如,如果网页用跟随头部锁定(或跟随眼睛锁定)类型的行为来呈现,则改变表示网页的子节点的父节点可以不改变被应用于网页的变换集,因为被应用于父节点的父变换集可以被这种类型的行为覆盖。
[0471]
在206m,可以识别用于网页的定向输入。例如,在206m处,用户可以平移、旋转和/或变换网页或其面板,并因此提供用于网页的定向输入。如上所述,定向输入可以包括变换树结构的节点结构的改变。例如,表示网页的节点可以添加一个或多个节点作为它的父节点和/或子节点和/或移除一个或多个节点。
[0472]
改变表示网页的节点的父节点可以或可以不改变被应用于表示网页的节点的变换集。例如,在世界变换被应用于变换树结构中的所有节点的一些实施例中,改变表示网页的节点的父节点可以不改变该世界变换,尽管该世界变换被应用于该节点以及变换树结构中的其他节点。作为另一个示例,如果网页根据跟随头部锁定行为类型而将要被呈现为面向用户,则该行为类型可以覆盖可干扰跟随头部锁定行为类型的一个或多个其他变换,以
使得这些一个或多个其他变换不被应用于该节点。
[0473]
在208m,至少部分地基于例如定向输入、用于父节点的变换集、或在204m识别的用于网页的变换特性中的一个或多个,可以确定用于网页的变换集。在一些实施例中,在变换树结构中的表示网页的节点可以包括或对应于网页(或其面板)在虚拟3d空间中的范围、用于网页的一个或多个局部变换、管理网页的旋转的3d旋转矩阵、与局部变换相对应的缩放因子、网页的定向矢量(指示网页的位置和/或定向的定向矢量)、一个或多个局部到世界变换、或局部到世界缩放中的一个或多个。
[0474]
局部变换包括被应用于变换树结构中的表示网页的节点的父节点的变换。在表示网页的节点没有父节点的一些实施例中,(从一般或默认空间到在其中渲染网页的局部棱镜的)世界变换可以被指定为局部变换。在节点包括或对应于上述的多个元素(例如,多个变换)的一些实施例中,可以通过连续地应用这些多个元素来确定局部变换。
[0475]
例如,如果网页的节点经历了平移变换、缩放变换和旋转变换,则局部变换可以被确定为是如下的符号表示:局部变换=平移*旋转矩阵*缩放。当被应用于网页时,该局部变换根据(一个或多个)缩放因子来缩放网页(例如,可以支持三轴之间的非均匀缩放),根据旋转矩阵来旋转缩放后的网页,然后根据平移矩阵来移动缩放并旋转后的网页。
[0476]
在一些实施例中,可以使用openglmathematics(glm)来完成对网页的变换,但是也可以使用其他数学库来完成。下面的示例代码演示了使用glm来完成网页的变换。
[0477]
transformnode::getcurrentvolumetransform();
[0478]
transformnode::setvolumetransform(const glm::vec3*apos,const
[0479]
glm::quat*arot,const glm::vec3*ascale,propagatemode apropagate);
[0480]
采用在208m确定的用于网页的变换集,在210m,可以通过将变换集应用于网页来确定用于网页(或其面板)的定向数据。采用定向数据,浏览器引擎可以计算要被渲染的内容的图形坐标,并且可以调用渲染器(例如,renderwidget或其他渲染器)来渲染内容。然后,在212m,可以全部或部分地基于定向数据,在棱镜中显示所渲染的内容。
[0481]
图2n图示了一些实施例中的示例渲染器进程和示例浏览器进程的简化高级架构图。在这些实施例中,渲染器进程202n包括网页204n的实例和网络浏览器渲染器206n的实例。在一些实施例中,网络浏览器渲染器可以将网页面板的当前的位置和/或旋转数据缓存在例如高速缓存存储器中。在218n,网络浏览器渲染器206n可以将当前的位置和/或旋转数据返回给网页204n。在216n,网页还可以从网络浏览器渲染器206n获得位置和/或旋转数据。此外,在214n,网页还可以设置用于网页浏览器渲染器206n的位置和/或旋转数据。
[0482]
网络浏览器渲染器206n可以可操作地耦合到浏览器210m,并向网络浏览器210m发送通信(例如,一个或多个进程间通信或ipc消息)以设置位置和/或旋转。例如,在220n,网络浏览器渲染器206n可以向浏览器引擎210n发送framehostmsg_setvirtualposition以设置网页面板的3d位置,和/或可以向浏览器引擎210n发送framehostmsg_setvirtualrotation以设置网页面板的3d旋转。此外,浏览器引擎210n还可以向网络浏览器渲染器206n发送通信(例如,一个或多个进程间通信或ipc消息)以更新网页面板的位置和/或旋转数据。例如,在222n,浏览器引擎210n可以向网络浏览器渲染器206n发送viewmsg_updatecachedvirtualposition以更新所缓存的网页面板的3d位置,和/或可以向浏览器渲染器206n发送viewmsg_updatecachedvirtualrotation以更新所缓存的网页面板
的3d旋转。
[0483]
浏览器引擎210n还可以可操作地耦合到宇宙浏览器引擎212n以在224n设置网页面板的位置和/或旋转数据。宇宙浏览器引擎212n还可以初始化或更新网页面板的位置和/或旋转数据,并在226n,将网页面板的位置和/或旋转数据传送到浏览器引擎210n。例如,用户可以改变网页面板的位置和/或旋转。响应于用户对网页面板的位置和/或旋转的操纵,在226n,宇宙浏览器引擎212n可以向浏览器引擎210n发送网页面板的位置和/或旋转数据。作为另一个示例,宇宙浏览器引擎212n可以用特定位置和旋转数据来初始化网页面板,并在226n,将该位置和旋转数据传送到浏览器引擎210n。
[0484]
系统架构概述
[0485]
图3图示了在其上可以实现用于用混合现实系统在三维虚拟空间中管理和显示网页和网络资源的方法的计算机化系统。计算机系统300包括用于传送信息的总线306或其他通信模块,其互连子系统和设备,诸如处理器307、系统存储器308(例如,ram)、静态存储设备309(例如,rom)、磁盘驱动器310(例如,磁或光的)、通信接口314(例如,调制解调器或以太网卡)、显示器311(例如,crt或lcd)、输入设备312(例如,键盘)、和光标控制(未示出)。图示的计算系统300可以包括基于互联网的计算平台,其经由互联网以无处不在按需的方式向其他计算机和设备提供可配置计算机处理资源(例如,计算机网络、服务器、存储设备、应用、服务等)和数据的共享池。例如,在一些实施例中,计算系统300可以包括云计算平台或者可以是云计算平台的一部分。
[0486]
根据一个实施例,计算机系统300通过执行在系统存储器308中包含的一个或多个指令的一个或多个序列的一个或多个处理器或处理器核307来执行特定操作。这种指令可以从另一个计算机可读/可用存储介质(诸如静态存储设备309或磁盘驱动器310)被读入系统存储器308中。在替代实施例中,硬连线电路可以代替软件指令或与软件指令结合使用以实现本发明。因此,本发明的实施例不限于硬件电路和/或软件的任何特定组合。在一个实施例中,术语“逻辑”应意味着用于实现本发明的全部或一部分的软件或硬件的任何组合。
[0487]
可以通过使用一个或多个处理器、一个或多个处理器核、或其组合307来执行在前述段落中描述的各种动作或过程,其中一个或多个处理器、一个或多个处理器核、或其组合执行一个或多个线程。例如,确定、识别、同步、计算图形坐标、渲染、变换、平移、旋转、生成软件对象、放置、分配、关联等各种动作可以由一个或多个处理器、一个或多个处理器核心、或其组合来执行。
[0488]
本文所使用的术语“计算机可读存储介质”或“计算机可用存储介质”是指参与向处理器307提供指令以供执行的任何非暂时性介质。这种介质可以采用多种形式,包括但不限于非易失性介质和易失性介质。非易失性介质包括例如光盘或磁盘,诸如磁盘驱动器310。易失性介质包括动态存储器,诸如系统存储器308。计算机可读存储介质的常见形式包括例如机电磁盘驱动器(诸如软盘、软磁盘或硬盘)、基于闪存的、基于ram的(诸如sram、dram、sdram、ddr、mram等)、或任何其他固态驱动器(ssd)、磁带、任何其他磁性或磁光介质、cd

rom、任何其他光学介质、任何其他带有孔图案的物理介质、ram、prom、eprom、flash

eprom、任何其他存储芯片或盒式磁带、或计算机可以读取的任何其他介质。
[0489]
在本发明的实施例中,由单个计算机系统300执行用于实践本发明的指令序列的执行。根据其他实施例,通过通信链路315(例如,lan、ptsn或无线网络)耦接的两个或多个
计算机系统300可以执行相互协调实践本发明所需的指令序列。
[0490]
计算机系统300可以通过通信链路315和通信接口314来发送和接收消息、数据和指令,包括程序(例如,应用代码)。所接收的程序代码可以在它被接收时由处理器307执行,和/或被存储在磁盘驱动器310或其他非易失性存储设备中以供以后执行。在实施例中,计算机系统300结合数据存储系统331一起操作,例如,数据存储系统331包括计算机系统300可容易访问的数据库332。计算机系统300通过数据接口333与数据存储系统通信331。被耦合到总线306(例如,存储器总线、系统总线、数据总线等)的数据接口333发送和接收电、电磁或光信号,这些信号包括表示各种类型的信号信息(例如指令、消息和数据)的数据流。在本发明的实施例中,数据接口333的功能可以由通信接口314来执行。
[0491]
一些实施例针对在其上存储有指令序列的非暂时性计算机可读介质,这些指令在被存储在存储器中并由处理器执行时使得处理器执行一组动作,该组动作包括:在浏览器引擎处接收用于网页或用于该网页的网页面板的三维(3d)变换的输入;响应于该输入,至少由被耦合到扩展现实系统的微处理器的浏览器引擎至少部分地基于网页或网页面板的3d变换来确定用于网页的3d变换数据,其中,3d变换包括网页或其网页面板的3d位置、旋转或缩放的变化;以及至少由被耦合到扩展现实系统的浏览器引擎的宇宙浏览器引擎至少部分地基于3d变换数据而在虚拟3d空间中呈现网页的内容。
[0492]
在这些实施例的一些实施例中,该组动作还包括:在浏览器引擎处,识别要在虚拟3d空间中显示的网页,其中,虚拟3d空间具有虚拟三维体积;由浏览器引擎将3d变换数据存储在浏览器引擎可访问的非暂时性计算机可读介质中;以及将3d变换数据从浏览器引擎发送到宇宙浏览器引擎。
[0493]
在前面的一些实施例中,该组动作还包括:将3d变换数据从浏览器引擎发送到宇宙浏览器引擎;在宇宙浏览器引擎处,接收网页或网页面板的3d位置、旋转或缩放的变化;由宇宙浏览器引擎将3d变换数据更新成更新后的3d变换数据;以及将浏览器引擎可访问的3d变换数据与更新后的3d变换数据同步。
[0494]
附加地或作为替代,该组动作还包括以下至少一个:从网页或托管网页的网站接收用于网页的3d变换的输入,其中,网页的边界受可配置为在虚拟3d空间中被显示或抑制的网络浏览器应用实例的限制;从用户接收用于网页的3d变换的输入,其中,网页的边界受可配置为在虚拟3d空间中被显示或抑制的网页浏览器的限制;或者,从网页的代码中识别用于网页的3d变换的输入,其中,网页的开发者限制要由浏览器引擎显示的网页的3d位置、旋转或缩放。
[0495]
在一些实施例中,该组动作还包括:识别变换树结构和变换树结构中的用于网页或网页面板的节点;确定该节点在变换树结构中是否有父节点;从浏览器引擎接收用于网页或网页面板的3d位置、旋转或缩放数据;以及从宇宙浏览器引擎接收用于网页或网页面板的3d位置、旋转或缩放输入。
[0496]
附加地或作为替代,该组动作还包括:在浏览器引擎处,从网站接收与网页或网页面板的3d位置、旋转或缩放相关的数据;以及从浏览器引擎向宇宙浏览器引擎发送与网页或网页面板的3d位置、旋转或缩放相关的数据或3d变换数据。
[0497]
在前面的一些实施例中,该组动作还包括:在宇宙浏览器引擎处,在虚拟3d空间中确定已有棱镜或生成新的棱镜;在宇宙浏览器引擎处,将数据或3d变换数据修改成更新后
的3d变换数据;以及将由浏览器引擎确定的3d变换数据与更新后的3d变换数据进行同步。
[0498]
在前述的说明书中,已经参考本发明的具体实施例描述了本发明。然而,很明显,在不脱离本发明更广泛的精神和范围的情况下,可以对其进行各种修改和改变。例如,上述的过程流是参考过程动作的特定顺序来描述的。然而,在不影响本发明的范围或操作的情况下,可以改变所描述的许多过程动作的顺序。因此,说明书和附图被认为是说明性的而不是限制性的。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献