基于着色器的图形内容的观看定向的立体转换的制造方法与工艺

文档序号:11293741阅读:264来源:国知局
基于着色器的图形内容的观看定向的立体转换的制造方法与工艺
本发明涉及图形数据处理,且更具体地说,涉及用于立体视图的图形数据处理。

背景技术:
立体视图指代表现为涵盖3维(3D)体积的所感知图像。为了产生立体视图,装置在显示器的2维(2D)区域上显示两个图像。这两个图像包含大体上类似的内容,但沿着所述两个图像中的一或多个对应像素的水平轴线具有稍微的位移。在2D区域上这两个图像的同时观看致使观看者感知到被弹出或推入正显示所述两个图像的2D显示的图像。以此方式,虽然所述两个图像显示于显示器的2D区域上,但观看者感知到表现为涵盖3D体积的图像。立体视图的所述两个图像分别称为左眼图像和右眼图像。左眼图像可由观看者的左眼观看,且右眼图像不可由观看者的左眼观看。类似地,右眼图像可由观看者的右眼观看,且左眼图像不可由观看者的右眼观看。举例来说,观看者可佩戴专用眼镜,其中所述眼镜的左镜片阻挡右眼图像且通过左眼图像,且所述眼镜的右镜片阻挡左眼图像且通过右眼图像。因为左眼和右眼图像包含沿着水平轴线具有稍微位移的大体上类似的内容,但不可由观看者的双眼同时观看(例如,由于所述专用眼镜),所以观看者的大脑通过混合所述两个图像来解析对应像素之间的稍微位移。所述混合致使观看者将所述两个图像感知为具有3D体积的图像。

技术实现要素:
一般来说,本发明的技术是针对修改产生单视图的指令以致使图形处理单元(GPU)产生立体视图。GPU的着色器程序可经设计以产生单视图。本发明中描述的技术至少基于观看角度修改此着色器程序的指令以产生立体视图。举例来说,所述技术修改着色器程序的指令以针对立体视图的视图中的一者沿一个方向移位像素的位置,且针对立体视图的另一视图沿另一方向移位所述像素的位置。经修改着色器程序使像素的位置移位的方向是基于观看角度。在一个实例中,本发明描述用于图形处理的方法。所述方法包含:以处理器确定相对于显示器的观看角度;以所述处理器接收用于经配置以对单视图的图像操作的顶点着色器的指令;以及以所述处理器基于所述观看角度将用于所述顶点着色器的所述指令修改为包含一或多个指令以产生经修改顶点着色器。在此实例中,所述经修改顶点着色器当经执行时产生立体视图的顶点的顶点坐标。所述方法还包含以所述处理器指示图形处理单元(GPU)执行所述经修改顶点着色器。在一个实例中,本发明描述一种设备。所述设备包含图形处理单元(GPU)和处理器。所述处理器经配置以确定相对于显示器的观看角度,且基于所述观看角度将用于顶点着色器的指令修改为包含一或多个指令以产生经修改顶点着色器。在此实例中,所述经修改顶点着色器当经执行时产生立体视图的顶点的顶点坐标。所述处理器还经配置以指示所述GPU执行所述经修改顶点着色器。在一个实例中,本发明描述一种处理器。所述处理器经配置以确定相对于显示器的观看角度,接收用于经配置以对单视图的图像操作的顶点着色器的指令,以及基于所述观看角度将用于所述顶点着色器的所述指令修改为包含一或多个指令以产生经修改顶点着色器。在此实例中,所述经修改顶点着色器当经执行时产生立体视图的顶点的顶点坐标。所述处理器还经配置以指示图形处理单元GPU执行所述经修改顶点着色器。在一个实例中,本发明描述一种设备,其包含:图形处理单元(GPU);用于确定相对于显示器的观看角度的装置;用于接收用于经配置以对单视图的图像操作的顶点着色器的指令的装置;以及用于基于所述观看角度将用于所述顶点着色器的所述指令修改为包含一或多个指令以产生经修改顶点着色器的装置。在此实例中,所述经修改顶点着色器当经执行时产生立体视图的顶点的顶点坐标。所述设备还包含用于指示所述GPU执行所述经修改顶点着色器的装置。在一个实例中,本发明描述一种其上存储有指令的计算机可读存储媒体,所述指令在被执行时致使一或多个处理器:确定相对于显示器的观看角度;接收用于经配置以对单视图的图像操作的顶点着色器的指令;以及基于所述观看角度将用于所述顶点着色器的所述指令修改为包含一或多个指令以产生经修改顶点着色器。在此实例中,所述经修改顶点着色器当经执行时产生立体视图的顶点的顶点坐标。所述指令进一步致使所述一或多个处理器指示图形处理单元(GPU)执行所述经修改顶点着色器。在随附图式及以下描述中阐述本发明的一或多个方面的细节。本发明的其它特征、目标和优点将从所述描述和图式以及权利要求书而显而易见。附图说明图1是说明根据本发明中所描述的一或多个实例的显示立体视图的显示器的概念图。图2是说明不同观看角度的概念图。图3是说明观看者的眼睛和头定向的检测的概念图。图4是说明观看角度的实例的概念图。图5是说明可实施本发明中描述的一或多个实例技术的装置的实例的框图。图6是说明零视差平面的位置的概念图。图7是说明根据本发明中描述的一或多个实例技术的左眼图像与右眼图像之间的水平视差的概念图。图8是说明可实施本发明中描述的一或多个实例技术的图形处理单元(GPU)的实例的框图。图9是说明可实施本发明中描述的一或多个实例技术的图形处理单元(GPU)的另一实例的框图。图10A-10C是说明根据本发明中描述的一或多种技术的实例结果的概念图。图11是进一步详细说明图5的实例装置的框图。图12是说明根据本发明中所描述的一或多个实例技术的实例操作的流程图。具体实施方式本发明中描述的实例技术是针对在执行或运行时间期间再现立体3维(S3D)图形。举例来说,应用程序可产生将由用于显示的图形处理单元(GPU)再现的单视图图像。本发明中描述的技术可在应用程序的执行期间(即,在运行时间期间)将单视图图像转换为立体视图图像。在一些实例中,所述技术可再现S3D图形而不需要对产生图形的应用程序或GPU的任何修改。在一些实例中,本发明中描述的技术可由应用程序处理器实施,所述应用程序处理器执行到图形驱动器的包装器。到图形驱动器的包装器可视为根据本发明中描述的技术修改对先前产生的图形驱动器的输入或修改先前产生的图形驱动器的输出的程序。以此方式,本发明中描述的技术可提供GPU来产生S3D图形而不需要修改在应用程序处理器上执行的图形驱动器。然而,产生新图形驱动器或修改先前产生的图形驱动器以使得应用程序处理器响应于图形驱动器的执行而实施本发明中描述的实例技术可为可能的。出于说明的目的,将所述技术描述为由执行图形驱动器包装器的应用程序处理器执行。从应用程序的角度,执行应用程序的应用程序处理器可输出用于GPU的常规3D图形再现的应用程序的图形数据和命令。在应用程序处理器上执行的图形驱动器包装器可修改所述命令以及由GPU执行的指令以使得GPU在S3D显示器上再现S3D图形。在本发明中,术语“命令”和“指令”可互换地使用。以此方式,GPU可再现S3D图形而无需对产生图形的应用程序或GPU的任何改变。因此,本发明中描述的技术可允许观看者体验由未经设计以产生S3D图形的应用程序产生的图像内容的S3D图形。此外,本发明中描述的技术可考虑观看角度(即,观看者观看显示器所处的角度)以确定应用程序处理器经由图形驱动器包装器修改由GPU执行的指令的方式。通过考虑观看角度,即使显示器倾斜或观看者的头倾斜,观看者也可体验高质量S3D图形。在常规3D图形再现中,GPU从单个视点(例如,单视图)产生3D图形。此单个视点可意味着可由观看者的右眼和左眼观看的单个图像。S3D图形不同于3D图形之处在于S3D图形产生立体视图。术语立体视图指代从双眼视点产生的图像。在双眼视点中,可存在两个图像,其中一个图像可由一只眼睛观看且不可由另一只眼睛观看,且反之亦然。举例来说,当观看者佩戴专用眼镜时,通过眼镜的左镜片进入的光可由左眼观看且不可由右眼观看,且反之亦然。双眼视点可被称为立体视图。举例来说,在S3D图形中,GPU可产生用于左眼的图像和用于右眼的另一图像(即,立体视图)。左眼图像被阻挡于观看者的右眼且仅被引导到左眼。右眼图像被阻挡于观看者的左眼且仅被引导到右眼。术语立体视图指代各自显示于显示器上的两个图像(例如,左眼图像和右眼图像),而单视图指代显示于显示器上的单个图像。左眼图像和右眼图像的组合可对观看者表现为如同所述图像是弹出或推入正显示所述图像的显示器。这可导致更实际且丰富的观看体验。在本发明中,S3D图像(例如,立体视图)和3D图像(例如,单视图)的概念不应混淆。3D图像是被限制于显示器的2维(2D)区域的图像。举例来说,在3D图形处理中,应用程序界定3D基元,其中所述基元形成应用程序内容的各种对象。这些对象形成被限制于显示器的2D区域的单个图像(例如,单视图)。举例来说,3D图像内的对象可表现为与3D图像内的其它对象相比更远离或更接近。然而,所有这些对象限于显示器的2D区域。S3D图像是由组合右眼和左眼图像的观看者的大脑产生的感知图像。所得图像(即,S3D图像)表现为不限制于显示器的2D区域。而是,S3D图像表现为涵盖3D体积,其中所述图像表现为弹出或推入显示器。举例来说,S3D图像内的对象表现为与3D体积内的其它对象相比更远离或更接近,而不是像3D图像的情况那样在2D区域内。换句话说,3D图形处理指代产生表现为被限制于显示器的2D区域的3D图像(例如,通过由应用程序定义的3D基元)。此3D图像称为单视图。S3D指代用于立体视图的创建的再现而不是单视图。在立体视图中,右眼和左眼图像被限制于2D显示器;然而,当观看者观看立体视图时,所述图像表现为涵盖3D体积。一起形成S3D图像的右眼和左眼图像可为3D图像。是观看者的大脑致使观看者在大脑组合3D右眼图像和3D左眼图像时感知到S3D图像。举例来说,当观看者同时观看右眼和左眼图像时,观看者可基于人的双眼视觉感知场景的深度。右眼图像和左眼图像的内容可大体类似于单个3D图像的内容。为了高质量立体效果,左眼图像与右眼图像之间可仅存在水平视差。举例来说,左眼图像中的对象的位置和右眼图像中的所述对象的位置可不同。然而,差异可仅在水平方向上,且不在垂直方向上。是对象之间的水平视差致使观看者的双眼视觉组合左眼图像和右眼图像以使得对象表现为弹出或推入显示器。对象之间的任何垂直视差可削弱S3D效果。本发明中描述的技术,执行图形驱动器或图形驱动器包装器的应用程序处理器可将致使GPU产生用于单视图的图形内容的指令修改为致使GPU产生用于立体视图的图形内容的指令。换句话说,在修改之前,指令可致使GPU产生单个3D图像。在修改之后,指令可致使GPU产生立体视图的两个3D图像(例如,3D左眼图像和3D右眼图像)。应注意虽然本发明中描述的技术大体上是针对3D图像所揭示,但本发明的方面不限于此。本发明的技术还可延伸到2D图形。举例来说,单视图的单个图像可为2D图像,且本发明的技术可修改指令以致使GPU产生用于立体视图的两个2D图像。在此情况下,观看者将感知到弹出或推入正显示用于立体视图的两个图像的显示器的单个图像。为避免混淆,下文描述的技术涉及用于单视图的单个图像以及用于立体视图的左眼和右眼图像,应了解这些图像可为3D图像或2D图像。本发明中描述的实例技术,应用程序处理器经由图形驱动器或图形驱动器包装器可修改由待由GPU执行的应用程序发出的指令以及待由GPU执行的顶点着色器程序的指令。举例来说,应用程序处理器可执行应用程序。应用程序可能已经设计以产生单个图像(例如,单视图),且可将所述单个图像的图形内容产生为多个基元。另外,应用程序可确定基元的每一顶点的像素值,例如颜色、透明度和坐标值。在应用程序的执行期间(例如,在运行时间中),应用程序经由应用程序处理器发出命令以检索顶点着色器程序的指令。顶点着色器程序当经执行时的输出可为由应用程序为单个图像(例如,单视图)产生的基元的顶点的裁剪坐标。实例技术可修改顶点着色器程序的指令来产生用于左眼图像和右眼图像(例如,立体视图)的基元的顶点的裁剪坐标。用于左眼图像和右眼图像的基元的顶点的裁剪坐标可基于观看角度。观看角度指代在应用程序的执行期间观看者正观看左眼和右眼图像正显示于其上的显示器的角度(即,观看者相对于显示器的观看定向)。可存在确定观看角度的许多不同方式。本发明中描述的技术不限于确定观看角度的任何特定方式。并且,在应用程序的执行期间,应用程序经由应用程序处理器发出绘制指令到GPU以指示GPU绘制单个图像内的基元中的一或多者。举例来说,在本发明的技术中,在应用程序处理器上执行的应用程序如同GPU即将产生用于单个图像的图形内容那样输出指令。本文所描述的技术修改由应用程序发出的指令(例如绘制指令)来产生用于左眼和右眼图像的图形内容。以此方式,从应用程序的角度来看不存在对指令的修改。举例来说,应用程序处理器经由图形驱动器包装器监视由应用程序发出的指令。当应用程序发出绘制指令时,图形驱动器包装器俘获此绘制指令且发出两个绘制指令,其中一个指令是基于观看角度产生用于左眼图像的图形内容且一个指令是基于观看角度产生用于右眼图像的图形内容。观看角度可不保持恒定。举例来说,在应用程序的执行期间,观看者可倾斜装置,可倾斜他或她的头,或这两种情况。为了考虑观看角度的改变的可能性,应用程序处理器可周期性地确定观看角度。作为一个实例,在GPU输出左眼图像和右眼图像的一个组合之后,所述技术可确定观看角度。在此实例中,图形驱动器包装器可修改顶点着色器的指令以考虑由GPU再现的左眼图像和右眼图像的下一组合的观看角度的改变。或者,处理器可连续地确定观看角度,且图形驱动器包装器可利用当前观看角度来确定修改顶点着色器的指令的方式。如上文所描述,图形驱动器包装器可修改顶点着色器的指令以产生用于左眼图像和右眼图像两者的基元的顶点。举例来说,所述技术可致使经修改顶点着色器执行两次。在第一执行实例中,经修改顶点着色器可基于观看角度在第一方向上使顶点的裁剪坐标移位,且在第二执行实例中,经修改顶点着色器可基于观看角度在第二方向上使顶点的裁剪坐标移位。GPU可处理在第一方向上移位的顶点以再现左眼图像,且可处理在第二方向上移位的顶点以再现右眼图像。然而,在第一方向上使所有裁剪坐标移位且随后在第二方向上使所有裁剪坐标移位可得到立体视图,其中由应用程序产生的单个图像的所有对象表现为弹出或推入正在显示左眼图像和右眼图像的显示器。举例来说,由应用程序产生的基元可形成不同对象。通过在第一方向上使所有基元的裁剪坐标移位来产生左眼图像,且在第二方向上使所有基元的裁剪坐标移位来产生右眼图像,所有对象可表现为弹出或推入显示器。此结果对于人双眼视觉可能不是理想的。举例来说,观看者可能希望一些对象比其它对象弹出更多。作为另一实例,即使所有对象弹出或推入显示器达相同量,观看者也可能希望控制所述对象弹出或推入显示器的量。如更详细地描述,应用程序处理器经由图形驱动器包装器还可修改顶点着色器的指令以使得一些对象比其它对象弹出或推入显示器更多。在一些实例中,除修改顶点着色器的指令以允许一些对象比其它对象弹出或推入显示器更多之外或替代于修改顶点着色器的指令以允许一些对象比其它对象弹出或推入显示器更多,应用程序处理器经由图形驱动器包装器可修改增加或减小左眼图像与右眼图像之间的水平视差的指令。以此方式,观看者可能够控制立体视图弹出或推入显示器的量。图1是说明根据本发明中所描述的一或多个实例的显示立体视图的显示器的概念图。图1说明装置10。装置10的实例包含(但不限于)移动无线电话、个人数字助理(PDA)、包含视频显示器的视频游戏控制台、移动视频会议单元、膝上型计算机、桌上型计算机、电视机机顶盒、数字媒体播放器、平板计算装置、智能电话及类似物。装置10包含显示器12。显示器12的实例包含(但不限于)液晶显示器(LCD)、有机发光二极管显示器(OLED)、阴极射线管(CRT)显示器、等离子显示器、极化显示器或另一种类型的显示装置。显示器12可为经配置以显示立体视图(例如,左眼图像和右眼图像)的任何类型的显示器。如所示,显示器12显示3D图像14A和3D图像14B。图1将图像14A说明为实线框,且将图像14B说明为虚线框。图像14A和图像14B可各自为3D图像。举例来说,如果个别地观看图像14A和14B中的每一者,那么图像14A和14B将不会表现为弹出或推入显示器12(例如,表现为如同单视图)。然而,当一起观看图像14A和图像14B时,图像14A和图像14B一起形成立体视图。举例来说,图像14A和图像14B可包含相似图像内容,但在显示器12上移位。由观看者佩戴的专用眼镜可阻挡观看者的右眼看到图像14A,且允许观看者的左眼看见图像14B。所述专用眼镜还可阻挡观看者的左眼看到图像14B,且允许观看者的右眼看见图像14A。当观看者一起观看图像14A和14B时,图像14A与14B之间的水平视差可导致观看者感知到S3D图像(即,表现为在显示器12后方或显示器12前方且包含3D体积的图像)。换句话说,图像14A是立体视图的左眼图像,且图像14B是立体视图的右眼图像。在装置10的处理器上执行的应用程序可产生单个图像(例如,单视图)。举例来说,执行应用程序的处理器可将单个图像的图像内容产生为多个基元。此单个图像的图像内容可类似于图像14A和图像14B的图像内容。另外,执行应用程序的处理器可确定基元的每一顶点的像素值,例如颜色、透明度和坐标值。基元的像素值可被称为图像数据。执行应用程序的处理器可将图像数据和指令输出到装置10的图形处理单元(GPU),指示所述GPU再现单个图像。根据本发明中描述的技术,处理器可将命令俘获到GPU,其命令GPU再现单个图像。举例来说,处理器可执行图形驱动器或图形驱动器包装器,且处理器可经由所述图形驱动器或图形驱动器包装器将命令俘获到GPU以再现单个图像。出于说明的目的,将所述技术描述为由执行图形驱动器包装器的处理器执行。一般来说,为易于描述,所述技术描述执行各种功能的图形驱动器包装器。然而,应理解处理器是经由图形驱动器包装器的执行实施所述技术。举例来说,图形驱动器包装器可为在处理器上执行的程序。图形驱动器包装器可修改图形驱动器接收的指令或图形驱动器输出的指令以使得经修改指令致使GPU再现立体视图。因此,本发明中描述的技术可不需要对图形驱动器的任何修改。而是,处理器可执行图形驱动器包装器且执行先前开发的图形驱动器。然而,修改现有图形驱动器或产生新图形驱动器以实施本发明中描述的技术可为可能的。执行图形驱动器包装器的处理器可修改由处理器发出的命令且致使GPU再现形成立体视图的两个图像(例如,图像14A和图像14B)。另外,执行图形驱动器包装器的处理器可修改在GPU上执行的着色器程序(例如,顶点着色器)的指令。举例来说,图形驱动器包装器可修改顶点着色器的指令以使得经修改顶点着色器当在GPU上经执行时使由在处理器上执行的应用程序产生的单个图像中的像素的位置移位。图形驱动器包装器可致使GPU执行经修改顶点着色器两次。在经修改顶点着色器的第一执行中,经修改顶点着色器在一个方向上使单个图像中的像素的位置移位。在经修改顶点着色器的第二执行中,经修改顶点着色器在第二执行中在另一方向上使单个图像中的像素的位置移位。图像14A可为从顶点着色器在一个方向上使单个图像的像素移位而得到的图像。图像14B可为从顶点着色器在另一方向上使单个图像的像素移位而得到的图像。在修改顶点着色器的指令中,执行图形驱动器包装器的处理器可考虑观看角度。观看角度是观看者观看显示器12所处的角度。举例来说,在图1中,显示器12可以认为是在横向模式中。如果观看者笔直向前观看显示器12(即,观看者未倾斜他或她的头),那么观看角度可以认为是0。然而,如果观看者倾斜装置10或倾斜他或她的头,那么观看角度可不再为0。举例来说,如果观看者将装置10旋转为处于纵向模式(例如,将装置10倾斜90°),那么观看角度可为90°。应理解观看角度在横向模式中为0且在纵向模式中为90°是出于说明的目的而提供且不应被视为具限制性。本发明中描述的技术也适用于其中观看角度在纵向模式中是0且在横向模式中是90°的情形或横向与纵向模式之间的任何模式。一般来说,装置10的处理器可确定观看角度,且处理器经由在处理器上执行的图形驱动器包装器可基于观看角度而修改由应用程序输出到GPU的指令和在GPU上执行的着色器程序的指令。图形驱动器包装器可修改所述指令以使得GPU再现形成立体视图的两个图像而不是形成单视图的单个图像。图2是说明不同观看角度的概念图。出于说明的目的,图2说明观看者可倾斜装置10的不同角度。然而,本发明中描述的技术也可以扩展到其中观看者并不倾斜装置10而是倾斜他或她的头或两者的组合的实例。大多数立体3D显示器必须与装置定向上的约束一起使用。举例来说,多数全部3D电视是在横向模式中观看。这对于经设置用于在水平表面上使用(TV机柜、桌面等)的许多装置是合理的。然而,对于例如电话和平板计算机等手持式装置,观看者可在横向或纵向模式中或甚至以任何角定向观看显示器。举例来说,在位置18A中,装置10处于横向模式。为易于描述,图2说明定向点16,当装置10处于横向模式时其定位于装置10的右上角处。观看者可将装置10倾斜45°(即,从位置18A到位置18B)。在此情况下,图2说明在位置18B的定向点16相对于在位置18A的定向点在右下方向上移动。在此实例中,观看角度可视为45°。作为另一实例,观看者可将装置10倾斜-45°(即,从位置18A到位置18C)。在此情况下,图2说明在位置18C的定向点16相对于在位置18A的定向点在左上方向上移动。在此实例中,观看角度可视为-45°。因为观看者可将装置10倾斜任何量,所以观看角度可从-180°到180°变动。举例来说,横向和纵向是两个典型显示模式(例如,观看者将装置10从横向更多地旋转到纵向模式,或反之亦然)。在这些情况下,装置10可确定装置10是否处于横向模式或纵向模式,且处理器经由图形驱动器包装器可修改指令以致使GPU再现用于横向模式或纵向模式的左眼图像和右眼图像。然而,观看者可将装置10定向在任何角度,且不仅是在横向模式或纵向模式中。因此,处理器可考虑观看角度以确定修改在GPU上执行的指令的方式。可存在确定观看角度的各种方式。举例来说,装置10可包含装置10用来确定是否从横向模式切换到纵向模式的加速度计。装置10还可包含加速度计的单轴或多轴模型以检测恰当加速度的量值和方向。此加速度计可基于重量改变的方向而输出定向。装置10的处理器可基于输出定向确定观看角度。作为另一实例,装置10可包含陀螺仪。陀螺仪可基于角度动量守恒的原理提供定向的测量。装置10的处理器可基于由陀螺仪提供的定向的测量而确定观看角度。基于其它操作原理的陀螺仪也存在,例如在消费者电子装置中使用的电子微芯片封装MEMS陀螺仪装置。陀螺仪可提供比加速度计更准确的3D空间内的移动辨识。加速度计或陀螺仪的输出可允许处理器确定观看角度的合理的估计。然而,观看角度的估计可基于观看者以例如垂直(例如,观看者并不倾斜他或她的头)等特定方式定向的假设。换句话说,加速度计或陀螺仪可提供显示器定向的准确测量,其可足以确定观看角度的合理的估计但不可提供观看者定向的准确测量。在一些实例中,装置10的处理器确定观看者的定向(例如,观看者是否垂直定向,或观看者是否倾斜他或她的头)可为可能的。举例来说,显示器12或装置10可包含内建式面向前方的相机。通过面向前方的相机,相机处理器可检测观看者的眼睛或观看者相对于显示器12的头定向。装置10的处理器可基于如由相机处理器检测的所检测的眼睛或头定向而确定观看角度。除正常光学相机以外,其它传感器也可经配置以检测观看者的眼睛或头定向。一般来说,本发明中描述的技术可利用任何技术来确定观看角度,包含不必依赖于检测用户的眼睛或头的技术。本发明中描述的技术不应被视为限于上文描述的用于确定观看角度的实例。举例来说,本发明中描述的技术可仅基于加速度计和/或陀螺仪的输出确定观看角度。作为另一实例,本发明中描述的技术可仅基于所检测的用户的眼睛或头而确定观看角度。作为另一实例,本发明中描述的技术可基于加速度计和/或陀螺仪的输出且基于所检测的用户的眼睛或头而确定观看角度。作为另一实例,所述技术可基于加速度计和/或陀螺仪的输出且基于经配置以确定用户的观看定向的一或多个其它传感器而确定观看角度。上文的任何排列和组合以及任何其它技术可用以确定观看角度。图3是说明观看者的眼睛和头定向的检测的概念图。在图3中,装置10的显示器12显示由装置10的相机俘获的面。应理解显示器12并不需要显示由相机俘获的图像以确定观看角度,且图3为便于图示而说明显示器12显示由相机俘获的面。如图3中所示,装置10处于横向模式;然而,观看者的头倾斜。在此情况下,装置10的相机处理器可检测眼睛20A和20B的定向,且将眼睛20A和20B的定向发射到装置10的处理器。基于眼睛20A和20B的定向,装置10的处理器可确定观看角度。根据本发明中描述的技术,图形驱动器包装器可基于所确定的观看角度修改在GPU上执行的指令。图4是说明观看角度的实例的概念图。在图4中,观看角度标记为阿尔法(α)。观看角度是观看者的观看定向与显示器的定向之间的关系。举例来说,α是由眼睛的水平方向和显示器的水平方向形成的角度的测量。显示器的水平方向指代相对于显示器的定向的水平平面,且眼睛的水平方向指代相对于观看者的眼睛20A和20B的定向的水平平面。在图4中,观看者笔直观看显示器12(例如,不存在观看者的头的倾斜)。因此,眼睛的水平方向是水平直线。在图4中,装置10以一角度倾斜,且不在横向模式或纵向模式中。因此,显示器的水平方向是相对于装置10水平,但相对于眼睛的水平方向为成角度的线。图5是说明可实施本发明中描述的一或多个实例技术的装置的实例的框图。举例来说,图5进一步详细说明装置10。如图5中所示,装置10可包含应用程序处理器22、图形处理单元(GPU)30、系统存储器36、一或多个传感器42和相机处理器44。装置10可包含除图5中说明的那些组件之外的组件。此外,在一些实例中,应用程序处理器22、GPU30和相机处理器44可形成为容纳在单个电路封装内的共同集成电路(例如,形成为共同处理器)。然而,本发明的方面不限于此,且应用程序处理器22、GPU30和相机处理器44中的一或多者可为容纳在单独的电路封装中的单独的集成电路。一或多个传感器42可经配置以将装置10的定向的测量输出到应用程序处理器22。一或多个传感器42的实例包含加速度计和陀螺仪。相机处理器44可从由装置10的相机(未图示)或显示器12的相机(未图示)俘获的图像接收图像数据。在本发明中描述的技术中,相机可经配置以在无用户干预的情况下且在后台中连续地俘获图像。举例来说,所俘获图像不需要显示或存储以用于稍后检索。相机处理器44可从所俘获图像确定观看者的定向。相机处理器44可确定观看者的眼睛的定向以确定观看者的定向。相机处理器44可实施任何技术以识别观看者的眼睛,相机处理器44从中确定观看者的眼睛的定向。许多当前相机处理器经配置以识别观看者的眼睛,且这些当前相机处理器可为相机处理器44的一个实例。一或多个传感器42可将装置10的定向的测量输出到应用程序处理器22。相机处理器44可将观看者定向的测量输出到应用程序处理器22。应用程序处理器22可至少基于装置10的定向的测量和观看者的定向的测量确定观看角度。举例来说,应用程序处理器22可将观看角度确定为装置10的定向与观看者的定向之间的角度。如更详细地描述,应用程序处理器22可利用观看角度来确定修改顶点着色器38的指令的方式。相机处理器44可能不是在每个实例中都是必要的。举例来说,装置10的定向的测量对于应用程序处理器22确定观看角度可为足够的。在这些实例中,应用程序处理器22可以观看者定向的测量预配置。应用程序处理器22可基于装置10的定向的测量和观看者定向的预配置测量而确定观看角度。作为另一实例,应用程序处理器22可基于观看者的定向的测量而确定观看角度而无需使用一或多个传感器42的输出。在此实例中,应用程序处理器22可以装置10的定向预配置(例如,可经预配置以当不使用一或多个传感器42的输出时确定装置10的定向是横向)。利用一或多个传感器42和相机处理器44确定观看角度是仅出于说明的目的而提供且不应被视为具限制性。可存在应用程序处理器22可确定观看角度的其它方式,且本发明中描述的技术可扩展到此些其它技术。在一些实例中,应用程序处理器22可在每次立体视图的产生确定观看角度一次,因为观看者可改变观看角度。举例来说,GPU30可输出经再现图像,例如立体视图的左眼图像和右眼图像。在左眼图像和右眼图像两者的每次输出之后,应用程序处理器22可确定观看角度。作为另一实例,应用程序处理器22可连续地确定观看角度。如更详细地描述,应用程序处理器22经由图形驱动器包装器26可基于当前所确定的观看角度修改顶点着色器38的指令以使得当顶点着色器38处理下一图像时,顶点着色器38可产生如由应用程序处理器22所确定的下一左眼图像和下一右眼图像的裁剪坐标。应用程序处理器22可为装置10的中央处理单元(CPU)。GPU30可为可操作以输出图形数据以供在显示器上呈现的处理单元。应用程序处理器22、GPU30和相机处理器44的实例包含(但不限于)数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路。在一些实例中GPU30可为经具体设计用于图形处理的专用硬件。举例来说,图形处理可需要快速并行处理,且GPU30可经具体设计用于此些快速并行处理。GPU30执行除图形处理之外的任务可为可能的,例如一般处理任务。因此,GPU30可视为一般处理GPU(GPGPU)。本发明中描述的技术可应用于其中GPU30仅执行图形相关任务的实例或其中GPU30是GPGPU的实例。系统存储器36可为计算机可读存储媒体的实例。举例来说,系统存储器36可存储致使应用程序处理器22和GPU30执行归于本发明中的每一者的功能的指令。系统存储器36可视为包括致使一或多个处理器(例如,应用程序处理器22或GPU30)执行各种功能的指令的计算机可读存储媒体。系统存储器36的实例包含但不限于随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置、快闪存储器,或可用于以指令或数据结构的形式携载或存储所要的程序代码且可由计算机或处理器存取的任何其它媒体。在一些实例中,系统存储器36可被视为非暂时性存储媒体。术语“非暂时性”可指示存储媒体不体现于载波或传播信号中。然而,术语“非暂时性”不应解释为意指系统存储器36是不可移动的。作为一个实例,可从装置10移除系统存储器36,及将所述系统存储器移动到另一装置。作为另一实例,实质上类似于系统存储器36的存储装置可插入到装置10中。在某些实例中,非暂时性存储媒体可存储可随时间改变的数据(例如,在RAM中)。GPU30可包含着色器处理器32和固定功能管线34。有时称为着色器核心的着色器处理器32可为GPU30的核心,例如顶点着色器和片段着色器等着色器程序在其上执行。固定功能管线34可包含执行固定功能的硬件单元。换句话说,例如顶点着色器和片段着色器等着色器程序可为在着色器处理器32上执行且允许功能灵活性的软件单元,而固定功能管线34包含具有固定功能和最小功能灵活性的硬件单元。举例来说,GPU的一些较早版本仅包含图形管线中的固定功能单元。在GPU30中,GPU的较早版本的固定功能图形管线部分地被顶点着色器(例如顶点着色器38)和片段着色器代替。举例来说,顶点着色器38可执行例如模型视图变换、照明和投影等功能,其由GPU的较早版本中的固定功能单元执行。片段着色器可执行GPU的较早版本中的固定功能单元的片段级的功能。本发明中描述的实例技术可修改经设计以产生单个三维(3D)图像(例如,用于单视图)的着色器程序,以使得当经修改着色器程序在着色器处理器32上执行时,GPU30基于观看角度产生用于S3D图像(例如,立体视图)的图形数据。再次,如上文所论述,立体视图包含左眼图像和右眼图像。左眼图像和右眼图像包含与单视图图像大体上类似的图形内容;然而,左眼和右眼图像的一或多个对应像素可相对于彼此沿着水平轴线移位。举例来说,设想右眼图像放置在左眼图像之上。在此情况下,右眼图像中的所有内容可能不与左眼图像中的相同内容完美地对齐。而是,右眼中的一或多个对象可在左眼图像中的相同对象的左边或右边(例如,右眼图像与左眼图像中的对象之间可存在水平视差)。为了高质量立体效果,右眼图像与左眼图像中的对象之间可不存在垂直视差。左眼图像可由观看者的左眼观看,且右眼图像被阻挡于观看者的左眼。右眼图像可由观看者的右眼观看,且左眼图像被阻挡于观看者的右眼。在一些实例中,观看者可佩戴专用眼镜,其阻挡左眼图像由右眼观看且阻挡右眼图像由左眼观看。然而,本发明的方面不必需要观看者佩戴专用眼镜。举例来说,一些显示器并不需要观看者佩戴专用眼镜来体验立体视图。本发明的技术可延伸到此些显示器。GPU30可产生用于左眼图像和右眼图像的图形数据以使得当观看者同时观看左眼图像和右眼图像时,观看者的大脑致使观看者感知到弹出或推入正在显示所述两个图像的显示器的图像(例如,表现为在显示器前方或后方)。此弹出或推入是由于观看者的大脑解析立体视图的具有大体上类似内容的两个图像中的水平差异。举例来说,观看者的双眼视觉致使观看者同时观看左眼图像和右眼图像两者,且观看者通过感知深度来解析左眼和右眼图像中的水平差异。作为一实例,应用程序处理器22可执行存储在系统存储器36中的一或多个应用程序,例如应用程序42。应用程序32的实例包含(但不限于)网络浏览器、用户接口、电子邮件应用程序、电子表格应用程序、文字处理应用程序、图形创作应用程序、视频游戏或产生用于显示的可观看对象的其它应用程序。举例来说,应用程序42可为当经执行时输出显示于显示器上的图形内容的视频游戏。应用程序42可由开发者针对单视图而设计。举例来说,应用程序42在执行后可即刻产生3D图形内容,其中3D图形内容被限制于显示器的2D区域。应用程序42在应用程序处理器22上执行后可将产生的3D图形内容划分为基元,例如三角形、矩形或其它类型的多边形。这些基元中的每一者可包含将在显示器上显示的像素。举例来说,这些基元可形成图像内的对象。应用程序42在应用程序处理器22上执行后还可即刻对基元的顶点中的每一者指派像素值。举例来说,像素值可包含顶点的3D坐标、顶点的颜色值以及顶点的透明度值。像素值不需要在本发明的每个方面中都包含所有以上实例组件。应用程序处理器22可随后将顶点的像素值转发到GPU30用于进一步处理。举例来说,应用程序处理器22可包含图形驱动器24,其可为在应用程序处理器22上执行的软件。应用程序处理器经由图形驱动器24可经配置以将命令发射到GPU30,且作为响应,GPU30可根据所接收的命令执行功能。举例来说,图形驱动器24充当GPU30与应用程序处理器22之间的接口。当应用程序处理器22发出命令到GPU30时,GPU30是通过图形驱动器24接收所述命令。举例来说,在应用程序处理器22上执行的应用程序42可指示GPU30执行特定任务。在此情况下,图形驱动器24可从应用程序42接收用于特定任务的指令,且应用程序处理器22可将指令提供到GPU30。作为响应,GPU30可执行所述任务。在一些实例中,可根据特定应用程序编程接口(API)设计图形驱动器24。举例来说,图形驱动器24可根据OpenGL或OpenGLES(嵌入式系统)API而设计,其为柯罗诺斯团队(KhronosGroup)的API且其规范是公开可用的。然而,本发明的技术可扩展到微软DirectX系统,例如DirectX9、10或11,或任何其它基于着色器的图形系统和API。出于说明的目的,在其中API是OpenGLES2.0API的上下文中描述本发明的技术。然而,本发明的方面不限于此,且可延伸到其它API或基于着色器的图形系统。为了再现从应用程序处理器22接收的基元,GPU30的着色器处理器32可执行例如顶点着色器和片段着色器等一或多个着色器程序来产生显示器的像素的像素值。开发者可根据例如出于说明的目的在本发明中使用的OpenGLES2.0API的API而开发这些顶点着色器和片段着色器。用于这些顶点和片段着色器的源代码可存储在系统存储器36中。举例来说,应用程序42可利用顶点着色器38,其可经配置以对由应用程序42产生的单视图的图像操作。由应用程序42产生的单视图的图像的像素值可需要由着色器处理器32使用顶点着色器38处理。作为一个实例,顶点着色器38可为在应用程序42在应用程序处理器22上的执行期间具体来说由应用程序42调用的顶点着色器。顶点着色器38可在GPU20的着色器处理器32上执行,且应用程序42可在应用程序处理器22上执行,但顶点着色器38和应用程序42可出于显示由应用程序42产生的图像的目的而互相关。顶点着色器38的源代码可存储在系统存储器36中。应用程序处理器22经由图形驱动器24可检索顶点着色器38的源代码且将用于顶点着色器38的源代码提供到编译器28。编译器28可编译顶点着色器38的源代码来产生顶点着色器38的目标代码,且将目标代码存储在系统存储器38中。应用程序处理器22经由图形驱动器34可随后指示GPU30从系统存储器36检索顶点着色器38的目标代码,且指示GPU30在着色器处理器32上执行顶点着色器38的目标代码。着色器处理器32可随后执行顶点着色器38的目标代码以处理由应用程序42的执行产生的顶点的像素值。GPU30与固定功能管线34和着色器处理器32结合可产生用于应用程序42的图形内容供显示。虽然系统存储器36展示为存储用于仅一个顶点着色器38的源代码,但本发明的方面不限于此。举例来说,应用程序42可能利用多个不同顶点着色器,且用于这些顶点着色器中的每一者的源代码可存储在系统存储器36中。举例来说,顶点着色器可为内容相依的且甚至场景相依的,且应用程序42可基于待再现的图像的内容或场景而利用特定着色器。并且,应用程序42可需要顶点着色器38的多个示例的执行。举例来说,着色器处理器32可同时(例如,并行)执行顶点着色器38的多个示例,其中顶点着色器38的每一示例执行大体上类似功能但是在不同像素值上执行。系统存储器36可类似地存储用于片段着色器的源代码。图形驱动器34可检索用于片段着色器的源代码,且编译器28可以类似于上文对于顶点着色器38所述方式的方式编译所述源代码来产生用于片段着色器的目标代码。如将进一步详细描述,本发明的一或多个实例技术可在编译之前基于观看角度修改顶点着色器38(例如,顶点着色器38的源代码)。编译器28可编译经修改源代码来产生经修改顶点着色器40的目标代码。着色器处理器32可执行经修改顶点着色器40的目标代码,其可致使GPU30产生立体3D图形内容(例如,用于S3D的左眼图像和右眼图像的图形内容)。然而,在描述对顶点着色器38的修改之前,以下描述顶点着色器38的实例功能性,其可辅助理解应用于顶点着色器38的源代码的修改。此外,在本发明中术语“命令”和“指令”可互换地使用。如上文所描述,应用程序处理器22经由应用程序42可产生基元的顶点的坐标。这些坐标可被称为世界坐标,且可对应用程序42为特定的。换句话说,如由应用程序42定义的顶点的坐标可不必为基元显示于其上的显示器的坐标,且也可能为在可观看区域之外的顶点的坐标。顶点着色器38可经设计以将可在3D中的世界坐标转换为显示器的2D坐标(例如,显示器坐标)。为了执行此功能,顶点着色器38可将世界坐标变换为眼睛坐标,且随后变换为裁剪坐标。举例来说,顶点着色器38当经执行时的输出可为顶点的裁剪坐标。作为固定功能管线34的部分,随后可确定最终显示器坐标(例如,显示器的坐标)。裁剪坐标可界定视图锥台。视图锥台可界定3D图形内容的可观看区域。GPU30可利用视图锥台来剔除驻留在视图锥台外部的像素。举例来说,固定功能管线34的固定功能单元(例如,固定功能管线24的锥台单元)可剔除驻留在如由顶点着色器38产生的裁剪坐标定义的视图锥台外部的像素。从世界坐标计算裁剪坐标的等式可为:V裁剪=PRJ*V眼睛=PRJ*MVT*V世界,(等式1)其中V裁剪是顶点裁剪坐标,V眼睛是顶点眼睛坐标,V世界是由应用程序42提供的顶点世界坐标,PRJ是投影矩阵,且MVT是模型视图变换矩阵(或世界视图变换矩阵)。在一些实例中,PRJ和MVT矩阵可组合为单个矩阵。然而,为便于理解,单独地描述这些矩阵。投影矩阵(PRJ)和模型视图或世界视图变换矩阵(MVT)可由API定义。术语模型视图和世界视图可互换地使用。V裁剪、V眼睛和V世界可包含四个分量(例如,x、y、z和w坐标)。V裁剪、V眼睛和V世界矩阵可表示为:具有可编程着色器的OpenGL、OpenGLES和OpenGLES2.0API将PRJ矩阵界定为:其中L和R分别指定左和右垂直裁剪平面的坐标,B和T分别指定底部和顶部水平裁剪平面的坐标,且z近和z远分别指定到近和远深度裁剪平面的距离。在一些实例中,裁剪平面可为对称的。举例来说,-L可等于R,且-B可等于T。在这些情况下,PRJ矩阵可简化到:具有可编程着色器的OpenGL、OpenGLES和OpenGLES2.0API将MVT矩阵界定为:(等式5)PRJ和MVT矩阵的所有变量可由在应用程序处理器22上执行的应用程序42定义,且图形驱动器24可将这些变量提供到执行顶点着色器38的目标代码的着色器处理器32。从等式1、4和5可以看出,通过这些变量,顶点着色器38可确定顶点中的每一者的V裁剪坐标。GPU30可利用顶点的裁剪坐标且执行进一步功能性结合固定功能管线34和片段着色器的功能性来再现用于显示的图像。以此方式,GPU30可产生用于由应用程序42产生的图形内容的单视图。根据本发明的技术,虽然顶点着色器38可利用MVT和PRJ矩阵的变量来确定V裁剪坐标,但可不需要MVT和PRJ矩阵来修改顶点着色器38(例如,修改顶点着色器38的源代码)来产生立体视图。换句话说,本发明中描述的技术修改的指令可不需要MVT和PRJ矩阵的特定值。举例来说,可存在设计顶点着色器38的许多方式,且顶点着色器38可为内容且甚至场景相依的,从而允许内容开发者利用许多不同方式来对顶点着色器38进行编程。因此,确定MVT和PRJ矩阵由开发者定义的特定方式可能是不可行的。然而,本发明中描述的技术并不需要知道开发者开发顶点着色器38的方式或开发者界定MVT和PRJ矩阵的方式。上文实例描述确定单视图的V裁剪坐标的一种方法。可存在许多不同技术来计算裁剪坐标,且一般来说,用以计算裁剪坐标的特定技术可为不重要的。然而,在任何情况下,对于3D图形内容,不管用以计算裁剪坐标的技术如何都可能需要计算裁剪坐标(V裁剪)。举例来说,甚至可能应用程序处理器22确定裁剪坐标,且图形驱动器24可将裁剪坐标提供到执行顶点着色器38的目标代码的着色器处理器32。在此实例中,PRJ和MVT矩阵可为单位矩阵。举例来说,应用程序处理器22可执行等式1的矩阵乘法且将结果提供到着色器处理器32。在此实例中,着色器处理器32可将所接收值与单位矩阵相乘来产生由应用程序42产生的顶点中的每一者的V裁剪坐标。然而,在任何情况下(例如,其中执行顶点着色器38的着色器处理器32确定裁剪坐标或其中执行顶点着色器38的着色器处理器32接收裁剪坐标),顶点着色器38可利用特定变量来存储裁剪坐标。所述特定变量可对顶点着色器38针对其设计的API为特定的。举例来说,如果根据具有可编程着色器的OpenGL、OpenGLES或OpenGLES2.0API设计顶点着色器38,那么顶点着色器38可将裁剪坐标存储在gl_Position变量中。可自动声明gl_Position变量。在其它图形API中可存在相似变量。如果根据具有可编程着色器的OpenGL、OpenGLES或OpenGLES2.0API设计顶点着色器38,那么顶点着色器38可包含例如以下指令:gl_Position.x=x裁剪,gl_Postion.y=y裁剪,gl_Position.z=z裁剪,且gl_Position.w=w裁剪,其中如上文等式2中所指出,在本发明中描述的一或多个实例技术中,可为在应用程序处理器22上执行的软件的图形驱动器包装器26可修改顶点着色器38的界定用于单视图的裁剪坐标的指令,以界定用于立体视图的裁剪坐标(例如,用于左眼图像和裁剪坐标和用于右眼图像的裁剪坐标)。举例来说,图形驱动器包装器26可从应用程序处理器22接收所确定的观看角度。应用程序处理器22由于图形驱动器包装器26的执行可经配置以基于由应用程序处理器22所确定的观看角度而修改顶点着色器38的指令以界定用于立体视图的裁剪坐标。举例来说,应用程序处理器22经由图形驱动器包装器26可修改顶点着色器38的指令以使得当顶点着色器38的经修改指令由着色器处理器32第一次执行时,顶点着色器38的经修改指令基于观看角度在一个方向上使裁剪坐标移位,且当顶点着色器38的经修改指令由着色器处理器32第二次执行时,顶点着色器的经修改指令基于观看角度在另一方向上使同一裁剪坐标移位。然而,简单地在不同方向上使裁剪坐标移位且再现所得图像可致使立体视图始终以某一固定量弹出显示器12或始终以某一固定量推入显示器12。此结果对观看者可为不合意的。举例来说,假定立体视图弹出显示器12。在此情况下,观看者可感知到在显示器12的前方某一距离的平面上的立体视图。观看者感知到立体视图的此平面可被称为零视差平面(ZDP)。然而,观看者可需要感知到处于不同于当前零视差平面的距离处的...
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1