CN103493102A - 用于基于着色器的图形内容的立体转换 - Google Patents

用于基于着色器的图形内容的立体转换 Download PDF

Info

Publication number
CN103493102A
CN103493102A CN201280018404.2A CN201280018404A CN103493102A CN 103493102 A CN103493102 A CN 103493102A CN 201280018404 A CN201280018404 A CN 201280018404A CN 103493102 A CN103493102 A CN 103493102A
Authority
CN
China
Prior art keywords
order
image
vertex shader
instruction
viewport
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201280018404.2A
Other languages
English (en)
Other versions
CN103493102B (zh
Inventor
毕宁
张雪瑞
魏建
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of CN103493102A publication Critical patent/CN103493102A/zh
Application granted granted Critical
Publication of CN103493102B publication Critical patent/CN103493102B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/20Perspective computation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N13/00Stereoscopic video systems; Multi-view video systems; Details thereof
    • H04N13/10Processing, recording or transmission of stereoscopic or multi-view image signals
    • H04N13/106Processing image signals
    • H04N13/122Improving the 3D impression of stereoscopic images by modifying image signal contents, e.g. by filtering or adding monoscopic depth cues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/30Clipping
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N13/00Stereoscopic video systems; Multi-view video systems; Details thereof
    • H04N13/20Image signal generators
    • H04N13/275Image signal generators from 3D object models, e.g. computer-generated stereoscopic image signals
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N13/00Stereoscopic video systems; Multi-view video systems; Details thereof
    • H04N13/20Image signal generators
    • H04N13/286Image signal generators having separate monoscopic and stereoscopic modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/506Illumination models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/60Shadow generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • General Physics & Mathematics (AREA)
  • Geometry (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Image Generation (AREA)
  • Processing Or Creating Images (AREA)
  • Testing, Inspecting, Measuring Of Stereoscopic Televisions And Televisions (AREA)

Abstract

本发明的实例技术是针对从经设计以产生单视图的应用程序产生立体视图。举例来说,所述技术可修改顶点着色器的源代码以致使所述经修改顶点着色器在执行时产生所述立体视图的图像的图形内容。作为另一实例,所述技术可将定义所述单视图的视口的命令修改为定义所述立体视图的图像的视口的命令。

Description

用于基于着色器的图形内容的立体转换
本申请案主张2011年3月14日申请的第61/452,289号美国临时申请案和2011年4月12日申请的第61/474,638号美国临时申请案的权利,每一临时申请案的相应全部内容特此以引用的方式并入。
技术领域
本发明涉及图形数据处理,且更确切来说,涉及用于立体视图的图形数据处理。
背景技术
立体视图指代看起来包含3维(3D)体积的所感知图像。为了产生立体视图,装置在显示器的2维(2D)区域上显示两个图像。此两个图像包含实质上类似的内容,但所述内容具有沿两个图像中的一个或一个以上对应像素的水平轴的轻微位移。同时检视2D区域上的此两个图像致使检视者感知跳出正显示两个图像的2D显示器之外或推入到所述2D显示器中的图像。以此方式,尽管两个图像显示于显示器的2D区域上,但检视者感知看起来包含3D体积的图像。
立体视图的两个图像分别被称作左眼图像和右眼图像。左眼图像可由检视者的左眼检视,且右眼图像不可由检视者的左眼检视。类似地,右眼图像可由检视者的右眼检视,且左眼图像不可由检视者的右眼检视。举例来说,检视者可戴上专用眼镜,其中眼镜的左透镜挡住右眼图像且使左眼图像通过,且眼镜的右透镜挡住左眼图像且使右眼图像通过。
因为左眼图像和右眼图像包含具有沿水平轴的轻微位移但不可由检视者双眼同时检视(例如,由于专用眼镜)的实质上类似的内容,所以检视者的大脑通过混合两个图像来解析对应像素之间的轻微位移。混合致使检视者将两个图像感知为具有3D体积的图像。
发明内容
一般来说,本发明的技术是针对修改产生单视图的指令以产生立体视图。举例来说,图形处理单元(GPU)的着色器程序可经设计以产生单视图。本发明中所描述的技术可修改此着色器程序的指令。举例来说,实例技术可添加修改由所述着色器程序产生的值的指令。所述技术还可修改由应用程序发出的指令以致使GPU产生立体视图而非单视图的图像。举例来说,本发明中所描述的技术可修改定义视口的命令。视口可定义显示器上的图像的大小和位置。举例来说,在修改之前,命令可定义单视图的视口。实例技术可修改定义单视图的视口的命令以定义立体视图的图像中的每一者的视口。
在一个实例中,本发明描述一种包含通过处理器接收用于顶点着色器的指令的方法,所述顶点着色器经配置以产生单视图的图像,且将执行于图形处理单元(GPU)的着色器处理器上。所述方法还包含通过所述处理器修改所述顶点着色器的所述指令以包含一个或一个以上指令,所述一个或一个以上指令致使所述顶点着色器在执行于所述GPU的所述着色器处理器上时在所述顶点着色器的第一次执行之后产生立体视图的第一图像的图形内容及在所述顶点着色器的第二次执行之后产生所述立体视图的第二图像的图形内容。所述方法进一步包含通过所述处理器将定义所述单视图的所述图像的视口的命令修改为用于不同于所述着色器处理器的所述GPU的固定功能单元的定义所述第一图像的视口的第一命令,及用于所述GPU的所述固定功能单元的定义所述第二图像的视口的第二命令。
在另一实例中,本发明描述一种包含图形处理单元(GPU)和处理器的设备,所述GPU包含着色器处理器和固定功能管线的不同于所述着色器处理器的固定功能单元。所述处理器可操作以接收用于顶点着色器的指令,所述顶点着色器经配置以产生单视图的图像,且将执行于GPU的所述着色器处理器上。所述处理器还可操作以修改所述顶点着色器的所述指令以包含一个或一个以上指令,所述一个或一个以上指令致使所述顶点着色器在执行于所述GPU的所述着色器处理器上时在所述顶点着色器的第一次执行之后产生立体视图的第一图像的图形内容及在所述顶点着色器的第二次执行之后产生所述立体视图的第二图像的图形内容。所述处理器可进一步操作以将定义所述单视图的所述图像的视口的命令修改为用于不同于所述着色器处理器的所述GPU的固定功能单元的定义所述第一图像的视口的第一命令,及用于所述GPU的所述固定功能单元的定义所述第二图像的视口的第二命令。
在另一实例中,本发明描述一种包含图形处理单元(GPU)和处理器的设备,所述GPU包含着色器处理器和固定功能管线的不同于所述着色器处理器的固定功能单元。所述处理器包含用于接收用于顶点着色器的指令的装置,所述顶点着色器经配置以产生单视图的图像,且将执行于所述GPU的所述着色器处理器上。所述处理器还包含用于修改所述顶点着色器的所述指令以包含一个或一个以上指令的装置,所述一个或一个以上指令致使所述顶点着色器在执行于所述GPU的所述着色器处理器上时在所述顶点着色器的第一次执行之后产生立体视图的第一图像的图形内容及在所述顶点着色器的第二次执行之后产生所述立体视图的第二图像的图形内容。所述处理器进一步包含用于将定义所述单视图的所述图像的视口的命令修改为用于不同于所述着色器处理器的所述GPU的固定功能单元的定义所述第一图像的视口的第一命令及用于所述GPU的所述固定功能单元的定义所述第二图像的视口的第二命令的装置。
在另一实例中,本发明描述包括指令的非暂时性计算机可读存储媒体。所述指令在执行时致使一个或一个以上处理器接收用于顶点着色器的指令,所述顶点着色器经配置以产生单视图的图像,且将执行于图形处理单元(GPU)的着色器处理器上。所述指令还致使所述一个或一个以上处理器修改所述顶点着色器的所述指令以包含一个或一个以上指令,所述一个或一个以上指令致使所述顶点着色器在执行于所述GPU的所述着色器处理器上时在所述顶点着色器的第一次执行之后产生立体视图的第一图像的图形内容及在所述顶点着色器的第二次执行之后产生所述立体视图的第二图像的图形内容。所述指令还致使所述一个或一个以上处理器将定义所述单视图的所述图像的视口的命令修改为用于不同于所述着色器处理器的所述GPU的固定功能单元的定义所述第一图像的视口的第一命令及用于所述GPU的所述固定功能单元的定义所述第二图像的视口的第二命令。
在随附图式及下文描述中阐述本发明的一个或一个以上方面的细节。从描述和图式,以及从权利要求书将明白本发明的其它特征、目的和优势。
附图说明
图1是说明可实施本发明中所描述的一个或一个以上实例技术的装置的实例的框图。
图2是说明可实施本发明中所描述的一个或一个以上实例技术的图形处理单元(GPU)的实例的框图。
图3是进一步详细说明图1的实例装置的框图。
图4是说明根据本发明中所描述之一个或一个以上实例技术的实例操作的流程图。
具体实施方式
本发明中所描述的实例技术是针对在执行期间或在运行时期间呈现立体3维(S3D)图形。在常规3D图形呈现中,图形处理单元(GPU)从单个视点(例如,单视图)产生3D图形。此单个视点可意谓可由检视者的右眼和左眼两者检视的单个图像。
S3D图形与3D图形的不同之处在于S3D图形产生立体视图。术语立体视图指代根据双眼视点产生的图像。在双眼视点中,可存在两个图像,其中一个图像可由眼睛中的一者检视且不可由另一者检视,且反之亦然。举例来说,当检视者戴上双目镜时,经由双目镜的左透镜进入的光可由左眼检视且不可由右眼检视,且反之亦然。双眼视点可被称作立体视图。
举例来说,在S3D图形中,GPU可产生用于左眼的图像和用于右眼的另一图像,即,立体视图。术语立体视图指代各自显示于显示器上的两个图像(例如,左眼图像和右眼图像),而单视图指代显示于显示器上的单个图像。对于检视者来说,左眼图像与右眼图像的组合可看起来好像图像正跳出正显示图像的显示器之外或推入到所述显示器中。此情形可导致更逼真且更丰富的检视体验。
在本发明中,不应混淆S3D图像(例如,立体视图)和3D图像(例如,单视图)的概念。3D图像为被显示器的2维(2D)区域约束的图像。举例来说,3D图像内的对象可看起来比3D图像内的其它对象较远或较近。然而,所有这些对象受限于显示器的2D区域。S3D图像为通过检视者的大脑组合右眼图像和左眼图像产生的感知图像。所得图像(即,S3D图像)看起来不受显示器的2D区域约束。更确切地,S3D图像看起来包含3D体积,其中图像看起来跳出显示器之外或推入到显示器中。举例来说,S3D图像内的对象看起来比3D体积而非2D区域(其为3D图像下的情况)内的其它对象较远或较近。
一起形成S3D图像的右眼图像和左眼图像可为3D图像。检视者的大脑致使检视者在大脑组合3D右眼图像与3D左眼图像时感知S3D图像。右眼图像和左眼图像的内容可实质上类似于单个3D图像的内容。本发明中所描述的技术可将致使GPU产生单视图的图形内容的指令修改为致使GPU产生立体视图的图形内容的指令。换句话说,在修改之前,指令可致使GPU产生单个3D图像。在修改之后,指令可致使GPU产生两个3D图像(例如,3D左眼图像和3D右眼图像)。
应注意,尽管本发明中所描述的技术大体上是针对3D图像而揭示的,但本发明的方面不限于此。本发明的技术还可扩展到2D图形。举例来说,单视图的单个图像可为2D图像,且本发明的技术可修改指令以致使GPU产生立体视图的两个2D图像。在此状况下,检视者将感知到跳出正显示立体视图的两个图像的显示器之外或推入到所述显示器中的单个图像。为了避免混淆,下文描述的技术涉及单视图的单个图像及立体视图的左眼和右眼图像(在理解此些图像可为3D图像或2D图像的情况下)。
本发明中所描述的实例技术可修改由应用程序发出的待由GPU执行的指令及待由GPU执行的顶点着色器程序的指令。举例来说,应用程序处理器可执行所述应用程序。所述应用程序可经设计以产生单个图像(例如,单视图),且可产生单个图像的图形内容作为多个基元。另外,所述应用程序可确定基元的每一顶点的像素值,例如颜色、透明度和坐标值。
在应用程序的执行期间(例如,在运行时),应用程序发出命令以检索顶点着色器程序的指令。顶点着色器程序在执行时的输出可为单个图像(例如,单视图)的由应用程序产生的基元的顶点的剪切坐标。实例技术可修改顶点着色器程序的指令以产生左眼图像和右眼图像(例如,立体视图)的基元的顶点的剪切坐标。
而且,在应用程序的执行期间,应用程序将绘制指令发出到GPU以指挥GPU绘制单个图像内的基元中的一者或一者以上。举例来说,在本发明的技术中,执行于应用程序处理器上的应用程序输出指令,就好像GPU将要产生单个图像的图形内容一样。本文中所描述的技术修改由应用程序发出的指令(例如,绘制指令)中的一者或一者以上,以产生左眼图像和右眼图像的图形内容。以此方式,从应用程序的视角来看,不存在对指令的修改。
举例来说,本发明中所描述的技术监视由应用程序发出的指令。当应用程序发出绘制指令时,所述技术捕获此绘制指令且发出两个绘制指令,其中一个指令将产生左眼图像的图形内容,且一个指令将产生右眼图像的图形内容。
另外,所述技术修改由应用程序发出的视口指令。举例来说,应用程序发出定义单个图像的视口的视口指令。视口定义显示器上的图像的大小和位置。举例来说,视口可定义图像的开始坐标及图像的宽度和长度。图像的宽度和长度可为指示由图像包含的水平距离和垂直距离的值。宽度和长度不一定需要为坐标值;更确切地,宽度和长度定义从图像的开始坐标开始的距离。应用程序可向GPU提供单个图像的视口的定义。
本发明的技术修改视口指令以产生用于左眼图像和右眼图像的定义显示器上的左眼图像和右眼图像中的每一者的大小和位置的视口指令。以此方式,经修改视口指令可将左眼图像约束到显示器的一个部分,且将右眼图像约束到显示器的另一部分。在一些实例中,经修改视口指令可将左眼图像约束到显示器的左半边,且将右眼图像约束到显示器的右半边。然而,本发明的方面不限于此,且作为另一非限制性实例,经修改视口指令可将左眼图像约束到显示器的上半部,且将右眼图像约束到显示器的下半部。在一些情况下,实例技术可进一步修改右眼图像和左眼图像的视口以潜在地提供更好的检视体验。举例来说,所述技术可将右眼图像和左眼图像的视口移位或拉伸。
修改视口的指令可不为修改着色器程序的指令的部分。举例来说,GPU可包含有时被称作着色器核心的着色器处理器,及一个或一个以上固定功能单元。顶点着色器程序可在着色器处理器上执行,且用以将图像约束到经定义视口的视口的应用程序可由固定功能单元(例如,固定功能单元的视口变换单元)中的至少一者执行。在实例技术中,着色器处理器可执行经修改着色器程序以产生立体视图的图形内容,且至少一个固定功能单元可应用左眼图像和右眼图像中的每一者的经定义视口以将此些图像约束到显示器的相应半部。换句话说,视口修改可在经修改着色器程序的执行之外发生。
图1是说明可实施本发明中所描述的一个或一个以上实例技术的装置的实例的框图。举例来说,图1说明装置10。装置10的实例包含但不限于移动无线电话、个人数字助理(PDA)、包含视频显示器的电视游戏机、移动视频会议单元、膝上型计算机、台式计算机、电视机顶盒、数字媒体播放器、智能手机等等。如图1中所说明,装置10可包含应用程序处理器12、图形处理单元(GPU)20和系统存储器26。除了图1中所说明的组件之外,装置10还可包含其它组件。此些组件出于清楚的目的在图1中未说明,且在图3中进一步说明。
应用程序处理器12可为装置10的中央处理单元(CPU)。GPU20可为可操作以输出图形数据以供呈现于显示器上的处理单元。应用程序处理器12和GPU20的实例包含但不限于数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路。
系统存储器26可为计算机可读存储媒体的实例。举例来说,系统存储器26可存储致使应用程序处理器12和GPU20执行在本发明中属于各自的功能的指令。以此方式,系统存储器26可被视为包括指令的计算机可读存储媒体,所述指令致使一个或一个以上处理器(例如,应用程序处理器12或GPU20)执行各种功能。
系统存储器26的实例包含但不限于随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置、快闪存储器或可用来载运或存储呈指令或数据结构形式的所要程序代码且可由计算机或处理器存取的任何其它媒体。在一些实例中,系统存储器26可被视为非暂时性存储媒体。术语“非暂时性”可指示存储媒体未以载波或经传播信号形式体现。然而,术语“非暂时性”不应解释为意谓系统存储器26为不可移动的。作为一个实例,可将系统存储器26从装置10移除,且移动到另一装置。作为另一实例,实质上类似于系统存储器26的存储装置可插入到装置10中。在某些实例中,非暂时性存储媒体可存储可随时间的流逝而改变的数据(例如在RAM中)。
GPU20可包含着色器处理器22和固定功能管线24。有时被称作着色器核心的着色器处理器22可为执行例如顶点着色器和片段着色器等着色器程序的GPU20的核心。固定功能管线24可包含执行固定功能的硬件单元。换句话说,例如顶点着色器和片段着色器等着色器程序可为在着色器处理器22上执行且允许功能灵活性的软件单元,而固定功能管线24包含具有固定功能和最小功能灵活性的硬件单元。
本发明中所描述的实例技术可修改经设计以产生单个三维(3D)图像(例如,针对单视图)的着色器程序,使得当经修改着色器程序执行于着色器处理器22上时,GPU20产生S3D图像(例如,立体视图)的图形数据。再一次,如上文所论述,立体视图包含左眼图像和右眼图像。左眼图像和右眼图像包含与单视图图像实质上类似的图形内容;然而,左眼图像和右眼图像的一个或一个以上对应像素可沿水平轴相对于彼此位移。举例来说,想象将右眼图像置于左眼图像之上。在此状况下,右眼图像中的所有内容可不与左眼图像中的相同内容完全对齐。更确切地,右眼中的一个或一个以上对象可在左眼图像中的相同对象的左边或右边。
左眼图像可由检视者的左眼检视,且右眼图像被挡住以免被检视者的左眼看到。右眼图像可由检视者的右眼检视,且左眼图像被挡住以免被检视者的右眼看到。在一些实例中,检视者可戴上专用眼镜,其挡住左眼图像以免可由右眼检视到,且挡住右眼图像以免可由左眼检视到。然而,本发明的方面不一定要求检视者戴上专用眼镜。举例来说,一些显示器不要求检视者戴上专用眼镜来体验立体视图。本发明的技术可扩展到此些显示器。
GPU20可产生用于左眼图像和右眼图像的图形数据,使得当检视者同时检视左眼图像和右眼图像两者时,检视者的大脑致使检视者感知跳出正显示两个图像的显示器之外或推入到显示器中(例如,看起来在显示器之前或之后)的图像。此跳出或推入是归因于检视者的大脑解析立体视图的具有实质上类似内容的两个图像中的水平差异。
作为实例,应用程序处理器12可执行存储于系统存储器26中的一个或一个以上应用程序,例如应用程序32。应用程序32的实例包含但不限于网络浏览器、用户接口、电子邮件应用程序、电子表格应用程序、字处理应用程序、图形创作应用程序、电视游戏或产生可检视对象以供显示的其它应用程序。举例来说,应用程序32可为电视游戏,所述电视游戏当执行时输出显示于显示器上的图形内容。
应用程序32可由开发者针对单视图进行设计。举例来说,应用程序32在执行时可产生3D图形内容,其中3D图形内容被显示器的2D区域约束。应用程序32在执行于应用程序处理器12上时可将所产生3D图形内容划分成基元,例如三角形、矩形或其它类型的多边形。此些基元中的每一者可包含待显示于显示器上的像素。应用程序32在执行于应用程序处理器12上时还可将像素值指派给基元的顶点中的每一者。举例来说,所述像素值可包含顶点的3D坐标、顶点的颜色值及顶点的透明度值。像素值不需要在本发明的每一方面中包含所有上文实例组件。
应用程序处理器12接着可将顶点的像素值转发到GPU20以供进一步处理。举例来说,应用程序处理器12可包含图形驱动程序14,图形驱动程序14可为执行于应用程序处理器12上的软件。图形驱动程序14可经设计以将命令传输到GPU20,且作为响应,GPU20可根据所接收命令执行功能。举例来说,图形驱动程序14充当GPU20与应用程序处理器12之间的接口。当应用程序处理器12将命令发出到GPU20时,GPU20通过图形驱动程序14接收命令。举例来说,执行于应用程序处理器12上的应用程序32可指挥GPU20执行特定任务。在此状况下,图形驱动程序14可从应用程序32接收针对特定任务的指令,且可将指令提供到GPU20。作为响应,GPU20可执行任务。
在一些实例中,可根据特定应用程序编程接口(API)来设计图形驱动程序14。举例来说,可根据OpenGL或OpenGL ES(嵌入式系统)API来设计图形驱动程序14,所述OpenGL或OpenGL ES API为科纳斯集团(Khronos Group)的API,且其规范可公开获得。然而,本发明的技术可扩展到微软的DirectX系统,例如DirectX9、10或11,或任何其它基于着色器的图形系统和API。出于说明的目的,在API为OpenGL ES2.0API的背景下描述本发明的技术。然而,本发明的方面不限于此,且可扩展到其它API或基于着色器的图形系统。
为了呈现从应用程序处理器12接收的基元,GPU20的着色器处理器22可执行例如顶点着色器和片段着色器等一个或一个以上着色器程序以产生显示器的像素的像素值。开发者可根据API(例如,出于说明的目的而在本发明中使用的OpenGL ES2.0API)开发这些顶点着色器和片段着色器。此些顶点和片段着色器的源代码可存储于系统存储器26中。
举例来说,应用程序32可利用顶点着色器28,顶点着色器28可经设计以产生单视图。举例来说,可需要由着色器处理器22使用顶点着色器28来处理由应用程序32产生的像素值。作为一个实例,顶点着色器28可为在应用程序32在应用程序处理器12上的执行期间由应用程序32特别地调用的顶点着色器。顶点着色器28可在GPU20的着色器处理器22上执行,且应用程序32可在应用程序处理器12上执行,但顶点着色器28和应用程序32可出于显示由应用程序32产生的图像的目的而相互关连。
顶点着色器28的源代码可存储于系统存储器26中。图形驱动程序14可检索顶点着色器28的源代码,且将顶点着色器28的源代码提供到编译器18。编译器18可对顶点着色器28的源代码进行编译以产生顶点着色器28的目标代码,且将目标代码存储于系统存储器28中。图形驱动程序14接着可指挥GPU20从系统存储器26检索顶点着色器28的目标代码,且指挥GPU20在着色器处理器22上执行顶点着色器28的目标代码。着色器处理器22接着可执行顶点着色器28的目标代码以处理由应用程序32的执行产生的顶点的像素值。GPU20与固定功能管线24和着色器处理器22结合可产生应用程序32的图形内容以供显示。
尽管系统存储器26经展示为存储仅一个顶点着色器28的源代码,但本发明的方面不限于此。举例来说,应用程序32可有可能利用多个不同顶点着色器,且此些顶点着色器中的每一者的源代码可存储于系统存储器26中。而且,应用程序32可需要执行顶点着色器28的多个实例化。举例来说,着色器处理器22可同时(例如,并行)执行顶点着色器28的多个实例化,其中顶点着色器28的每一实例化执行实质上类似的功能,但针对不同的像素值。系统存储器26可类似地存储片段着色器的源代码。图形驱动程序14可检索片段着色器的源代码,且编译器18可对源代码进行编译以按类似于上文针对顶点着色器28所描述的方式的方式产生片段着色器的目标代码。
如将进一步详细描述,本发明的一个或一个以上实例技术可在编译之前修改顶点着色器28的源代码。编译器18可对经修改源代码进行编译以产生经修改顶点着色器30的目标代码。着色器处理器22可执行经修改顶点着色器30的目标代码,所述目标代码可致使GPU20产生立体3D图形内容(例如,S3D的左眼图像和右眼图像的图形内容)。然而,在描述对顶点着色器28的源代码的修改之前,下文描述顶点着色器28的实例功能性,其可有助于理解应用到顶点着色器28的源代码的修改。
如上文所描述,应用程序32可产生基元的顶点的坐标。此些坐标可被称作世界坐标,且可针对应用程序32是特定的。换句话说,如由应用程序32定义的顶点的坐标可不一定为显示基元的显示器的坐标,且还可能为在可检视口域外部的顶点的坐标。顶点着色器28可经设计以将可为3D的世界坐标转换成显示器的2D坐标(例如,显示坐标)。为了执行此功能,顶点着色器28可将世界坐标变换成眼睛坐标,且接着变换成剪切坐标。举例来说,顶点着色器28在执行时的输出可为顶点的剪切坐标。作为固定功能管线24的部分,随后可确定最终显示坐标(例如,显示器的坐标)。
剪切坐标可定义视锥。视锥可定义3D图形内容的可检视口域。GPU20可利用视锥来剔除位于视锥外部的像素。举例来说,固定功能管线24的固定功能单元(例如,固定功能管线24的视锥单元)可剔除位于视锥外部的像素,如由顶点着色器28产生的剪切坐标所定义。
用以根据世界坐标计算剪切坐标的等式可为:
Vclip=PRJ*Veye=PRJ*MVT*Vworld,            (等式1)
其中Vclip为顶点剪切坐标,Veye为顶点眼睛坐标,Vworld为由应用程序32提供的顶点世界坐标,PRJ为投影矩阵,且MVT为模型视图变换矩阵(或世界视图变换矩阵)。在一些实例中,PRJ和MVT矩阵可组合成单个矩阵。然而,为了容易理解,单独地描述此些矩阵。
投影矩阵(PRJ)和模型视图或世界视图变换矩阵(MVT)可由API定义。术语模型视图和世界视图可互换地使用。Vclip、Veye和Vworld可包含四个分量(例如,x、y、z和w坐标)。举例来说,Vclip、Veye和Vworld可表示为:
V clip = x clip y clip z clip w clip , V eye = x eye y eye z eye w eye , V world = x world y world z world w world (等式2)
具有可编程着色器的OpenGL、OpenGL ES和OpenGL ES2.0API将PRJ矩阵定义为:
PRJ = 2 z near ( R - L ) 0 R + L R - L 0 0 2 z near T - B T + B T - B 0 0 0 - z near + z far z far - z near - 2 z near z far z far - z near 0 0 - 1 0 , (等式3)
其中L和R分别指定左和右垂直剪切平面的坐标,B和T分别指定底部和顶部水平剪切平面的坐标,且znear和zfar分别指定到近和远深度剪切平面的距离。
在一些实例中,剪切平面可为对称的。举例来说,-L可等于R,且-B可等于T。在此些情况下,PRJ矩阵可简化为:
PRJ = 2 z near ( R - L ) 0 0 0 0 2 z near T - B 0 0 0 0 - z near + z far z far - z near - 2 z near z far z far - z near 0 0 - 1 0 (等式4)
具有可编程着色器的OpenGL、OpenGL ES和OpenGL ES2.0API将MVT矩阵定义为:
MVT = a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 0 0 0 1 (等式5)
PRJ和MVT矩阵的所有变量可由执行于应用程序处理器12上的应用程序32定义,且图形驱动程序14可将此些变量提供到正执行顶点着色器28的目标代码的着色器处理器22。如可从等式1、4和5看出,通过此些变量,顶点着色器28可确定顶点中的每一者的Vclip坐标。GPU20可利用顶点的剪切坐标且结合固定功能管线26和片段着色器的功能性执行其它功能性,以呈现图像以供显示。以此方式,GPU20可产生由应用程序32产生的图形内容的单视图。
根据本发明的技术,虽然顶点着色器28可利用MVT和PRJ矩阵的变量来确定Vclip坐标,但可不需要MVT和PRJ矩阵来修改顶点着色器28的源代码以产生立体视图。更确切地,本发明的技术可包含在顶点着色器28中的修改针对单视图而产生的剪切坐标(Vclip)以产生立体视图(例如,左眼图像和右眼图像)的剪切坐标的指令。
上文实例描述确定单视图的Vclip坐标的一个方式。可存在计算剪切坐标的许多不同技术,且一般来说,用以计算剪切坐标的特定技术可为非实质性的。然而,在任何情况下,对于3D图形内容,可需要计算剪切坐标(Vclip)而不管用以计算剪切坐标的技术为何技术。举例来说,应用程序处理器12确定剪切坐标可能甚至是有可能的,且图形驱动程序14可将剪切坐标提供到正执行顶点着色器28的目标代码的着色器处理器22。在此实例中,PRJ和MVT矩阵可为单位矩阵。举例来说,应用程序处理器12可执行等式1的矩阵乘法,且将结果提供到着色器处理器22。在此实例中,着色器处理器22可将所接收值与单位矩阵相乘,以产生由应用程序32产生的顶点中的每一者的Vclip坐标。
然而,在任何状况下(例如,在顶点着色器28确定剪切坐标的情况下或在顶点着色器28接收剪切坐标的情况下),顶点着色器28可利用特定变量来存储剪切坐标。特定变量可特定针对用以设计顶点着色器28的API。举例来说,如果顶点着色器28是根据具有可编程着色器的OpenGL、OpenGL ES或OpenGL ES2.0API来设计的,那么顶点着色器28可将剪切坐标存储于gl_Position变量中。在其它图形API中可存在类似变量。举例来说,如果顶点着色器28是根据具有可编程着色器的OpenGL、OpenGL ES或OpenGL ES2.0API来设计的,那么顶点着色器28可包含指令,例如:gl_Position.x=xclip,gl_Postion.y=yclip,gl_Position.z=zclip且gl_Position.w=wclip,其中如上文在等式2中所指示, V clip = x clip y clip z clip w clip .
在本发明中所描述的一个或一个以上实例技术中,可为执行于应用程序处理器12上的软件的图形驱动程序包装器16可修改顶点着色器28的定义单视图的剪切坐标的指令,以定义立体视图的剪切坐标(例如,左眼图像的剪切坐标和右眼图像的剪切坐标)。而且,图形驱动程序包装器16除了修改顶点着色器28的定义剪切坐标的指令之外还可修改定义单视图的视口的指令以定义立体视图的视口。
术语“视口”指代图像在显示器上所包含的区域。举例来说,应用程序32可定义显示图像的显示器上的单个图像(例如,单视图)的大小和位置。单个图像的大小和位置的此定义可被视为单个图像的视口。为了定义视口,应用程序32可发出glViewport命令,其变量定义显示器上的单视图图像的大小和位置。图形驱动程序包装器16可将定义单个图像的大小和位置的命令(例如,由应用程序32发出的glViewport命令)修改为定义左眼图像和右眼图像的大小和位置的命令(例如,定义左眼图像的视口和右眼图像的视口的glViewport命令)。左眼图像的glViewport命令可将左眼图像约束到显示器的一个部分,且右眼图像的glViewport命令可将右眼图像约束到显示器的另一部分。
在本发明的实例中,图形驱动程序包装器16可修改定义在修改顶点着色器28的指令的指令之外的视口的指令。换句话说,图形驱动程序包装器16可不需要修改顶点着色器28的指令以修改立体视图的左眼图像和右眼图像的视口。更确切地,图形驱动程序包装器16可修改定义视口的指令,使得固定功能管线24的固定功能单元(例如,视口变换单元)应用将左眼图像约束到显示器的一个部分的左眼图像的视口,及应用将右眼图像约束到显示左眼图像和右眼图像的显示器的另一部分的右眼图像的视口。
在一些实例中,固定功能管线24的视口变换单元可将左眼图像约束到显示器的左半部,且将右眼图像约束到显示器的右半部;然而,本发明的方面不限于此。视口变换单元可将左眼图像和右眼图像约束到除了显示器的左半部和右半部之外的部分。一般来说,视口变换单元可基于视口变换单元所接收的经修改视口指令将左眼图像和右眼图像约束到显示器的部分,如更详细所描述。
作为一个实例,为了致使GPU20呈现图像,应用程序32可执行glShaderSource命令。glShaderSource命令指挥图形驱动程序14从系统存储器26检索顶点着色器28的源代码。在本发明的实例中,响应于由应用程序32发出的glShaderSource命令,图形驱动程序包装器16可在顶点着色器28的源代码到达图形驱动程序14之前拦截所述源代码。图形驱动程序包装器16可修改顶点着色器28的源代码以包含致使经修改顶点着色器28在执行时产生立体视图的图形内容的指令。举例来说,图形驱动程序包装器16可致使经修改顶点着色器28执行两次。在第一次执行中,经修改顶点着色器28可产生左眼图像的图形内容,且在第二次执行中,经修改着色器28可产生右眼图像的图形内容,或反之亦然。
如由应用程序处理器12执行的图形驱动程序包装器16可充当源代码编辑器。作为一个实例,图形驱动程序包装器16可监视由应用程序32发出的指令。当图形驱动程序包装器16辨识出应用程序32发出glShaderSource命令时,图形驱动程序包装器16可捕获且修改顶点着色器28的指令(例如,顶点着色器28的源代码)。举例来说,图形驱动程序包装器16可在顶点着色器28的指令中包含修改针对单个图像(例如,单视图)产生的剪切坐标的值的指令以产生左眼图像和右眼图像(例如,立体视图)的剪切坐标。
举例来说,如上文所指示,顶点着色器28可包含存储xclip坐标的值的gl_Position.x命令。如下文更详细所论述,图形驱动程序包装器16可在顶点着色器28中包含更新gl_Position.x(例如,xclip坐标)的值的指令。为了产生左眼图像,由图形驱动程序包装器16添加到顶点着色器28中的指令致使顶点着色器28将常量与xclip值相加。为了产生右眼图像,由图形驱动程序包装器16添加到顶点着色器28中的指令致使顶点着色器28从xclip值减去常量。
举例来说,图形驱动程序包装器16可修改顶点着色器28的源代码以添加指令,所述指令将存储于gl_Position.x变量(例如,xclip坐标)中的值改变为gl_Position.x变量的当前值加(znear*wworld/(R-L)/2)*X,其中znear、R和L皆为来自PRJ矩阵(等式4)的变量,且wworld为来自Vworld矩阵(等式2)的变量(例如,如由应用程序32所定义的顶点坐标)。X的值可为+D或-D,其中D为检视者的右眼和左眼之间的距离的一半的近似,且可为用户可定义或预编程的值。
作为一个实例,图形驱动程序包装器16可将以下指令添加到顶点着色器28的指令集:gl_Position.x+=(znear*wworld/(R-L)/2)*X。此可等效于gl_Position.x=gl_Position.x+(znear*wworld/(R-L)/2)*X。举例来说,gl_Position.x+=命令将由gl_Position.x+=指令定义的值与由gl_Position命令存储的值相加(例如,将值与xclip相加)。在一些情况下,gl_Position.x+=指令可简化为gl_Position.x+=X。在下文进一步详细描述gl_Position.x+变量可等于(znear*wworld/(R-L)/2)*X或仅X的原因。
根据本发明的技术,为了产生左眼图像,图形驱动程序包装器16可定义变量X的值为+D。当X等于+D时,gl_Position.x+=命令致使常量(例如,(znear*wworld/(R-L)/2)*D或仅D)与由应用程序32产生的顶点中的每一者的xclip坐标相加,其致使顶点向左移动值D。为了产生右眼图像,图形驱动程序包装器16可定义变量X的值为-D。当X等于-D时,gl_Position.x+=命令致使从由应用程序32产生的顶点中的每一者的xclip坐标减去常量(例如,(znear*wworld/(R-L)/2)*-D或仅-D),其致使顶点向右移动值-D。
在修改顶点着色器28的源代码之后,图形驱动程序包装器16可将顶点着色器28的经修改源代码存储于系统存储器中。在一些实例中,图形驱动程序包装器16可将顶点着色器28的经修改源存储于顶点着色器28的未经修改源代码在系统存储器26中所存储于的相同位置中。在替代实例中,图形驱动程序包装器16可将顶点着色器28的经修改源存储于系统存储器26中的不同于顶点着色器28的未经修改源代码所存储于的位置的位置中。
在发出glShaderSource命令之后,应用程序32发出glCompileShader命令。glCompileShader命令致使执行于应用程序处理器12上的编译器18对顶点着色器28的经修改源代码进行编译。举例来说,glCompileShader命令可致使编译器18从系统存储器26检索经修改顶点着色器28的源代码,且对经修改顶点着色器28进行编译。在编译之后,编译器18将所得目标代码存储于系统存储器26中。举例来说,如所说明,系统存储器26包含经修改顶点着色器30。经修改顶点着色器30为由于编译器18对顶点着色器28的经修改源代码进行编译而得到的目标代码。
此外,如上文所描述,图形驱动程序包装器16可包含顶点着色器28的源代码中的指令,所述指令致使顶点着色器28将常量与gl_Position.x变量相加以产生左眼图像,且从gl_Position.x变量减去常量以产生右眼图像。经修改顶点着色器30的目标代码包含致使经修改顶点着色器30将常量与gl_Position.x变量相加以产生左眼图像且从gl_Position.x变量减去常量以产生右眼图像的指令。如更详细所描述,经修改顶点着色器30响应于绘制命令从图形驱动程序包装器16接收常量的值。
应用程序32在由处理器12执行时还可发出定义单个图像的视口的命令(例如,定义显示器上的单个图像的大小和位置的命令)。此命令可为glViewport命令。glViewport命令定义图像的开始坐标(例如,x和y坐标)及图像的宽度和长度。glViewport命令的开始坐标及宽度和长度值定义图像的大小和位置。
在本发明的实例中,图形驱动程序包装器16可捕获由应用程序32发出的glViewport命令。在一些实例中,图形驱动程序包装器16可阻止图形驱动程序14以免将由应用程序32发出的glViewport命令发射到GPU20。替代地,图形驱动程序包装器16可将如由应用程序32发出的glViewport命令的开始坐标及宽度和长度值存储于系统存储器26中。
在替代实例中,图形驱动程序包装器16可允许图形驱动程序14将由应用程序32发出的glViewport命令发射到GPU20。在此实例中,类似于上文,图形驱动程序包装器16可存储如由应用程序32发出的glViewport命令的开始坐标及宽度和长度值。在此替代实例中,在GPU20应用由应用程序32发出的glViewport命令之前,图形驱动程序包装器16可修改由应用程序32发出的glViewport命令,且将经修改glViewport命令发射到GPU20。以此方式,尽管GPU20接收由应用程序32发出的glViewport命令,但GPU20可执行经修改glViewport命令,所述经修改glViewport命令是由图形驱动程序包装器16修改的。
在任一实例中,图形驱动程序包装器16接着可等待直到应用程序32将命令发出到GPU20从而指挥GPU20绘制一个或一个以上基元为止。此绘制命令可为glDraw命令。存在例如glDrawArrays和glDrawElements等glDraw命令的各种实例。绘制命令的此些各种实例中的每一者被统称为glDraw命令。
当应用程序32发出glDraw命令时,图形驱动程序包装器16捕获glDraw命令,且阻止图形驱动程序14以免将glDraw命令发射到GPU20。图形驱动程序包装器16接着产生致使GPU20产生左眼图像和右眼图像的图形内容的指令。作为一个实例,图形驱动程序包装器16产生致使GPU20执行经修改顶点着色器30的目标代码两次的指令,发出两个glViewport命令以定义左眼图像和右眼图像的视口及发出两个glDraw命令。
作为技术的概述,在图形驱动程序包装器16阻止图形驱动程序14以免发射由应用程序32发出的glDraw命令之后,图形驱动程序包装器16将命令发出到GPU20,所述命令致使着色器处理器22使经修改顶点着色器20准备好产生立体视图的第一图像(例如,左眼图像)的剪切坐标。接着,图形驱动程序包装器16可将第一glViewport命令发出到固定功能管线24的视口变换单元,所述第一glViewport命令定义显示器上的第一图像的大小和位置。图形驱动程序包装器16接着可将第一glDraw命令发出到GPU20,所述第一glDraw命令致使GPU20呈现受约束于如由第一glViewport命令定义的显示器的第一部分的第一图像。
图形驱动程序包装器16接着将命令发出到GPU20,所述命令致使着色器处理器22使经修改顶点着色器30准备好产生立体视图的第二图像(例如,右眼图像)的剪切坐标。接着,图形驱动程序包装器16可将第二glViewport命令发出到固定功能管线24的视口变换单元,所述第二glViewport命令定义显示器上的第二图像的大小和位置。图形驱动程序包装器16接着可将第二glDraw命令发出到GPU20,所述第二glDraw命令致使GPU20呈现受约束于如由第二glViewport命令定义的显示器的第二部分的第二图像。
在以下实例中更详细描述被描述为上文概述的本发明的技术。仅为了容易理解,在以下实例中,描述了GPU20首先产生左眼图像的图形内容,接着产生右眼图像的图形内容的技术;然而,相反的情况也是有可能的。而且,仅为了容易理解,描述了其中左眼图像的视口被约束到显示器的左半部,且右眼图像的视口被约束到显示器的右半部的技术,但此不应被视为限制性的。
举例来说,在图形驱动程序包装器16拦截glViewport命令且接着阻止由应用程序32发出的glDraw命令之后,图形驱动程序包装器16产生指挥GPU20产生左眼图像的剪切坐标的指令。再一次,应注意在一些实例中,图形驱动程序包装器16可阻止将由应用程序32发出的glViewport命令发射到GPU20。在其它实例中,图形驱动程序包装器16可允许由应用程序32发出的glViewport命令被发射到GPU20。然而,在实例中的任一者中,图形驱动程序包装器16可将经修改glViewport命令发射到GPU20。以此方式,即使GPU20接收到由应用程序32发出的glViewport命令,GPU20仍可不执行由应用程序32发出的glViewport命令,且可改为执行由图形驱动程序包装器16发出的经修改glViewport命令。换句话说,由图形驱动程序包装器16修改的经修改glViewport命令将由应用程序32发出的glViewport命令重置。
作为一个实例,图形驱动程序包装器16产生致使GPU20执行经修改顶点着色器30的目标代码的指令。作为响应,GPU20的着色器处理器22执行经修改顶点着色器30的目标代码。另外,图形驱动程序包装器16发射经修改顶点着色器30将添加到gl_Position.x变量以产生左眼图像的剪切坐标的常量值。着色器处理器22的归因于执行经修改顶点着色器30的目标代码的输出为左眼图像的顶点的剪切坐标。
举例来说,如上文所论述,图形驱动程序包装器16可将以下指令包含到顶点着色器28的源代码中:gl_Position.x+=(znear*wwor1d/(R-L)/2)*X,或出于将描述的原因,仅gl_Position.x+=X。znear、wworld、R和L变量可有可能为着色器处理器22所知道,如上文关于等式(2)和(4)所描述。然而,本发明的方面不要求着色器处理器22知道znear、wworld、R和L变量的值。举例来说,znear、wworld、R和L变量可各自为常量,且因此(znearwworld/(R-L)/2)的结果将为常量值。在此状况下,(znearwworld/(R-L)/2)的值可经估计或为用户提供的,且与X的值相乘。如更详细所描述,在一些实例中,(znearwworld/(R-L)/2)可简化为1。
在一些实例中,着色器处理器22可不知道X的值。对于左眼图像,除了指挥着色器处理器22执行经修改顶点着色器30的目标代码的指令之外,图形驱动程序包装器16还可将X的值发射到着色器处理器22。在一些实例中,对于左眼图像,X的值可为+D,其中D近似等于检视者的眼睛之间的距离的一半,且可为用户定义或预编程的。因为变量X的值为+D,所以gl_Position.x+=命令致使着色器处理器22将D的值与存储于gl_Position.x变量中的值相加(例如,将D与xc1ip的值相加)。
图形驱动程序包装器16还定义左眼图像的视口。举例来说,在应用程序32发出glDraw命令之前,应用程序32发出由图形驱动程序包装器16拦截的glViewport命令。图形驱动程序包装器16还将开始坐标及宽度和长度值存储于系统存储器32中。为了定义左眼图像的视口,图形驱动程序包装器16可修改由应用程序32发出的经拦截glViewport命令。
举例来说,glViewport命令包含四个变量,其中前两个变量定义显示器上的图像的开始坐标,且后两个变量定义图像的宽度和长度。宽度和长度变量不一定为坐标值。更确切地,宽度和长度变量定义图像从开始坐标延伸的量。举例来说,应用程序32可发出glViewport命令,其表示为:glViewport(0,0,宽度,长度)。在此实例中,(0,0)指代显示器的左下角。变量“宽度”指代显示器的宽度,且变量“长度”指代显示器的长度。因此,在此实例中,应用程序32定义图像的视口包含整个显示器,其将与单视图图像一致。然而,除了所说明的变量之外,应用程序32还可为glViewport命令指派不同变量。
根据本发明,图形驱动程序包装器16可拦截glViewport命令(例如,先前实例的glViewport(0,0,宽度,长度)),且修改此视口命令的变量。举例来说,图形驱动程序包装器16可修改glViewport命令的变量以将左眼图像约束到显示器的所要部分。为了容易描述,所述技术描述将左眼图像约束到显示器的左半部,且将右眼图像约束到显示器的右半部;然而,方面不限于此。
对于左眼图像,图形驱动程序包装器16可将由应用程序32发出的glViewport命令修改为glViewport(0,0,宽度/2,长度)。在此实例中,宽度/2将为显示器的宽度的一半。举例来说,经修改glViewport命令指示左眼图像从显示器的左端开始(例如,从x轴上的0点开始)且向右延伸距离“宽度/2”,这会将左眼图像约束到显示器的左半部。而且,经修改glViewport命令指示左眼图像将从显示器的底部开始(例如,从y轴上的0点开始)且向上延伸距离“长度”,这会将图像约束到显示器的顶部和底部。
图形驱动程序包装器16接着可将第一glDraw命令发出到GPU20。响应于glDraw命令,GPU20可通过固定功能管线24和片段着色器来处理通过执行经修改顶点着色器30的目标代码而产生的左眼图像的剪切坐标。在此实例中,第一glViewport命令可将左眼图像约束到显示器的左半部。glDraw命令接着可致使GPU20将左眼图像呈递到帧缓冲器以用于临时存储。举例来说,帧缓冲器可存储左眼图像直到产生右眼图像为止。接着,GPU20可输出帧缓冲器的全部内容到显示处理器(未图示)。显示处理器可致使显示器显示左眼图像和右眼图像以产生立体视图。
图形驱动程序包装器16可重复用于产生左眼图像的相同步骤,但这次用于产生右眼图像。举例来说,图形驱动程序包装器16发出另一指令以致使着色器处理器22执行经修改顶点着色器30的目标代码。另外,图形驱动程序包装器16发射经修改顶点着色器30将从gl_Position.x变量减去以产生右眼图像的剪切坐标的常量值。着色器处理器22的归因于执行经修改顶点着色器30的目标代码的输出为右眼图像的顶点的剪切坐标。
如上文所描述,图形驱动程序包装器16可将指令gl_Position.x+=(znear*wworld/(R-L)/2)*X或仅gl_Position.x+=X添加到顶点着色器28的源代码。对于左眼图像,变量X的值可为+D(例如,检视者的眼睛之间的距离的一半)。在本发明的实例中,对于右眼图像,变量X的值可为-D。因为变量X的值为-D,所以gl_Position.x+=命令致使着色器处理器22从存储于gl_Position.x变量中的值减去D的值(例如,从xclip的值减去-D)。
图形驱动程序包装器16还定义右眼图像的视口。如上文所论述,对于左眼图像,图形驱动程序包装器16定义视口为glViewport(0,0,宽度/2,长度),以将左眼图像约束到显示器的左半部。对于右眼图像,图形驱动程序包装器16可定义视口为glViewport(宽度/2,0,宽度/2,长度)。在此实例中,(宽度/2,0)坐标指示右眼图像将从显示器的中间开始且向右延伸。而且,glViewport命令中的(宽度/2,长度)变量指示右眼图像将延伸显示器的一半宽度及显示器的全部长度。
因此,在此实例中,经修改glViewport命令(例如,glViewport(宽度/2,0,宽度/2,长度))会将右眼图像约束到显示器的右半部。举例来说,经修改glViewport命令指示右眼图像将从显示器的中间开始(例如,从x轴上的宽度/2点开始)且向右延伸距离“宽度/2”,其会将右眼图像约束到显示器的右半部。而且,经修改glViewport命令指示右眼图像将从显示器的底部开始(例如,从y轴上的0点开始)且向上延伸距离“长度”,其会将图像约束到显示器的顶部和底部。
图形驱动程序包装器16接着可将第二glDraw命令发出到GPU20。响应于glDraw命令,GPU20可通过固定功能管线24和片段着色器来处理通过执行经修改顶点着色器30的目标代码而产生的右眼图像的剪切坐标。在此实例中,第二glViewport命令可将右眼图像约束到显示器的右半部。glDraw命令接着可致使GPU20将右眼图像呈递到帧缓冲器以用于临时存储。在此状况下,GPU20可已经将左眼图像存储到帧缓冲器,且GPU20可指挥显示处理器从帧缓冲器检索且显示所存储左眼图像和右眼图像以产生立体视图。
如上文所描述,图形驱动程序包装器16可将指令gl_Position.x+=命令添加到顶点着色器28的源代码。正是添加到顶点着色器28的源代码的gl_Position.x+=命令引起左眼图像与右眼图像之间的轻微位移,以造成立体视图的跳出或推入效果。正是定义单视图的视口(例如,glViewport)的指令到定义右眼图像和左眼图像的视口的指令的修改将左眼图像和右眼图像约束到显示器的适当部分(例如,分别为显示器的左半部和右半部)。
为了进一步辅助理解,假设图形驱动程序包装器16未修改顶点着色器28的指令以包含gl_Position.x+=命令,而是图形驱动程序包装器16修改glViewport命令,且致使GPU20执行两个glViewport命令及两个glDraw命令。在此状况下,由于两个glDraw命令,故GPU20将呈现两个图像。然而,在此实例中,为了辅助理解,如果此两个图像被置于彼此之上,那么将不存在位移,且两个图像的内容将完全对齐。因为在两个图像的内容中不存在位移,所以不会存在任何立体效果,且对检视者来说,图像将看起来是被约束到显示器的2D区域的单个图像。包含gl_Position.x+=命令可引起两个图像的内容中的位移。接着,当检视者同时检视左眼图像和右眼图像时(其中左眼图像被挡住而不被右眼看到,且右眼图像被挡住而不被左眼看到),检视者的大脑解析两个图像的内容中的位移以产生立体视图的跳出或推入效果。
此外,在一些实例中,除了上文所描述的修改之外,图形驱动程序包装器16还可进一步修改视口。举例来说,如上文所描述,图形驱动程序包装器16可将左眼图像的glViewport指令修改为glViewport(0,0,宽度/2,长度),且将右眼图像的glViewport指令修改为glViewport(宽度/2,0,宽度/2,长度)。当检视者检视此两个图像(例如,立体视图)时,检视者可感知在零视差平面(ZDP)上包含3D体积的立体图像。
ZDP可看起来跳出显示器之外或推入到显示器中(例如,看起来在显示器之前或之后)。然而,ZDP的位置可不一定在所要位置。举例来说,如果ZDP进一步跳出、未跳出多少、未推入多少或进一步推入,那么检视者可体验到较丰富且更逼真的检视体验。
为了改变ZDP(其可被称作视口移位或ZDP的移位),图形包装器驱动程序16可将左眼图像和右眼图像的左边界移位。举例来说,对于左眼图像,图形包装器16可修改glViewport命令为(0-Vps,0,宽度/2,长度),且对于右眼图像,图形包装器16可修改glViewport命令为((宽度/2+Vps),0,宽度/2,长度),以改变立体视图跳出显示器之外的量。
在此些实例中,Vps值指代视口移位,且指示左眼图像的视口移位的量及右眼图像的视口移位的量。Vps值可为用户可选择或预编程的。举例来说,如果检视者需要将ZDP从其当前位置(例如,在视口移位之前)移位,那么检视者可选择实现ZDP的所要位置的Vps值。或者,可基于测试而预编程Vps值,所述测试提供对检视者认为在何处ZDP的位置最佳的测量。举例来说,如果Vps为正值,那么立体视图跳出的量可减少(例如,ZDP平面更靠近于显示器)。如果Vps为负值,那么立体视图跳出的量可增加(例如,ZDP平面进一步远离显示器)。
在一些实例中,除了视口移位之外,图形驱动程序包装器16可修改左眼和右眼图像的glViewport命令以用于视口拉伸。视口拉伸可被视为拉伸视口的大小,其可导致左眼图像和右眼图像的拉伸。在一些情况下,视口移位和视口拉伸可产生较佳立体视图。视口移位和视口拉伸可被统称为修改视口。换句话说,图形驱动程序包装器16可修改由应用程序32发出的glViewport命令以产生用于左眼图像和右眼图像的分别定义左眼图像和右眼图像的视口的glViewport命令。在此实例中,图形驱动程序包装器16可进一步修改左眼图像和右眼图像的视口(例如,视口移位或视口移位和视口拉伸)。
为了拉伸左眼图像的视口,图形驱动程序包装器16可修改左眼图像的glViewport命令为glViewport(0-Vps,0,宽度/2+Vps,长度)。为了拉伸右眼图像的视口,图形驱动程序包装器16可修改右眼图像的glViewport命令为glViewport(宽度/2,0,宽度/2+Vps,长度)。在实例技术中,视口移位和视口拉伸可并非在每一情况下都为必要的。举例来说,在一些实例中,图形驱动程序包装器16可将由应用程序32发出的glViewport命令修改为左眼图像和右眼图像的glViewport命令,且可不执行任何额外视口移位或拉伸。在一些替代实例中,图形驱动程序包装器16可修改由应用程序32发出的glViewport命令,且进一步修改左眼图像和右眼图像的视口(例如,视口移位或视口移位和视口拉伸)。
在一些实例中,视口移位和视口拉伸可与glViewport命令的修改同时执行。举例来说,如上文所描述,图形驱动程序包装器16可将左眼图像的glViewport命令修改为glViewport(0,0,宽度/2,长度),且将右眼图像的glViewport命令修改为glViewport(宽度/2,0,宽度/2,长度)。在一些实例中(其中用户需要输入视口移位值(例如,Vps)),图形驱动程序包装器16可将视口移位或将视口移位和拉伸,如上文所描述。在替代实例中,在Vps值经预编程的实例中,图形驱动程序包装器16可在修改glViewport命令时主动地加上或减去Vps值。
作为实例,假设显示器的大小为10x10像素,且Vps值经选择或预编程为2,以减少立体视图跳出的量。在此实例中,在视口移位之前,左眼图像的视口可为(0,0,5,9),且右眼图像的视口可为(5,0,5,9)。图形驱动程序包装器16可通过减去2(例如,Vps的值)来移位ZDP来将左眼图像的视口移位。在此实例中,左眼图像的视口可变为(-2,0,5,9)。图形驱动程序包装器16可通过加上2(例如,Vps的值)来移位ZDP来将右眼图像的视口移位。在此实例中,右眼图像的视口可变为(7,0,5,9)。可执行类似计算以确定在视口拉伸之后的视口。
对于经视口移位的左眼图像,GPU20可剪掉左眼图像的像素中的一些。举例来说,在此实例中,显示器的坐标可为(0,0,9,9)。然而,经视口移位的左眼图像的坐标可为(-2,0,5,9),其意谓经视口移位的左眼图像开始于比显示器的左边缘更向左之处。GPU20的固定功能管线24可剪掉坐标比显示器的左边缘更向左的像素。类似地,对于经视口移位的右眼图像,GPU20可剪掉右眼图像的像素中的一些。举例来说,经视口移位的右眼图像的坐标可为(7,0,5,9),其意谓经视口移位的右眼图像结束于比显示器的右边缘更向右之处。GPU20的固定功能管线24可剪掉坐标比显示器的右边缘更向右的像素。再一次,可针对视口拉伸执行类似计算。
经视口移位或经视口移位和拉伸的ZDP(例如,由于左眼图像和右眼图像的视口移位或视口移位和拉伸所得的ZDP)的位置可由以下等式确定:
ZDP′=znear*ZDP*D/(znear*D-ZDP*Vps),         (等式6)
其中ZDP′等于经视口移位的ZDP的位置,znear定义于PRJ矩阵(等式4)中,D为检视者的左眼与右眼之间的一半距离,ZDP为原始位置(例如,在视口移位之前),且Vps为左眼图像和右眼图像的左边界移位的量。
在一些情况下,对于检视者来说,znear、ZDP、D或Vps的值可能是不可用的。在此些情况下,检视者仍可修改Vps值(例如,使所述值递增或递减),直到检视者找到合乎需要的经视口移位的ZDP或经视口移位和拉伸的ZDP为止。Vps值的修改可并非在每一实例中都为必要的,且预编程的Vps值可为大多数检视者提供适当丰富且逼真的检视体验。
在一些实例中,本发明中所描述的技术可修改用以产生单视图的图像的指令以在执行期间或运行时期间产生立体视图的图像。举例来说,检视者可选择用于执行的应用程序32,所述应用程序32可要求执行顶点着色器28以用于处理由执行应用程序32而产生的图形。当应用程序正执行或运行于装置10上时,图形驱动程序14、图形驱动程序包装器16和编译器18可执行其相应功能以修改顶点着色器28的源代码,且产生经修改顶点着色器30的目标代码。举例来说,图形驱动程序包装器16可拦截由应用程序32在运行时期间发出的glViewport命令,且在一些实例中阻止由应用程序32发出的glViewport命令在运行时期间被发射到GPU20,或在其它实例中允许由应用程序32发出的glViewport命令被发射到GPU20。在任一实例中,图形驱动程序包装器16可修改由应用程序32发出的glViewport命令,使得由GPU20执行的glViewport命令为由图形驱动程序包装器16修改的经修改glViewport命令。
此外,当应用程序32发出绘制命令(例如,glDraw)时,图形驱动程序包装器16可捕获此glDraw且阻止其发射到GPU20。应用程序32在运行时期间发出的此glDraw命令可充当致使图形驱动程序包装器16包含以上文所描述的方式定义左眼图像和右眼图像的视口的指令且包含两个glDraw命令以致使GPU20产生左眼图像和右眼图像的图形内容的触发器。
而且,尽管上文实例是在图形驱动程序包装器16添加指令到顶点着色器28的指令且修改顶点着色器28的指令且修改定义视口的指令的背景下描述的,但本发明的方面不限于此。在替代实例中,图形驱动程序14或编译器18而不是图形驱动程序包装器16可有可能修改顶点着色器28的指令及定义视口的指令。然而,此些实例可要求修改图形驱动程序14或编译器18。
对图形驱动程序14或编译器18的修改可比开发图形驱动程序包装器16且使图形驱动程序包装器16执行本发明中所描述的功能使得GPU20产生立体视图的左眼图像和右眼图像更困难。举例来说,装置10可已加载有先前存在的图形驱动程序14和编译器18,且改变图形驱动程序14和编译器18可为困难的。通过添加执行对顶点着色器28的修改的图形驱动程序包装器16,实例技术可不需要修改先前存在的图形驱动程序14和编译器18。
此外,上文所描述的技术可允许GPU20产生立体视图的图像而不修改应用程序32。举例来说,用以产生立体视图的一些其它技术可要求应用程序32的开发者修改应用程序32的源代码,以产生左眼图像和右眼图像的像素值。此些技术需要来自应用程序32的开发者的帮助来修改其应用程序以用于立体视图,此对于应用程序32的开发者而言可为可能麻烦的任务。上文所描述的实例技术可为针对单视图开发的应用程序32提供立体视图,而无来自应用程序32的开发者的任何帮助。
而且,上文所描述的技术可不要求多次调用系统存储器26以用于产生立体视图的左眼图像和右眼图像。举例来说,在用以产生立体视图的一些其它技术中,GPU将产生左眼图像。在左眼图像的产生完成时,GPU将利用在产生左眼图像时存储于系统存储器26中的深度信息来产生右眼图像。然而,重复调用系统存储器26以检索深度信息可为计算上昂贵的且可需要过多电力消耗。
上文所描述的实例技术可不需要多次调用系统存储器26以获得左眼图像的深度信息来产生右眼图像。举例来说,图形驱动程序包装器16可修改顶点着色器28的源代码及定义视口以彼此独立地产生左眼和右眼图像的指令,而不一定需要一个图像的深度信息来产生另一图像。举例来说,如上文所描述,添加到顶点着色器28中的指令及glViewport命令的修改及两个glDraw命令的发出可不需要任何深度信息,且在一些实例中,产生左眼图像而不需要关于右眼图像的信息,且反之亦然。以此方式,与其它技术相比较,本发明中所描述的技术可减少用于产生立体视图的对系统存储器26的存取的数目。
此外,如上文所描述,glViewport命令由固定功能管线24的固定功能单元(例如,固定功能管线24的视口变换单元)利用,且不由着色器处理器22利用。以此方式,可不需要修改顶点着色器28的源代码以强制将左眼图像呈现到显示器的第一部分(例如,显示器的左半部),且强制将右眼图像呈现到显示器的另一部分(例如,显示器的右半部)。更确切地,固定功能管线24的固定功能单元可应用经修改glViewport命令,以将左眼图像约束到其在显示器中的部分,且将右眼图像约束到其在显示器中的部分。此可减少且简化对顶点着色器28的修改,此情形可增加着色器处理器22的计算效率。
举例来说,根据本发明的技术,图形驱动程序包装器16可修改顶点着色器28的源代码,以提供左眼图像与右眼图像之间的位移。举例来说,当产生左眼图像和右眼图像的剪切顶点坐标时,正执行经修改顶点着色器30的目标代码的着色器处理器22可能不知道所产生的图形数据将显示之处。换句话说,着色器处理器22可并不负责定义左眼图像和右眼图像的图形数据将呈现在何处。固定功能管线24的视口变换单元(其为在着色器处理器22外部的单元)可负责将左眼图像和右眼图像约束到其在显示器中的相应部分。以此方式,着色器处理器22可不需要浪费计算周期来确定应在何处显示左眼图像和右眼图像。与着色器处理器22相比较,固定功能管线24的视口变换单元的硬接线功能性可更适合于将左眼图像、右眼图像约束到其在显示器上的相应部分。
举例来说,如果修改顶点着色器28的源代码以确定应在何处显示左眼图像和右眼图像以便控制零视差平面(ZDP),那么可要求着色器处理器22确定左眼图像和右眼图像中的基元中的每一者的每一顶点的坐标。此情形可要求着色器处理器22执行多个计算周期,这可减低着色器处理器22的效率。通过执行视口变换,且还执行视口移位或移位和拉伸(例如,基于Vps值进一步修改视口以调整ZDP),在固定功能管线24的视口变换单元中,本发明的方面可提供较丰富的立体视图而不浪费着色器处理器22中的计算周期。
如上文所描述,图形驱动程序包装器16可在顶点着色器28的源代码中包含修改gl_Position.x变量的值的gl_Position.x+=(znearwwor1d/(R-L)/2)*X或仅gl_Position.x+=X命令。下文提供此种在顶点着色器28的源代码中包含指令的原因。
如上文在等式(1)中所指示,Vclip=PRJ*Veye=PRJ*MVT*Vworld。Vclip的等式可经修改以产生左眼和右眼的剪切坐标。举例来说,左眼和右眼的剪切坐标可为:
Vclip_left-eye=PRJ*VTleft-eye*Veye=PRJ*VTleft-eye*MVT*Vworld    (等式7),及
Vclip_right-eye=PRJ*VTright-eye*Veye=PRJ*VTright-eye*MVT*Vworld     (等式8)。
VTleft-eye和VTright-eye可为4x4矩阵,其是基于左眼和右眼距单视图的假设距离。单视图的坐标可为(0,0,0),且左眼可被视为位于(-D,0,0),且右眼可被视为位于(D,0,0)。换句话说,(0,0,0)位置可被视为在检视者的右眼和左眼的中间。如果左眼被视为与右眼和左眼的中间相距-D,且右眼被视为与右眼和左眼的中间相距+D,那么D指示检视者的右眼和左眼之间的距离的一半。
VTleft-eye和VTright-eye的矩阵可定义为:
VT left _ eye = 1 0 0 D 0 1 0 0 0 0 1 0 0 0 0 1 VT right _ eye = 1 0 0 - D 0 1 0 0 0 0 1 0 0 0 0 1 .
VTleft-eye and VTright-eye可改写为两个矩阵的总和。举例来说,VTleft-eye可改写为 VT left _ eye = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 + 0 0 0 D 0 0 0 0 0 0 0 0 0 0 0 0 .
VTright-eye可改写为 VT right _ eye = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 + 0 0 0 - D 0 0 0 0 0 0 0 0 0 0 0 0 .
通过将VTleft-eye矩阵代入到Vclip_left-eye的等式(等式7),Vclip_left-eye等于:
Vclip _ left - eye = PRJ * 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 * MVT * Vworld + PRJ * 0 0 0 D 0 0 0 0 0 0 0 0 0 0 0 0 * MVT * Vworld
                                        (等式9)。
通过将VTright-eye矩阵代入到Vclip_right-eye的等式(等式8),Vclip_right-eye等于:
VTclip _ right - eye = PRJ * 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 * MVT * Vworld + PRJ * 0 0 0 - D 0 0 0 0 0 0 0 0 0 0 0 0 * MVT * Vworld
                                       (等式10)。
在两个等式9和10中,例如对于Vclip_left-eye和Vclip_right-eye, PRJ * 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 * MVT * Vworld 可简化为PRJ*MVT*Vworld,因为 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 为单位矩阵,且等效于乘以1。
如上文在等式1中所描述,PRJ*MVT*Vworld等于Vclip。因此,Vclip_left-eye和Vclip_right-eye等式(例如,分别为等式9和10)可改写为: Vclip _ left - eye = Vclip + PRJ * 0 0 0 D 0 0 0 0 0 0 0 0 0 0 0 0 * MVT * Vworld (等式11),
Vclip _ right - eye = Vclip + PRJ * 0 0 0 - D 0 0 0 0 0 0 0 0 0 0 0 0 * MVT * Vworld (等式12)。
通过代入PRJ和MVT(分别为等式4或5)的矩阵且执行等式11的矩阵乘法,Vclip_left-eye的等式可简化成:
Vclip _ lef - eye = Vclip + z near ( R - L ) / 2 * D * w world * 1 0 0 0 , 且更明确地简化成:
V clip _ left - eye = x left _ eye _ clip y left _ eye _ cli p z left _ eye _ clip w left _ eye _ clip = x clip + z near ( R - L ) / 2 * D * w world y clip z clip w clip . (等式13)
在具有与Vclip_left-eye的代入类似的代入的情况下,Vclip_right-eye等式可简化成:
Vclip _ right - eye = Vclip + z near ( R - L ) / 2 * D * w world * 1 0 0 0 , 且更明确地简化成:
V clip _ right - eye = x right _ eye _ clip y right _ eye _ cli p z right _ eye _ clip w right _ eye _ clip = x clip + z near ( R - L ) / 2 * D * w world y clip z clip w clip . (等式14)
从等式13和14可看出,通过将常量
Figure BDA0000395355070000263
与所计算xclip坐标相加且保持所有其它剪切坐标相同,顶点着色器28可产生左眼图像的剪切坐标。类似地,通过从xclip坐标减去常量
Figure BDA0000395355070000264
且保持所有其它剪切坐标相同,顶点着色器28可产生右眼图像的剪切坐标。出于至少此些原因,图形驱动程序包装器16可包含指令gl_Position.x+=znear*wworld/((R-L)/2)*X,其中X等于+D以产生左眼图像,且其中X等于-D以产生右眼图像。
在一些实例中,可有可能将gl_Position.x+=命令进一步简化为仅gl_Position.x+=X。举例来说,wworld变量设定为1是常见的。而且,具有可编程着色器的OpenGL、OpenGLES和OpenGL ES2.0将视锥定义为:
Figure BDA0000395355070000265
其中fovx为OpenGL、OpenGLES和OpenGL ES2.0中所定义的视锥。检视角度设定为45度也是常见的,其意谓cot(fovx)等于1。此意谓
Figure BDA0000395355070000266
等于1。因此,在此些实例中,
Figure BDA0000395355070000267
简化为仅X(例如,
Figure BDA0000395355070000268
等于1,且wworld等于1)。在此些实例中,gl_Position.x+=变量可简化为gl_Position.x+=X。
因此,等式7到14提供数学基础,其说明将指令gl_Position.x+=(znear*wworld/(R-L)/2)*X或gl_Position.x+=X添加到顶点着色器28在执行两次时可足以使单视图图像位移以产生立体视图的原因,且其中X在第一次执行中等于+D,且在第二次执行中等于-D。以此方式,本发明的技术可提供对经设计以用于单视图的顶点着色器28的源代码的最小修改,使得当经修改源代码经编译及执行(例如,执行经修改顶点着色器30的目标代码)时,所得图像可向检视者提供立体视图。立体视图可向检视者提供3D体验,其与检视由显示器的2D区域限制的图像相比较可为较丰富较完全的体验。
在一些实例中,即使当(znear*wworld/(R-L)/2)未简化为1(例如,其中cot(fovx)由于检视角度不为45度而不等于1和/或wworld不等于1)时,图形驱动程序包装器16仍可包含命令gl_Position.x+=X。举例来说,(znear*wworld/(R-L)/2)可为常量,因为znear、wworld、R和L各自为常量。因为(znear*wworld/(R-L)/2)为常量,所以(znear*wworld/(R-L)/2)*X的值为常量,这是因为X为常量。在此状况下,(znear*wworld/(R-L)/2)*X可收缩以表示单个常量,其可简单地为X。在此状况下,X的值可为用户指定或预编程的。举例来说,在上文实例中,对于左眼图像,X等于+D,且对于右眼图像,X等于-D。在此当前实例中,对于左眼图像,X可等于(znear*wworld/(R-L)/2)*D,且对于右眼图像,X可等于(znear*wworld/(R-L)/2)*-D,其中如果znear、wworld、R和L值不可由着色器处理器22获得,那么(znear*wworld/(R-L)/2)和D可为用于预编程的值的用户规定。
如果znear、wworld、R和L值可由着色器处理器22获得,那么着色器处理器22可确定(znear*wworld/(R-L)/2)的值,且基于GPU20正产生左眼图像的图形内容还是右眼图像的图形内容而将所述值与+D或-D相乘。而且,再一次,如果cot(fovx)和wworld均等于1,那么(znear*wworld/(R-L)/2)可简化为1。
图2是说明可实施本发明中所描述的一个或一个以上实例技术的图形处理单元(GPU)的实例的框图。举例来说,图2更详细说明GPU20的组件。如图2中所说明,GPU20包含命令处理器54、着色器处理器22和固定功能管线24。命令处理器54可充当GPU20与应用程序处理器12之间的接口。举例来说,命令处理器54可从应用程序处理器12接收命令,且可确定命令应被转发到着色器处理器22还是固定功能管线24。
作为一个实例,如上文所描述,执行应用程序32的应用程序处理器12可指挥GPU20执行经修改顶点着色器30的目标代码。在此实例中,命令处理器54可从应用程序处理器12接收命令,且可指挥着色器处理器22执行经修改顶点着色器30的目标代码。作为另一实例,如上文所描述,图形驱动程序包装器16可修改由应用程序32发出的glViewport命令,且将经修改glViewport命令提供到GPU20。在此实例中,命令处理器54可接收经修改glViewport命令,且确定此命令是用于固定功能管线24的视口变换单元42。命令处理器54可将经修改glViewport命令转发到视口变换单元42以用于应用左眼图像和右眼图像的视口。
举例来说,如上文所描述,应用程序32可发出glDraw命令,图形驱动程序包装器16阻止所述glDraw命令以免发射到GPU20。glDraw命令可触发图形驱动程序包装器16将第一指令发出到着色器处理器22以执行经修改顶点着色器30的目标代码。着色器处理器22又执行经修改顶点着色器30的目标代码,且将所得剪切坐标存储于其本地存储器或系统存储器26中。glDraw命令还致使图形驱动程序包装器16发出由命令处理器54接收的第一经修改g1Viewport指令。接着,图形驱动程序包装器16发出由命令处理器54接收的第一glDraw命令。作为响应,命令处理器54致使固定功能管线24的固定功能单元和着色器处理器22执行其相应功能,以产生立体视图的第一图像(例如,左眼图像)的图形内容。举例来说,如更详细所论述,响应于第一glDraw命令,视口变换单元42将第一图像约束到显示器的第一部分,且按片段操作单元50输出第一图像的图形内容到帧缓冲器52。
在立体视图的第一图像存储于帧缓冲器52中之后,GPU20重复所述步骤以产生立体视图的第二图像的图形内容。举例来说,图形驱动程序包装器16发出第二指令到着色器处理器22以执行经修改顶点着色器30的目标代码。着色器处理器22又执行经修改顶点着色器30的目标代码,且将所得剪切坐标存储于其本地存储器或系统存储器26中。图形驱动程序包装器16还发出由命令处理器54接收的第二经修改glViewport指令。接着,图形驱动程序包装器16发出由命令处理器54接收的第二glDraw命令。作为响应,命令处理器54致使固定功能管线24的固定功能单元和着色器处理器22执行其相应功能,以产生立体视图的第二图像(例如,右眼图像)的图形内容。举例来说,响应于第二glDraw命令,视口变换单元42将第二图像约束到显示器的第二部分,且按片段操作单元50输出第二图像的图形内容到帧缓冲器52。在以下实例中更详细描述GPU20的此功能性。
如图2中的虚线框中所说明,着色器处理器22包含经修改顶点着色器30和片段着色器46。虚线框将指示着色器处理器22可不实际上包含经修改顶点着色器30和片段着色器46。更确切地,着色器处理器22可执行经修改顶点着色器30和片段着色器46的目标代码。经修改顶点着色器30和片段着色器46的对象可存储于系统存储器26中。
固定功能管线24可包含一个或一个以上固定功能单元,例如基元汇编单元36、视锥单元38、透视分割单元40、视口变换单元42、光栅化单元44和按片段操作单元50。固定功能管线24的此些固定功能单元中的每一者可为经硬接线以执行特定图形有关功能的硬件单元。尽管固定功能管线24的此些固定功能单元被说明为单独组件,但本发明的方面不限于此。固定功能管线24的固定功能单元中的一者或一者以上可一起组合成共同的固定功能单元。而且,可存在比图2中所说明的固定功能单元多的固定功能管线24的固定功能单元。固定功能管线24的一个或一个以上固定功能单元被单独地说明以易于理解。
此外,出于实例目的而说明固定功能管线24的固定功能单元的特定排序且其不应被视为限制性的。举例来说,可有可能重新排序固定功能管线24的固定功能单元。作为一个实例,按片段操作单元50的功能中的一者可为剔除由重叠像素遮蔽的像素。在固定功能管线24中较早地执行此功能可为可能的。
与着色器处理器22相比较,固定功能管线24的此些固定功能单元可提供极有限的功能灵活性。举例来说,着色器处理器22可特别地经设计以执行可编程着色器程序,例如经修改顶点着色器30和片段着色器46。此些着色器程序致使着色器处理器22以由着色器程序定义的方式起作用。换句话说,着色器程序可定义着色器处理器22的功能性,而固定功能管线24的固定功能单元的功能性是设定的。
如上文所描述,图形驱动程序包装器16可指挥GPU20执行经修改顶点着色器30的目标代码两次,其中第一次执行是用于产生立体视图的图像中的一者(例如,左眼图像)的顶点的剪切坐标,且第二次执行是用于产生立体视图的另一图像(例如,右眼图像)的顶点的剪切坐标。作为响应,为了使此些指令中的每一者执行经修改顶点着色器30的目标代码,命令处理器54可指挥着色器处理器22检索经修改顶点着色器30的目标代码,且执行所述目标代码。如上文所描述,编译器18可对经修改顶点着色器的源代码进行编译,且将所得目标代码存储为经修改顶点着色器30的目标代码。如图2中所说明,经修改顶点着色器30可接收顶点阵列34和纹理48作为输入。顶点阵列34可包含信息以产生由应用程序32产生的顶点的像素值(例如,顶点的坐标、顶点的颜色值和顶点的透明度值),如上文所描述。举例来说,顶点阵列34的顶点的坐标可为如由应用程序32定义的世界坐标。纹理48可为叠加在所产生图形上以提供图形内容的更逼真视图的纹理的像素值。
执行于着色器处理器22上的经修改顶点着色器30可产生顶点中的每一者的剪切坐标。举例来说,经修改顶点着色器30可通过执行等式1的矩阵乘法,将如由应用程序32定义且存储于顶点阵列34中的顶点的世界坐标转换成顶点中的每一者的剪切坐标,如上文关于图1所论述。此外,执行于着色器处理器22上的经修改顶点着色器30可更新顶点中的每一者的剪切坐标的gl_Position.x变量以在经修改顶点着色器30的目标代码的第一次执行中提供左眼图像的位移,且在经修改顶点着色器30的目标代码的第二次执行中提供右眼图像的位移。而且,经修改顶点着色器30可执行额外常规顶点着色器任务。举例来说,经修改顶点着色器30可对顶点执行照明功能。
在经修改顶点着色器30执行模型视图变换(例如,世界视图坐标到剪切坐标的转换,包含使用gl_Position.x+=命令的位移)之后,经修改顶点着色器30将顶点的剪切坐标提供到固定功能管线24的基元汇编单元36。基元汇编单元36可利用顶点的剪切坐标来将顶点汇编成基元。举例来说,基元汇编单元36可基于顶点的剪切坐标汇编多个三角形,其中三角形中的每一者的顶点对应于从经修改顶点着色器30接收的顶点。多个三角形为基元的一个实例。一般来说,基元汇编单元36可基于所接收顶点的剪切坐标将所接收顶点汇编成任何多边形。
基元汇编单元36可将经汇编基元发射到视锥单元38。视锥单元38可确定经汇编基元是否在视见体积内。举例来说,如上文所描述,OpenGL、OpenGL ES和OpenGL ES2.0可定义特定视见体积为(fovx)。然而,视锥可为可由用户使用(例如)glFrustum函数定义的。视锥单元38可确定基元是完全在视见体积内、是完全在视见体积外部,还是部分在视见体积内且部分在视见体积外部。视锥单元38可剔除完全在视见体积外部的基元及在视见体积外部的基元的部分以免进行进一步处理。视锥单元38可保留完全在视见体积内的基元及在视见体积内的基元的部分,以用于进一步处理。
视锥单元38可将剩余基元和基元的部分发射到透视分割单元40。透视分割单元40可基于基元的深度而将基元扩大或缩小。举例来说,基元中的每一者可由x、y和z坐标定义。z坐标可指示基元的靠近或远离程度。应注意,在此阶段,GPU20正产生立体视图的图像中的一者的图形内容。因此,基元的接近性的概念是在单视图而非立体视图的背景下。
举例来说,透视分割单元40可将一些基元缩小,且将其它基元扩大。此可产生在单视图中缩小基元与扩大基元相比较更为远离的感觉。如上文所描述,当显示此些单视图图像时,检视者感知到立体视图。换句话说,透视分割单元40可致使左眼图像和右眼图像为显示于显示器的2D区域中的3D图像。当检视者检视此些3D图像时,在左眼图像和右眼图像中由添加gl_Position.x+=命令而引起的位移致使检视者感知到包含3D体积的立体3D(S3D)图像。
透视分割单元40可将基元发射到视口变换单元42。视口变换单元42修改图像的大小和位置以适合于所定义视口。举例来说,在视口变换单元42之前,经修改顶点着色器30和固定功能管线24的固定功能单元处理图形数据,就好像图像将显示于整个显示器上一样。视口变换单元42的功能可为修改图像的大小和位置,使得图像被约束到所定义视口。
举例来说,如上文所描述,在第一次执行顶点着色器30的目标代码(此可产生左眼图像的图形内容(例如,顶点的剪切坐标))之后,图形驱动程序包装器16可修改左眼图像的视口以将左眼图像约束到显示器的左半部。举例来说,在第一次执行顶点着色器30的目标代码之后,图形驱动程序包装器16可将先前由应用程序32发出且被阻止发往GPU20的glViewport(0,0,宽度,长度)命令修改为glViewport(0,0,宽度/2,长度),且将此第一经修改glViewport命令提供到GPU20。命令处理器54可将第一经修改glViewport命令提供到视口变换单元42。在此实例中,视口变换单元42接着可修改从透视分割单元40接收的基元的大小,使得此些基元被约束到显示器的左半部。举例来说,透视分割单元40可对基元的大小进行相对于彼此的修改,使得一些基元看起来更靠近于其它基元。视口变换单元42可成比例地修改基元的大小和位置,使得基元被约束到显示器的左半部。
在第二次执行顶点着色器30的目标代码之后,视口变换单元42可执行类似功能,但这次是针对右眼图像。举例来说,顶点着色器30的目标代码的第二次执行可用于产生右眼图像的图形内容(例如,顶点的剪切坐标)。在此第二次执行顶点着色器30的目标代码之后,图形驱动程序包装器16可将先前由应用程序32发出且被阻止发往GPU20的glViewport(0,0,宽度,长度)命令修改为glViewport(宽度/2,0,宽度/2,长度),且将此第二经修改glViewport命令提供到GPU20。命令处理器54可将第二经修改glViewport命令转发到视口变换单元42。视口变换单元42可成比例地修改基元的大小和位置,使得基元被约束到显示器的右半部。以此方式,GPU20可操作以从由应用程序32在应用程序32的运行时期间产生的单视图图像产生立体视图的左眼图像和右眼图像,而不依赖于深度信息来从左眼图像产生右眼图像,且反之亦然。
此外,视口变换单元42可执行视口移位或视口移位和拉伸,如上文所描述。举例来说,如上文所描述,检视者可提供Vps值,且Vps值可被预编程,其中Vps值指示左眼图像和右眼图像的视口应移位或移位和拉伸的量。在此实例中,视口变换单元42还可操作以执行视口移位和拉伸。视口移位或移位和拉伸可致使所感知立体视图从显示器进一步跳出、从显示器未跳出多少,未推入到显示器中,或进一步推入到显示器中。
为了视口移位或移位和拉伸,命令处理器54可检索用户提供或预编程的Vps值,且将Vps值提供到视口变换单元42。在此实例中,视口变换单元42可接收左眼图像的经修改glViewport命令作为glViewport(0-Vps,0,宽度/2,长度)或glViewport(0-Vps,0,宽度/2+Vps,长度),且接收右眼图像的经修改glViewport命令作为glViewport(宽度/2+Vps,0,宽度/2,长度)或glViewport(宽度/2,0,宽度/2+Vps,长度)。视口变换单元42可执行左眼图像和右眼图像的移位和拉伸的视区移位,且如果视口延伸于显示器的显示区域之外,那么执行任何剔除。如上文所描述,视口移位或移位和拉伸可向检视者提供较丰富的立体视图。
视口变换单元42可在第一经修改glViewport命令和第二经修改g1Viewport命令中的每一者之后在修改视口之后将基元转发到光栅化单元44。光栅化单元44可将基元转换成显示器的像素。举例来说,光栅化单元44可确定显示器的哪些像素由基元中的每一者包含。光栅化单元44还可确定显示器上的此些像素中的每一者的位置。
光栅化单元44可输出其图形数据到片段着色器46。有时被称作像素着色器的片段着色器46可为执行于着色器处理器22上的着色器程序。举例来说,片段着色器46的源代码可存储于系统存储器26中,且编译器18可对片段着色器46的源代码进行编译,以产生片段着色器46的目标代码。或者,系统存储器26可存储片段着色器46的目标代码而不一定由编译器18产生所述目标代码。
片段着色器46可输出显示器上的像素中的每一者的颜色值。举例来说,片段着色器46可基于红绿蓝(RGB)分量来定义每一像素的颜色。作为一个说明性实例,片段着色器46可利用8位来定义红色分量,利用8位来定义绿色分量,且利用8位来定义蓝色分量。片段着色器46可输出颜色值到按片段操作单元50。
按片段操作单元50可剔除不可检视的像素。举例来说,进一步远离的对象的像素可被较靠近对象的像素重叠,按片段操作单元50可从z缓冲器确定此情形。重叠可致使进一步远离的对象的像素完全被遮蔽。在此状况下,按片段操作单元50可剔除重叠的像素。按片段操作单元50还可将像素混合在一起。举例来说,重叠像素可为半透明的,使得其不会完全遮蔽被重叠的像素。在此状况下,按片段操作单元50可将此些像素的颜色混合在一起。
按片段操作单元50的输出可为显示器上的像素的像素值(例如,颜色)。按片段操作单元50可输出像素值到系统存储器26的帧缓冲器52以用于临时存储。一旦帧缓冲器52满了,帧缓冲器52可存储显示器上的像素中的每一者的像素值。
帧缓冲器52可被视为存储位置的2D阵列。帧缓冲器52内的存储位置的数目可至少等于显示器的像素的数目。而且,帧缓冲器52内的存储位置可对应于显示器上的位置。举例来说,帧缓冲器52内的左上存储位置可对应于显示器的左上像素,在帧缓冲器52内的左上存储位置右边的存储位置可对应于在显示器的左上像素右边的像素,等等。
在完成第一glDraw命令之后,位于帧缓冲器52的左半部的存储位置可存储左眼图像的像素值,这是因为帧缓冲器52的左半部可对应于显示器的左半部。类似地,在完成第二glDraw命令之后,位于帧缓冲器52的右半部的存储位置可存储右眼图像的像素值,这是因为帧缓冲器52的右半部可对应于显示器的右半部。因此,在完成第一和第二glDraw命令之后,帧缓冲器52可存储左眼图像的像素值和右眼图像的像素值。
图3是进一步详细说明图1的实例装置的框图。举例来说,图3进一步详细说明图1的装置10。举例来说,如上文所指示,装置10的实例包含但不限于移动无线电话、PDA、包含视频显示器的电视游戏机、移动视频会议单元、膝上型计算机、台式计算机、电视机顶盒等等。
如图3中所说明,装置10可包含应用程序处理器12、GPU20、包含帧缓冲器52的系统存储器26、收发器模块56、用户接口58、显示器60和显示处理器62。应用程序处理器12、GPU和系统存储器26可实质上类似于或等同于图1和图2的应用程序处理器12、GPU20和系统存储器26。出于简洁的目的,仅详细描述图3中所示但图1和图2中未图示的组件。
如图3中所说明的装置10可包含出于清楚的目的图3中未图示的额外模块或单元。举例来说,在装置10为移动无线电话的实例中,装置10可包含扬声器和麦克风(其皆未展示于图3中)以实现电话通信,或在装置10为媒体播放器的实例中,装置10可包含扬声器。此外,装置10中所示的各种模块和单元可能并非在装置10的每一实例中都是必要的。举例来说,在装置10为台式计算机或经配备以与外部用户接口或显示器介接的其它装置的实例中,用户接口58和显示器60可在装置10的外部。
用户接口58的实例包含但不限于跟踪球、鼠标、键盘和其它类型的输入装置。用户接口58还可为触摸屏且可被并入作为显示器60的部分。收发器模块56可包含电路以允许装置10与另一装置或网络之间的无线或有线通信。收发器模块56可包含一个或一个以上调制器、解调器、放大器、天线和用于有线或无线通信的其它此类电路。显示器60可包括液晶显示器(LCD)、有机发光二极管显示器(OLED)、阴极射线管(CRT)显示器、等离子体显示器、偏振显示器或另一类型的显示装置。
显示处理器62可经配置以致使显示器60显示立体视图。可存在显示处理器62可利用以致使显示器60显示立体视图的各种技术,且本发明的方面可利用此些技术中的任一者。举例来说,显示处理器62可从帧缓冲器52的左半部检索左眼图像,从帧缓冲器52的右半部检索右眼图像,且使两个图像交错在一起以提供立体视图。
作为另一实例,显示处理器62可控制显示器60的刷新率。在此实例中,在每一刷新周期期间,显示处理器62可在左眼图像与右眼图像之间循环。举例来说,显示处理器62可从帧缓冲器52的左半部检索左眼图像,扩大左眼图像到整个显示器60,且在一个刷新周期内在显示器60上显示左眼图像。接着,在下一个刷新周期内,显示处理器62可执行实质上类似的功能,但这次是针对存储于帧缓冲器52的右半部中的右眼图像。换句话说,显示器60可显示左眼图像,接着右眼图像,接着左眼图像等等。
检视者可戴上与显示处理器62的刷新率同步的专用眼镜。举例来说,当显示器60正显示左眼图像时,专用眼镜可快门关闭右透镜,使得仅检视者的左眼捕获到左眼图像。接着,当显示器60正显示右眼图像时,专用眼镜可快门关闭左透镜,使得仅检视者的右眼捕获到右眼图像,等等。如果刷新率足够快,那么检视者感知立体视图,其中图像跳出显示器60之外或推入到显示器60中且包含3D体积。
在一些实例中,一些常规显示处理器可不经配置以致使显示器60显示立体视图。在此些实例中,检视者可将装置10耦合到显示器,所述显示器包含显示处理器(例如,显示处理器62),所述显示处理器经配置以致使显示器呈现立体视图。举例来说,检视者可经由收发器模块56将装置10耦合到有立体视图功能的电视。举例来说,检视者可经由高清晰度多媒体接口(HDMI)线将收发器模块56耦合到电视。在此实例中,应用程序处理器12或GPU20可指挥收发器模块56将存储于帧缓冲器52中的像素值传输到电视的显示处理器。此电视的显示处理器接着可致使电视显示左眼图像和右眼图像以形成立体视图。
在此些实例中,装置10的显示器仍可能显示左眼图像和右眼图像。然而,因为装置10的显示处理器62可不能够致使装置10的显示器60呈现立体视图,所以在此实例中,显示器60可并排地显示左眼图像和右眼图像。举例来说,显示器60的左半部可显示左眼图像,且显示器60的右半部可显示右眼图像。此情形可能是由于上文所描述的视口变换。在此状况下,即使在具有专用眼镜的情况下,检视者仍不可简单地通过检视显示器60来体验立体视图,但将通过检视有立体视图功能的电视来体验立体视图。
图4是说明根据本发明中所描述之一个或一个以上实例技术的实例操作的流程图。出于说明的目的,参考图1和图2。
处理器可接收经设计以产生单视图的图像且将执行于图形处理单元(GPU)的着色器处理器上的顶点着色器的指令(64)。举例来说,应用程序处理器12通过执行图形驱动程序包装器16可接收顶点着色器28的指令。如上文所描述,顶点着色器28可经设计以产生单视图的图形内容,且可经设计以执行于GPU20的着色器处理器22上。
处理器可修改顶点着色器的指令以包含致使顶点着色器在执行于GPU的着色器处理器上时在顶点着色器的第一次执行之后产生立体视图的第一图像的图形内容及在立体视图的顶点着色器的第二次执行之后产生立体视图的第二图像的图形内容的一个或一个以上指令(66)。第一图像可为左眼图像,且第二图像可为右眼图像。
举例来说,图形驱动程序包装器16可接收顶点着色器28的源代码,且可在顶点着色器28的源代码中包含gl_Position.x+=X命令。编译器18可对顶点着色器28的经修改源代码进行编译以产生经修改顶点着色器30的目标代码。图形驱动程序包装器16可致使着色器处理器22执行经修改顶点着色器30的目标代码,且可向着色器处理器22提供X的值+D。在图形驱动程序包装器16发出第一glDraw命令之后,图形驱动程序包装器16可致使着色器处理器22再次执行经修改顶点着色器30的目标代码,且可向着色器处理器22提供X的值-D。
处理器可将定义单视图的图像的视口的命令修改为用于不同于着色器处理器的GPU的固定功能单元的定义第一图像的视口的第一命令,及用于GPU的固定功能单元的定义第二图像的视口的第二命令(68)。在此实例中,固定功能单元可为图2的视口变换单元42。如所说明,及上文所描述,视口变换单元42不同于着色器处理器22。
作为一个实例,图形驱动程序包装器16可将先前由应用程序32发出的glViewport(0,0,宽度,长度)命令修改为glViewport(0,0,宽度/2,长度)命令以用于呈现左眼图像,且图形驱动程序包装器16可将glViewport(0,0,宽度,长度)命令修改为glViewport(宽度/2,0,宽度/2,长度)命令以用于呈现右眼图像。在一些实例中,图形驱动程序包装器16可将第一和第二图像的视口移位或移位和拉伸,如上文所论述。在一些实例中,图形驱动程序包装器16可将第一和第二图像的视口移位或移位和拉伸,同时修改定义单视图的视口的指令,以定义第一和第二图像的视口。
以下伪代码提供图形驱动程序包装器16和应用程序32的功能性的实例。此伪代码意在辅助理解且不应被视为限制性的。
1.图形驱动程序包装器16拦截由应用程序32发出的glShaderSource命令以拦截顶点着色器28的源代码。
2.图形驱动程序包装器16将“统一浮点数X”插入到顶点着色器28的指令中,其中“统一”为具有可编程着色器的OpenGL和OpenGL ES中的用户定义的标准属性变量。
3.图形驱动程序包装器16将“gl_Position.x+=X”命令插入于顶点着色器28的源代码中。
4.应用程序32执行glCompileShader命令,所述glCompileShader命令致使编译器18对顶点着色器28的经修改源代码指令进行编译,以产生经修改顶点着色器30的目标代码。
5.应用程序32执行以下命令以连结到经修改顶点着色器30的目标代码:
programObject=glCreateProgram();
glAttachShader(programObject,vertexShader);
glAttachShader(programObject,fragmentShader);
glLinkProgram(programObject)
6.图形驱动程序包装器16在由应用程序32调用时拦截glDraw命令(例如,glDrawArrays和glDrawElements),且阻止命令被发射到GPU20。
7.图形驱动程序包装器16发出以下命令:
glGetInteger(GL_CURRENT_PROGRAM,&program);//为了获得到当前顶点着色器的指针
修改glViewport命令以产生左眼图像的视口,如上文所描述。
p=glGetUniformLocation(program,X);为了获得到统一X的指针
glUniformlf(p,D);//为了设定X的值等于D。
glDraw命令//为了致使GPU20产生左眼图像的图形内容
8.重复7的步骤,其具有以下修改以产生右眼图像的图形内容:
修改glViewport命令以产生右眼图像的视口,如上文所描述。
glUniformlf(p,-D)//为了设定X的值等于-D。
glDraw命令//为了致使GPU20产生右眼图像的图形内容。
在一个或一个以上实例中,所描述的功能可以硬件、软件、固件或其任何组合来实施。如果以软件来实施,那么功能可作为一个或一个以上指令或代码存储于计算机可读媒体上。计算机可读媒体可包含计算机数据存储媒体。数据存储媒体可为可由一个或一个以上计算机或一个或一个以上处理器存取以检索用于实施本发明中所描述的技术的指令、代码和/或数据结构的任何可用媒体。举例来说,且并不限制,此计算机可读媒体可包括随机存取存储器(RAM)、只读存储器(ROM)、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置,或可用来存储呈指令或数据结构的形式的所要程序代码且可由计算机存取的任何其它媒体。如本文中所使用,磁盘和光盘包含压缩光盘(CD)、激光光盘、光学光盘、数字多功能光盘(DVD)、软磁盘和蓝光光盘,其中磁盘通常以磁性方式再生数据,而光盘使用激光以光学方式再生数据。上文的组合也应包含在计算机可读媒体的范围内。
可由例如一个或一个以上数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路等一个或一个以上处理器来执行代码。因此,如本文中所使用的术语“处理器”可指上述结构或适合于实施本文中所描述的技术的任一其它结构中的任一者。并且,可将所述技术完全实施于一个或一个以上电路或逻辑元件中。
本发明的技术可在广泛多种装置或设备中实施,包含无线手持机、集成电路(IC)或一组IC(即,芯片组)。本发明中描述各种组件、模块或单元以强调经配置以执行所揭示技术的装置的功能方面,但不一定要求通过不同硬件单元来实现。更确切地,如上所述,各种单元可在硬件单元中组合或由互操作硬件单元(包含如上所述的一个或一个以上处理器)的集合结合合适软件和/或固件来提供。
已描述了各种实例。这些及其它实例属于所附权利要求书的范围内。

Claims (38)

1.一种方法,其包括:
通过处理器接收用于顶点着色器的指令,所述顶点着色器经配置以产生单视图的图像,且将执行于图形处理单元GPU的着色器处理器上;
通过所述处理器修改所述顶点着色器的所述指令以包含一个或一个以上指令,所述一个或一个以上指令致使所述顶点着色器在执行于所述GPU的所述着色器处理器上时在所述顶点着色器的第一次执行之后产生立体视图的第一图像的图形内容及在所述顶点着色器的第二次执行之后产生所述立体视图的第二图像的图形内容;及
通过所述处理器将定义所述单视图的所述图像的视口的命令修改为用于不同于所述着色器处理器的所述GPU的固定功能单元的定义所述第一图像的视口的第一命令,及用于所述GPU的所述固定功能单元的定义所述第二图像的视口的第二命令。
2.根据权利要求1所述的方法,其进一步包括:
通过所述GPU的所述着色器处理器执行所述顶点着色器的所述经修改指令的目标代码;及
通过所述GPU的所述固定功能单元执行定义所述第一图像的所述视口的所述第一命令及定义所述第二图像的所述视口的所述第二命令。
3.根据权利要求1所述的方法,其中修改定义所述图像的所述视口的所述命令,使得所述第一命令经配置以将所述第一图像约束到显示器的第一部分,且所述第二命令经配置以将所述第二图像约束到所述显示器的第二部分。
4.根据权利要求1所述的方法,其中修改定义所述图像的所述视口的所述命令进一步包括将所述第一图像的所述视口移位或移位和拉伸,及将所述第二图像的所述视口移位或移位和拉伸。
5.根据权利要求1所述的方法,其中修改定义所述图像的所述视口的所述命令包括将glViewport(0,0,宽度,长度)命令修改为包括glViewport(0,0,宽度/2,长度)命令的所述第一命令,及包括glViewport(宽度/2,0,宽度/2,长度)命令的所述第二命令,且其中宽度等于显示器的宽度,且长度等于所述显示器的长度。
6.根据权利要求1所述的方法,其中修改定义所述图像的所述视口的所述命令包括将glViewport(0,0,宽度,长度)命令修改为包括glViewport(0-Vps,0,宽度/2,长度)命令或glViewport(0-Vps,0,宽度/2+Vps,长度)命令的所述第一命令,及包括glViewport(宽度/2+Vps,0,宽度/2,长度)命令或glViewport(宽度/2,0,宽度/2+Vps,长度)命令的所述第二命令,且其中宽度等于显示器的宽度,长度等于所述显示器的长度,且Vps定义所述立体视图跳出所述显示器之外或推入到所述显示器中的量。
7.根据权利要求1所述的方法,其中所述固定功能单元包括所述GPU的固定功能管线的视口变换单元。
8.根据权利要求1所述的方法,其中接收所述顶点着色器的指令包括通过执行于所述处理器上的图形驱动程序包装器接收所述顶点着色器的所述指令,其中修改所述顶点着色器的所述指令包括通过执行于所述处理器上的所述图形驱动程序包装器修改所述顶点着色器的所述指令,且其中修改定义所述视口的所述命令包括通过执行于所述处理器上的所述图形驱动程序包装器修改定义所述视口的所述命令。
9.根据权利要求1所述的方法,其中修改所述顶点着色器的所述指令包括将修改所述单视图的所述图像的至少一个剪切坐标的指令添加到所述顶点着色器中。
10.根据权利要求9所述的方法,其中将修改至少一个剪切坐标的所述指令添加到所述顶点着色器中包括将更新存储所述至少一个剪切坐标的变量的指令添加到所述顶点着色器中。
11.根据权利要求10所述的方法,其中将更新存储所述至少一个剪切坐标的所述变量的所述指令添加到所述顶点着色器中包括在所述第一次执行中添加用于将常量值加到所述至少一个剪切坐标的指令,及在所述第二次执行中添加用于从所述至少一个剪切坐标减去所述常量值的指令。
12.根据权利要求10所述的方法,其中将修改所述单视图的所述图像的所述至少一个剪切坐标的所述指令添加到所述顶点着色器中包括添加gl.Position.x+=X命令,其中X在所述第一次执行中等于+D且在所述第二次执行中等于-D,且其中D等于检视者的左眼与右眼之间的距离的一半的估计。
13.根据权利要求1所述的方法,其中修改所述顶点着色器的所述指令以包含一个或一个以上指令包括仅将修改所述单视图的所述图像的一个剪切坐标的指令添加到所述顶点着色器中。
14.一种设备,其包括:
图形处理单元GPU,其包含着色器处理器和固定功能管线的不同于所述着色器处理器的固定功能单元;及
处理器,其可操作以:
接收用于顶点着色器的指令,所述顶点着色器经配置以产生单视图的图像,且将执行于所述GPU的所述着色器处理器上;
修改所述顶点着色器的所述指令以包含一个或一个以上指令,所述一个或一个以上指令致使所述顶点着色器在执行于所述GPU的所述着色器处理器上时在所述顶点着色器的第一次执行之后产生立体视图的第一图像的图形内容及在所述顶点着色器的第二次执行之后产生所述立体视图的第二图像的图形内容;及
将定义所述单视图的所述图像的视口的命令修改为用于不同于所述着色器处理器的所述GPU的所述固定功能单元的定义所述第一图像的视口的第一命令,及用于所述GPU的所述固定功能单元的定义所述第二图像的视口的第二命令。
15.根据权利要求14所述的设备,其中所述GPU的所述着色器处理器经配置以执行所述顶点着色器的所述经修改指令的目标代码,且其中所述GPU的所述固定功能单元经配置以执行定义所述第一图像的所述视口的所述第一命令及定义所述第二图像的所述视口的所述第二命令。
16.根据权利要求14所述的设备,其中所述处理器可操作以修改定义所述图像的所述视口的所述命令,使得所述第一命令经配置以将所述第一图像约束到显示器的第一部分,且所述第二命令经配置以将所述第二图像约束到所述显示器的第二部分。
17.根据权利要求14所述的设备,其中所述处理器可进一步操作以修改定义所述图像的所述视口的所述命令,以将所述第一图像的所述视口移位或移位和拉伸,及将所述第二图像的所述视口移位或移位和拉伸。
18.根据权利要求14所述的设备,其中为了修改定义所述图像的所述视口的所述命令,所述处理器可操作以将glViewport(0,0,宽度,长度)命令修改为包括glViewport(0,0,宽度/2,长度)命令的所述第一命令,及包括glViewport(宽度/2,0,宽度/2,长度)命令的所述第二命令,且其中宽度等于显示器的宽度,且长度等于所述显示器的长度。
19.根据权利要求14所述的设备,其中为了修改定义所述图像的所述视口的所述命令,所述处理器可操作以将glViewport(0,0,宽度,长度)命令修改为包括glViewport(0-Vps,0,宽度/2,长度)命令或glViewport(0-Vps,0,宽度/2+Vps,长度)命令的所述第一命令,及包括glViewport(宽度/2+Vps,0,宽度/2,长度)命令或glViewport(宽度/2,0,宽度/2+Vps,长度)命令的所述第二命令,且其中宽度等于显示器的宽度,长度等于所述显示器的长度,且Vps定义所述立体视图跳出所述显示器之外的量。
20.根据权利要求14所述的设备,其中所述固定功能单元包括视口变换单元。
21.根据权利要求14所述的设备,其中所述处理器可操作以执行图形驱动程序包装器以接收用于顶点着色器的指令,修改所述顶点着色器的所述指令,及修改定义所述图像的视口的所述命令。
22.根据权利要求14所述的设备,其中为了修改所述顶点着色器的所述指令,所述处理器可操作以将修改所述单视图的所述图像的至少一个剪切坐标的指令添加到所述顶点着色器中。
23.根据权利要求22所述的设备,其中为了将修改至少一个剪切坐标的所述指令添加到所述顶点着色器中,所述处理器可操作以将更新存储所述至少一个剪切坐标的变量的指令添加到所述顶点着色器中。
24.根据权利要求23所述的设备,其中为了将更新存储所述至少一个剪切坐标的所述变量的所述指令添加到所述顶点着色器中,所述处理器可操作以在所述第一次执行中添加用于将常量值加到所述至少一个剪切坐标的指令,及在所述第二次执行中添加用于从所述至少一个剪切坐标减去所述常量值的指令。
25.根据权利要求23所述的设备,其中为了将修改所述单视图的所述图像的所述至少一个剪切坐标的所述指令添加到所述顶点着色器中,所述处理器可操作以添加gl.Position.x+=X命令,其中X在所述第一次执行中等于+D且在所述第二次执行中等于-D,且其中D等于检视者的左眼与右眼之间的距离的一半的估计。
26.根据权利要求14所述的设备,其中为了修改所述顶点着色器的所述指令以包含一个或一个以上指令,所述处理器可操作以仅将修改所述单视图的所述图像的一个剪切坐标的指令添加到所述顶点着色器中。
27.一种设备,其包括:
图形处理单元GPU,其包含着色器处理器和固定功能管线的不同于所述着色器处理器的固定功能单元;及
处理器,其包含:
用于接收用于顶点着色器的指令的装置,所述顶点着色器经配置以产生单视图的图像,且将执行于所述GPU的所述着色器处理器上;
用于修改所述顶点着色器的所述指令以包含一个或一个以上指令的装置,所述一个或一个以上指令致使所述顶点着色器在执行于所述GPU的所述着色器处理器上时在所述顶点着色器的第一次执行之后产生立体视图的第一图像的图形内容及在所述顶点着色器的第二次执行之后产生所述立体视图的第二图像的图形内容;及
用于将定义所述单视图的所述图像的视口的命令修改为用于不同于所述着色器处理器的所述GPU的固定功能单元的定义所述第一图像的视口的第一命令及用于所述GPU的所述固定功能单元的定义所述第二图像的视口的第二命令的装置。
28.根据权利要求27所述的设备,其中所述GPU的所述着色器处理器经配置以执行所述顶点着色器的所述经修改指令的目标代码,且其中所述GPU的所述固定功能单元经配置以执行定义所述第一图像的所述视口的所述第一命令及定义所述第二图像的所述视口的所述第二命令。
29.根据权利要求27所述的设备,其中所述装置用于修改定义所述图像的所述视口的所述命令,使得所述第一命令经配置以将所述第一图像约束到显示器的第一部分,且所述第二命令经配置以将所述第二图像约束到所述显示器的第二部分。
30.根据权利要求27所述的设备,其中所述用于修改定义所述图像的所述视口的所述命令的装置进一步包括用于将所述第一图像的所述视口移位或移位和拉伸的装置,及用于将所述第二图像的所述视口移位或移位和拉伸的装置。
31.根据权利要求27所述的设备,其中所述用于修改所述顶点着色器的所述指令的装置包括用于将修改所述单视图的所述图像的至少一个剪切坐标的指令添加到所述顶点着色器中的装置。
32.根据权利要求27所述的设备,其中所述用于修改所述顶点着色器的所述指令以包含一个或一个以上指令的装置包括用于仅将修改所述单视图的所述图像的一个剪切坐标的指令添加到所述顶点着色器中的装置。
33.一种包括指令的非暂时性计算机可读存储媒体,所述指令在执行时致使一个或一个以上处理器:
接收用于顶点着色器的指令,所述顶点着色器经设计以产生单视图的图像,且将执行于图形处理单元GPU的着色器处理器上;
修改所述顶点着色器的所述指令以包含一个或一个以上指令,所述一个或一个以上指令致使所述顶点着色器在执行于所述GPU的所述着色器处理器上时在所述顶点着色器的第一次执行之后产生立体视图的第一图像的图形内容及在所述顶点着色器的第二次执行之后产生所述立体视图的第二图像的图形内容;及
将定义所述单视图的所述图像的视口的命令修改为用于不同于所述着色器处理器的所述GPU的固定功能单元的定义所述第一图像的视口的第一命令,及用于所述GPU的所述固定功能单元的定义所述第二图像的视口的第二命令。
34.根据权利要求33所述的非暂时性计算机可读存储媒体,其进一步包括用以进行以下操作的指令:
通过所述GPU的所述着色器处理器执行所述顶点着色器的所述经修改指令的目标代码;及
通过所述GPU的所述固定功能单元执行定义所述第一图像的所述视口的所述第一命令及定义所述第二图像的所述视口的所述第二命令。
35.根据权利要求33所述的非暂时性计算机可读存储媒体,其中所述用以修改定义所述图像的所述视口的所述命令的指令包括用以将定义所述单视图的所述图像的所述视口的所述命令修改为将所述第一图像约束到显示器的第一部分的所述第一命令及将所述第二图像约束到所述显示器的第二部分的所述第二命令的指令。
36.根据权利要求33所述的非暂时性计算机可读存储媒体,其中所述用以修改定义所述图像的所述视口的所述命令的指令进一步包括用以将所述第一图像的所述视口移位或移位和拉伸及将所述第二图像的所述视口移位或移位和拉伸的指令。
37.根据权利要求33所述的非暂时性计算机可读存储媒体,其中所述用以修改所述顶点着色器的所述指令的指令包括用以将修改所述单视图的所述图像的至少一个剪切坐标的指令添加到所述顶点着色器中的指令。
38.根据权利要求33所述的非暂时性计算机可读存储媒体,其中所述用以修改所述顶点着色器的所述指令以包含一个或一个以上指令的指令包括用以仅将修改所述单视图的所述图像的一个剪切坐标的指令添加到所述顶点着色器中的指令。
CN201280018404.2A 2011-03-14 2012-03-12 用于基于着色器的图形内容的立体转换 Expired - Fee Related CN103493102B (zh)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201161452289P 2011-03-14 2011-03-14
US61/452,289 2011-03-14
US201161474638P 2011-04-12 2011-04-12
US61/474,638 2011-04-12
US13/350,467 US9578299B2 (en) 2011-03-14 2012-01-13 Stereoscopic conversion for shader based graphics content
US13/350,467 2012-01-13
PCT/US2012/028749 WO2012125545A1 (en) 2011-03-14 2012-03-12 Stereoscopic conversion for shader based graphics content

Publications (2)

Publication Number Publication Date
CN103493102A true CN103493102A (zh) 2014-01-01
CN103493102B CN103493102B (zh) 2016-11-09

Family

ID=46828080

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201280018404.2A Expired - Fee Related CN103493102B (zh) 2011-03-14 2012-03-12 用于基于着色器的图形内容的立体转换
CN201280013469.8A Expired - Fee Related CN103444190B (zh) 2011-03-14 2012-03-13 原生单像3d到立体3d的运行时转换

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201280013469.8A Expired - Fee Related CN103444190B (zh) 2011-03-14 2012-03-13 原生单像3d到立体3d的运行时转换

Country Status (6)

Country Link
US (2) US9578299B2 (zh)
EP (2) EP2686833B1 (zh)
JP (2) JP5694577B2 (zh)
KR (2) KR101556835B1 (zh)
CN (2) CN103493102B (zh)
WO (2) WO2012125545A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105635707A (zh) * 2014-11-06 2016-06-01 福州瑞芯微电子股份有限公司 一种图像生成方法和装置
CN106993179A (zh) * 2017-02-24 2017-07-28 杭州电子科技大学 一种3d模型转立体双视点视图的方法
CN107637075A (zh) * 2015-05-28 2018-01-26 高通股份有限公司 立体视图处理

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010121945A2 (en) * 2009-04-21 2010-10-28 International Business Machines Corporation Method and system for interaction with unmodified 3d graphics applications
KR20130081569A (ko) * 2012-01-09 2013-07-17 삼성전자주식회사 3d 영상을 출력하기 위한 장치 및 방법
US9538164B2 (en) 2013-01-10 2017-01-03 Qualcomm Incorporated Stereoscopic conversion with viewing orientation for shader based graphics content
EP2972863A4 (en) * 2013-03-13 2016-10-26 Intel Corp IMPROVED PROCESSES FOR THREE-DIMENSIONAL IMAGE PROCESSING
US20140375663A1 (en) * 2013-06-24 2014-12-25 Alexander Pfaffe Interleaved tiled rendering of stereoscopic scenes
US10134170B2 (en) * 2013-09-26 2018-11-20 Intel Corporation Stereoscopic rendering using vertix shader instancing
KR102082132B1 (ko) * 2014-01-28 2020-02-28 한국전자통신연구원 2d 동영상으로부터 새로운 3d 입체 동영상 제작을 위한 장치 및 방법
US20150281679A1 (en) 2014-03-28 2015-10-01 Qualcomm Incorporated Pixel data generation for autostereoscopy images
CN104134231B (zh) * 2014-07-11 2017-02-01 南京乐飞航空技术有限公司 一种基于图像识别的海岸线构造方法
US9626733B2 (en) * 2014-11-24 2017-04-18 Industrial Technology Research Institute Data-processing apparatus and operation method thereof
CN104486611A (zh) * 2014-12-29 2015-04-01 北京极维客科技有限公司 一种图像转换方法及装置
GB2536964B (en) 2015-04-02 2019-12-25 Ge Aviat Systems Ltd Avionics display system
KR102459850B1 (ko) 2015-12-03 2022-10-27 삼성전자주식회사 3d 이미지 처리 방법 및 장치, 및 그래픽 처리 장치
US10203747B2 (en) 2016-03-22 2019-02-12 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Workload placement based on heterogeneous compute performance per watt
US10860499B2 (en) 2016-03-22 2020-12-08 Lenovo Enterprise Solutions (Singapore) Pte. Ltd Dynamic memory management in workload acceleration
US10884761B2 (en) 2016-03-22 2021-01-05 Lenovo Enterprise Solutions (Singapore) Pte. Ltd Best performance delivery in heterogeneous computing unit environment
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
WO2018140223A1 (en) * 2017-01-25 2018-08-02 Advanced Micro Devices, Inc. Stereo rendering
US20180211434A1 (en) * 2017-01-25 2018-07-26 Advanced Micro Devices, Inc. Stereo rendering
US20240070959A1 (en) * 2022-08-25 2024-02-29 Acer Incorporated Method and computer device for 3d scene generation
CN115457200B (zh) * 2022-08-31 2023-04-14 北京四维远见信息技术有限公司 2.5维图像自动真立体显示方法、装置、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1277698A (zh) * 1998-06-30 2000-12-20 皇家菲利浦电子有限公司 用于变换硬件加速绘制结构中的三维数据的滤光器
WO2007017834A2 (en) * 2005-08-09 2007-02-15 Koninklijke Philips Electronics N.V. Disparity value generator
US20080007559A1 (en) * 2006-06-30 2008-01-10 Nokia Corporation Apparatus, method and a computer program product for providing a unified graphics pipeline for stereoscopic rendering
US7884823B2 (en) * 2007-06-12 2011-02-08 Microsoft Corporation Three dimensional rendering of display information using viewer eye coordinates

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2532267B1 (fr) 1982-08-31 1988-05-27 Lely Nv C Van Der Tracteur comportant une pluralite de roues motrices
US6104405A (en) 1997-02-26 2000-08-15 Alternate Realities Corporation Systems, methods and computer program products for converting image data to nonplanar image data
US5982375A (en) 1997-06-20 1999-11-09 Sun Microsystems, Inc. Floating point processor for a three-dimensional graphics accelerator which includes single-pass stereo capability
GB2358980B (en) 2000-02-07 2004-09-01 British Broadcasting Corp Processing of images for 3D display
GB0010685D0 (en) 2000-05-03 2000-06-28 Koninkl Philips Electronics Nv Autostereoscopic display driver
US20020154214A1 (en) 2000-11-02 2002-10-24 Laurent Scallie Virtual reality game system using pseudo 3D display driver
US20040085310A1 (en) 2002-11-04 2004-05-06 Snuffer John T. System and method of extracting 3-D data generated for 2-D display applications for use in 3-D volumetric displays
AU2002952872A0 (en) 2002-11-25 2002-12-12 Dynamic Digital Depth Research Pty Ltd Image generation
US20040212612A1 (en) 2003-04-28 2004-10-28 Michael Epstein Method and apparatus for converting two-dimensional images into three-dimensional images
GB0410551D0 (en) 2004-05-12 2004-06-16 Ller Christian M 3d autostereoscopic display
US8004515B1 (en) * 2005-03-15 2011-08-23 Nvidia Corporation Stereoscopic vertex shader override
JP4931038B2 (ja) 2005-11-22 2012-05-16 シャープ株式会社 立体視画像装置、ゲーム装置、立体視画像映写装置、立体視画像データ生成方法、制御プログラムおよび可読記録媒体
US8237739B2 (en) 2006-09-12 2012-08-07 Qualcomm Incorporated Method and device for performing user-defined clipping in object space
US8149242B2 (en) * 2006-11-10 2012-04-03 Sony Computer Entertainment Inc. Graphics processing apparatus, graphics library module and graphics processing method
US7982733B2 (en) 2007-01-05 2011-07-19 Qualcomm Incorporated Rendering 3D video images on a stereo-enabled display
JP4836814B2 (ja) 2007-01-30 2011-12-14 株式会社東芝 3dディスプレイ用cg画像生成装置、3dディスプレイ用cg画像生成方法、及びプログラム
JP2009064355A (ja) 2007-09-07 2009-03-26 Cellius Inc プログラム、情報記憶媒体及び画像生成システム
JP4982862B2 (ja) 2007-09-07 2012-07-25 株式会社バンダイナムコゲームス プログラム、情報記憶媒体及び画像生成システム
US7675513B2 (en) * 2008-03-14 2010-03-09 Evans & Sutherland Computer Corp. System and method for displaying stereo images
US8279222B2 (en) 2008-03-14 2012-10-02 Seiko Epson Corporation Processing graphics data for a stereoscopic display
EP2387243A4 (en) 2009-01-12 2012-12-26 Lg Electronics Inc DEPTH INFORMATION USING VIDEO SIGNAL PROCESSING METHOD AND DEVICE
US9001157B2 (en) 2009-03-25 2015-04-07 Nvidia Corporation Techniques for displaying a selection marquee in stereographic content
WO2010121945A2 (en) 2009-04-21 2010-10-28 International Business Machines Corporation Method and system for interaction with unmodified 3d graphics applications
GB2470759A (en) 2009-06-03 2010-12-08 Sony Comp Entertainment Europe Displaying videogame on 3D display by generating stereoscopic version of game without modifying source code
CN102474638B (zh) 2009-07-27 2015-07-01 皇家飞利浦电子股份有限公司 组合3d视频与辅助数据
US8773449B2 (en) 2009-09-14 2014-07-08 International Business Machines Corporation Rendering of stereoscopic images with multithreaded rendering software pipeline
KR101631514B1 (ko) 2009-11-19 2016-06-17 삼성전자주식회사 전자기기에서 3차원 컨텐츠 생성 방법 및 장치
US8964013B2 (en) 2009-12-31 2015-02-24 Broadcom Corporation Display with elastic light manipulator

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1277698A (zh) * 1998-06-30 2000-12-20 皇家菲利浦电子有限公司 用于变换硬件加速绘制结构中的三维数据的滤光器
WO2007017834A2 (en) * 2005-08-09 2007-02-15 Koninklijke Philips Electronics N.V. Disparity value generator
US20080007559A1 (en) * 2006-06-30 2008-01-10 Nokia Corporation Apparatus, method and a computer program product for providing a unified graphics pipeline for stereoscopic rendering
US7884823B2 (en) * 2007-06-12 2011-02-08 Microsoft Corporation Three dimensional rendering of display information using viewer eye coordinates

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105635707A (zh) * 2014-11-06 2016-06-01 福州瑞芯微电子股份有限公司 一种图像生成方法和装置
CN107637075A (zh) * 2015-05-28 2018-01-26 高通股份有限公司 立体视图处理
CN107637075B (zh) * 2015-05-28 2019-04-05 高通股份有限公司 立体视图处理
CN106993179A (zh) * 2017-02-24 2017-07-28 杭州电子科技大学 一种3d模型转立体双视点视图的方法

Also Published As

Publication number Publication date
EP2687018A1 (en) 2014-01-22
JP2014516427A (ja) 2014-07-10
JP5882367B2 (ja) 2016-03-09
US20120236002A1 (en) 2012-09-20
JP2014512032A (ja) 2014-05-19
CN103493102B (zh) 2016-11-09
US9219902B2 (en) 2015-12-22
WO2012125648A1 (en) 2012-09-20
EP2686833A1 (en) 2014-01-22
KR101529812B1 (ko) 2015-06-17
CN103444190A (zh) 2013-12-11
JP5694577B2 (ja) 2015-04-01
EP2686833B1 (en) 2018-06-20
US20120235999A1 (en) 2012-09-20
CN103444190B (zh) 2016-06-08
KR20130131480A (ko) 2013-12-03
KR101556835B1 (ko) 2015-10-01
WO2012125545A1 (en) 2012-09-20
US9578299B2 (en) 2017-02-21
KR20130136536A (ko) 2013-12-12

Similar Documents

Publication Publication Date Title
CN103493102A (zh) 用于基于着色器的图形内容的立体转换
CN104904201A (zh) 基于着色器的图形内容的观看定向的立体转换
CN103946895B (zh) 基于平铺块的呈现中的镶嵌方法和设备
AU2006287351B2 (en) 2D editing metaphor for 3D graphics
US8289320B2 (en) 3D graphic rendering apparatus and method
CN107637075B (zh) 立体视图处理
US9235911B2 (en) Rendering an image on a display screen
US10650579B2 (en) Systems and methods of distance-based shaders for procedurally generated graphics
KR20120012858A (ko) 3차원 그래픽 기반 단말기에서 객체 렌더링 장치 및 방법
US20140015838A1 (en) Apparatus and method of performing tile binning of bezier curve
KR101919077B1 (ko) 증강 현실 표시 방법 및 장치
CN105808220A (zh) 应用程序显示三维立体效果的方法及装置
Sankaralingam Unified Graphics API for a Display-Agnostic Rendering System
US20220270312A1 (en) Perspective correct vector graphics rendering techniques
Jüttner et al. A standalone Interface for web-based virtual reality of calculated fields
Zhang et al. The application of autostereoscopic display in smart home system based on mobile devices
CN110728743A (zh) 结合云端全局光照渲染的vr三维场景立体画面生成方法
CN105635707A (zh) 一种图像生成方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20161109

Termination date: 20210312

CF01 Termination of patent right due to non-payment of annual fee