(2)背景技术
显示动画的方式通常利用人类眼睛视觉暂留的效应,以产生连续动作的效
果,即藉由不断切换显示缓冲区(display buffer)中的前景缓冲区(front buffer)
及背景缓冲区(back buffer)而达到动画的效果。举例来说,当操作一个跑马灯
的时候,先将画面背景填满,然后在背景上画上文字,之后反复同样动作,连接
起来就会有跑马灯的效果了,可是,这样的做法会发现当第二次填满画面背景时,
第一个文字会有一瞬间被盖掉,然后第二次文字才被画上去,于是就会形成文字
看起来好像在闪烁一样的问题。因此,为了防止闪烁的情形发生,会先将全部的
画面在背景缓冲区画好后再传送到前缓冲区,这就是背景缓冲区的作用。背景缓
冲区里的图像,而可直接当作纹理材质使用边缘色彩及边缘纹理材质。
前景缓冲区及背景缓冲区是指在存储器中存放的区块,事实上两者并没有什
么不同,虽然两者都是存放在存储器的画面,但是在某一个时间点上只能看得到
一个画面,因此,不管何时,看得见的画面就叫做前景缓冲区,看不见的就叫做
背景缓冲区。看得见的意思就是指一个指定的存储器位置可被显示出来,所以画
面会随着切换前景缓冲区及背景缓冲区而自动切换,而这个动作就称为翻页
(Flip),即把看得见的存储器位置换成另一个存储器的位置。不过在窗口模式时,
「切换」的动作必须由程序本身来控制。窗口模式的切换动作,通常是由背景缓
冲区画好后传送至前景缓冲区,所以此时的背景缓冲区和前景缓冲区并不会实际
做切换的动作,只是将背景缓冲区的画面传送至前景缓冲区。
另一种可达到同样效果的方法为将整块区域搬移(block blitting),其中
以切换的效果较好且较为常用。
三度空间计算机绘图是为了仿真出真实世界的物体,利用许多复杂的算法或
模型来仿真真实物体在三度空间中的状况,使得三度空间的物体可以投射并显现
在二度空间平面的屏幕上。以下简述如何将三度空间动画场景显示于计算机屏幕
上。
首先,建立物体模型(Modeling),以点、线、面描述一个物体的外观,建
立此物体的模型数据,通常以(X,Y,Z)三度空间的坐标来表示,接着利用线性
代数运算,可以将这个物体放大缩小、移动和变形等等。图1A~1E是显示产生三
度空间动画效果的示意图。将三度空间场景中的三度空间对象(object)的顶点
数据(VerteX data),包含坐标(X,Y,Z)、颜色(RGBA)、材质(texture)
坐标(U,V)等,经过转换及打光(transform and lighting)、视野接口剪裁
及缩放(View port clipping and scaling)的过程,转换至屏幕空间(screen
space)的坐标(Xs,Ys,Zs)〔(Xs,Ys)表示屏幕坐标,Zs表示景深〕和已
打光的颜色(lighted color)RsGsBsAs(如图1A所示)。根据每个顶点的屏幕
空间坐标(Xs,Ys,Zs)产生每个像素(pixel)的屏幕空间坐标(Xp,Yp,Zp)
(如图1B所示),然后根据每个顶点已打光的颜色(RsGsBsAs)产生每个像素的
颜色(RpGpBpAp)(如图1C所示),再根据(U,V)坐标并利用材质贴图方法(texture
mapping)取得材质上的颜色(RtGtBtAt),并将(RpGpBpAp)和(RtGtBtAt)经
过混色运算(blending operation)产生对象的颜色(RoGoBoAo)(如图1D所示)。
经过上述步骤,将对象的颜色(RoGoBoAo)和目前显示缓冲区的颜色(RdGdBdAd)
经过混色运算后产生最终的颜色(RfGfBfAf)(如图1E所示),然后将(RfGfBfAf)
绘制至(Xp,Yp)位置。重复上述步骤即可产生整个三度空间场景。
实时视讯串流(real time Video stream)通常通过摄影机,经由信号线连
接到视讯卡,或者由网络上直接传送至网络卡而取得,然后藉由视讯播放应用程
序(video playback application)呼叫操作系统提供的应用程序接口(API,
Application programming Interface)和函式库(library),将实时视讯串流
显示在计算机屏幕上。
目前的三度空间动画游戏为了视觉效果,通常以全屏幕显示,即独位整个屏
幕画面,使得其它应用程序(包含视讯播放应用程序)无法显示其内容,因此无
法在三度空间场景中同时显示视讯串流。现有的解决方法是利用一外接视讯混合
器,将计算机传输到屏幕的信号直接与视讯信号混合,但该方法无法处理网络上
的视讯串流。
(5)具体实施方式
本发明是提供一种实时视讯串流显示于三度空间场景的处理方法,利用
三度空间动画程序在绘制完整个场景时,会呼叫系统提供的API使其内容显
示在屏幕上的特性,结合视讯串流产生的画面数据,并利用三度空间材质贴
图方法将视讯串流的画面绘制在三度空间动画场景中,通过视讯播放应用程
序不断地接收视讯源的数据更新视讯画面,以及三度空间动画游戏进行时不
断更新画面的效果,以实现在三度空间场景中显示实时视讯串流的目的。
图2是显示本发明的三度空间动画程序与视讯播放应用程序藉由共享存
储器传递数据的示意图。三度空间动画程序和视讯播放应用程序为各自独立
的应用程序,无法直接存取彼此的资源,必须通过共享存储器传递视讯数据,
并且于三度空间动画场景中产生一视讯窗口以显示视讯数据。
图3是显示本发明的实时视讯串流显示于三度空间场景的处理系统架构
图,其包括一视讯播放应用程序模块1以及一三度空间动画程序模块2,其中
视讯播放应用程序模块1还包括一视讯撷取单元100,三度空间动画程序模块
2还包括一视讯处理单元200、一视讯绘制单元300以及一视讯显示单元400。
视讯撷取单元100用以自视讯源(video source)取得视讯画面,且当执行
三度空间动画场景的一三度空间应用程序正在执行时,将视讯画面储存至共
享存储器中。视讯处理单元200用以在三度空间动画场景完成绘制到背景缓
冲区后,将储存于共享存储器中的视讯画面加载至视讯存储器。视讯绘制单
元300用以在更新三度空间动画场景时,同时绘制视讯窗口对象及视讯画面
于背景缓冲区中。视讯显示单元400用以将视讯画面藉由视讯窗口对象显示
于三度空间动画场景中。视讯撷取单元100从视讯源10接收视讯画面15,当
三度空间动画游戏正在进行(独占整个画面)时,自动将视讯画面15复制到
共享存储器150中,并且通知计算机系统必须更新视讯数据。视讯处理单元200
于三度空间动画游戏完成绘制整个场景到背景缓冲区后,将共享存储器150
中的视讯画面15加载到视讯存储器(Video memory)250以做为材质。视讯
绘制单元300在三度空间场景中产生一个视讯窗口对象330,用以显示视讯画
面15,再利用三度空间材质贴图方法将材质(视讯画面)及视讯窗口对象330
绘制到背景缓冲区350中,最后视讯画面15通过视讯显示单元400随着计算
机系统API被呼叫(执行切换的动作)而显示在视讯窗口对象330上。
因为三度空间动画程序和视讯播放应用程序为各自独立的应用程序,无
法直接存取彼此的资源,所以必须通过共享存储器传递视讯数据,以下简述
视讯播放程序及三度空间动画程序如何通过共享存储器传递视讯数据。
图4是显示本发明的视讯播放程序取得视讯画面的流程图。
在步骤S11中,取得共享存储器地址。首先,必须先定义出共享存储器
的地址以供视讯播放程序取用。
在步骤S12中,判断是否有新的视讯画面产生。通过视讯播放程序判断
视讯源是否产生新的视讯画面,若是,则继续步骤S13,否则跳至步骤S15。
在步骤S13中,判断三度空间动画程序是否正在执行。若视讯源产生新
的视讯画面,则藉由计算机系统判断三度空间动画程序是否正在执行,若是,
则继续步骤S14,否则跳至步骤S15。
在步骤S14中,复制视讯画面至共享存储器。若三度空间动画程序正在
执行,则将视讯画面复制到共享存储器,并且还设定一视讯画面更新指针,
以判定共享存储器中是否有视讯画面,若视讯画面更新指针为1时,表示共
享存储器中有视讯画面,若视讯画面更新指针为0表示没有。
在步骤S15中,判断是否结束视讯播放应用程序。若视讯源已无新的视
讯画面产生,则结束视讯播放程序,否则跳至步骤S12,继续执行本步骤流程。
图5是显示本发明的实时视讯串流显示于三度空间场景的处理方法流程
图。
在步骤S21中,设定视讯窗口的顶点数据,以决定视讯窗口的大小及位
置。首先设定欲在三度空间动画场景中显示的视讯窗口的顶点数据,以决定
视讯窗口的大小及位置。值得注意的是,本步骤S21是为一选择性步骤,因
视讯窗口的大小及位置可设为默认值或固定值,这样便不需要重新设定视讯
窗口的顶点数据。
在步骤S22中,取得共享存储器地址。定义出共享存储器的地址以供三
度空间动画程序取用。
在步骤S23中,判断三度空间动画的更新画面是否完成绘制。藉由三度
空间动画程序判断一更新画面是否完成绘制到一背景缓冲区中。通过计算机
系统取得绘制更新画面的原有第一驱动程序及其子程序,藉由一第二驱动程
序,将第一驱动程序加载计算机系统的存储器,以取得第一驱动程序的子程
序的进入点(entry point),向计算机系统注册第二驱动程序以取代第一驱
动程序,并且利用第二驱动程序判断三度空间动画的更新画面是否绘制完成。
若是,则继续步骤S24,否则跳至步骤S27。
在步骤S24中,检查共享存储器中是否有视讯画面。三度空间动画程序
通过前述的视讯画面更新指针,判断共享存储器中是否储存视讯画面。若无,
则跳至步骤S251,否则跳至步骤252。
在步骤S251中,绘制视讯窗口于缓冲存储器中。若共享存储器中无视讯
画面,则将视讯窗口绘制到缓冲存储器中。
在步骤S252中,将视讯画面加载至视讯存储器。若共享存储器中有视讯
画面,则将视讯画面加载至三度空间绘图卡的视讯存储器中,然后将视讯窗
口及视讯画面加入更新画面中,并且设定视讯画面更新指针为0。
在步骤S26中,于三度空间动画场景中显示更新画面。通过「切换」的
动作,将背景缓冲区中包含视讯窗口及视讯画面的更新画面显示于三度空间
动画场景中。
在步骤S27中,判断是否结束三度空间动画程序。选择继续执行三度空
间动画程序,或者跳至步骤S23,继续执行本步骤流程。
本发明提供一个简单且有效的处理机制,于三度空间动画游戏进行且独
占整个计算机屏幕的情况下,利用共享存储器及三度空间材质贴图方法,将
正在背景执行的视讯播放应用程序的内容显示于三度空间动画场景中。
虽然本发明已以较佳实施例揭示如上,然而其并非用以限定本发明,任
何熟习本技术的人员在不脱离本发明的精神和范围内,当可作各种的等效更
动与替换,因此本发明的保护范围当视后附的权利要求所界定的为准。