摘要:佩珀尔幻象是虚拟现实的一种实现手段。而OpenGL是一种用于渲染二维、三维图形的应用程序接口。介绍佩珀尔幻象的实现原理,并给出一个利用OpenGL强大的三维渲染能力来实现佩珀尔幻象的方案。不仅从硬件角度介绍该方案的光路设计,还将从软件角度详细阐述如何正确运用OpenGL对虚拟影像进行建模。最后还会展示一个实例的效果:地球的动态虚拟影像。
关键词:佩珀尔幻象;OpenGL;虚拟现实
中图分类号:TN873
文献标识码:A
文章编号:1009-3044(2020)05-0102-03
开放科学(资源服务)标识码(OSID):
佩珀尔幻象(Pepper's Ghost)是一种光学错觉技术,由Hen-ry Dircks发明。19世纪的英国人约翰·佩珀尔(John Pepper)第一次向观众展示了这一技术,此技术因而被命名为佩珀尔幻象[1]。
虚拟现实产业被认为将在不久的将来成为中国经济乃至世界经济的主要增长点之一[2]。国内外众多实力雄厚的IT企业纷纷参与到此类产品的研发中。2010年3月9日,日本世嘉公司主办了名为“未來之日39感谢祭”的演唱会。主办方利用佩珀尔幻象技术将一个虚拟的动漫人物一初音未来一以全息投影的形式投放到舞台上。这场演唱会使得初音未来成为世界上第一个利用全息投影技术举办演唱会的虚拟偶像[3]。在此之后,佩珀尔幻象多次被应用于大型的政治集会、艺术汇演等场合中,用来呈现虚拟现实的效果。佩珀尔幻象的实现成本低廉,且技术门槛低,所以成为许多IT企业实现虚拟现实效果的捷径。
本文将给出一个实例,介绍如何通过佩珀尔幻象技术实现地球的三维动态虚拟影像。
1 原理
图1展示了佩珀尔幻象装置的基本构造,由4部分构成:展台、观众席、反射界面、光源。观众席正对展台,而反射界面与展台面成45度角放置。光源置于展台上。光源经过反射界面镜面成像,使得观众产生错觉,误以为反射界面后方的虚像是实在的物体。
图l所示的装置仅能让观众通过反射界面看到虚像一光源发出的光线被反射界面反射后,进入观众的眼睛,才能让观众看到虚像。而一旦观众的位置到了反射界面的后面,反射光线就不可能进入观众眼睛,观众也就看不到虚像。为了实现地球的三维动态影像效果,观众不论坐在那个位置,都应能够看到虚像。所以应将反射界面设计成如图2所示的倒漏斗形。漏斗的每个侧面的下方都是地球在某一个方向的投影像。不论观众从漏斗的哪个侧面观察,都应看到地球在对应方向的虚像。
2 实现
2.1 硬件设计
准备4块Imm厚的有机玻璃片,裁剪为如图3所示的4个梯形。梯形的上底宽度为30mm,下底宽度为180mm,高105mm:
利用透明胶带将这4块梯形粘接成如图2所示的方形漏斗的形状。不难算出,漏斗的每个侧面与底面的夹角都是45度。
2.2 软件设计
正如第2节所述,只有在倒立漏斗的四个侧面下方各自显示一个地球的侧面像,才能保证观众从任一侧面都能观察到地球的虚拟影像。为了实现此效果,我们需要一台计算机。计算机的屏幕水平放置,充当图1中展台的角色。另外应设计一个显示软件。软件运行后,一个窗口出现在屏幕中央。窗口被划分为3行3列9个单元。窗口正上方的单元、正下方的单元和正左方、正右方的单元分别显示地球的四个侧面的投影(分别对应图4的2,4,6,8区域)。将方形漏斗的窄头朝下,放置到计算机屏幕上。则4个投影分别被四个侧面反射。观众从4个方向观察,会看到地球在4个方向的不同地貌,仿佛在观察一个立体的地球一样。
屏幕水平放置,其窗体被分成9个单元(黑色区域);漏斗倒立放置于屏幕之上(蓝色示意线),且漏斗的底部与窗体的5号区域重合。假如窗体的2,4,6,8区域分别显示地球四个侧面的投影,则观众可以透过漏斗观察到地球的虚像。
图5展示了2个球和一个平面镜,镜面的下方是一个实物球,实物球经镜面反射就产生了镜面上方的虚像。在本文的设计中,我们要在没有实物球,也没有镜面的条件下仍然能获得虚像。为了这个目的,我们首先利用OpenGL构建一个假想的实物球,然后将这个实物球的四个侧面分别显示在图5平面的2,4,6,8区域,则漏斗的4个侧面仍然能分别对这4个区域的图像反射成像。这样的效果与图5示意的虚像的效果基本一致。
软件源代码可以在GitHub上阅读[4]。源代码分为以下6部分:l)OpenGL不能绘制完美的球体,只能用多面体来近似球体。故球体被剖分为18 x 36份:沿纬线圈方向剖分成18等份,沿经线圈方向剖分成36等份。剖分之后,相邻的任两条纬线和相邻的任两条经线相交,产生4个交点。4个交点构成一个四边形,一共产生648个四边形。OpenGL绘制的是这648个四边形围成的多面体。2)为了能将7大洲4大洋显示出来,在绘制球体的同时,还应向球体表面贴上纹理。故源代码中引入成员变量m_pTextures存储纹理。3)利用OpenGL构建假想的实物球时,还应考虑到实物球与虚像互为镜面对称的关系,如图6所示,假如一方的表面有”G”图案,则另一方的对应图案是反写的”G”。故向假想的实物球贴的纹理不应是世界地图,而应是反写的世界地图。4)paintGLO函数中调用了QMatrix4x4::100-kAt0函数,来获取假想的实物球在某一方向的投影。5)paintGL()函数调用了glViewport0函数,将某一方向的投影显示在对应的屏幕区域(图5所示2,4,6,8中的对应区域)。6)程序中调用函数OnTimer0和QMatrix4x4::rotate0实现地球转动的效果。
3 效果
程序运行在一台12.3英寸的Surface Pro平板电脑上。平板电脑水平放置。程序启动后,一个窗口出现在屏幕中央。窗口被划分为3行3列9个单元。窗口正上方的单元、正下方的单元和正左方、正右方的单元分别显示地球的四个侧面的投影。将方形漏斗的窄头朝下,放置到平板电脑上。由于窗口的宽度是梯形上底宽度的3倍,漏斗的窄头刚好可以覆盖窗口正中央的正方形单元。此时从侧面观察方形漏斗,可以观察到自转的地球(图7)[5]。
Surface Pro水平放置,地球从四个方向的投影显示在屏幕的四個4块不同的区域内。漏斗置于Surface Pro之上,图的中央显示的是经漏斗侧面反射的虚像。
4 结束语
本文以地球的佩珀尔幻象为案例,从硬件设计和软件设计两方面做了详细介绍。其中,不仅提供了软件的源代码,还详细介绍了如何正确运用OpenGL来一步步实现对地球的渲染。故本文对于有志于学习OpenGL,以及有志于研究佩珀尔幻象技术的技术人员,都有参考价值。
参考文献:
[1] Beth A.KATTLEMAN. Spectres and Spectators: The Poly-Technologies of the Pepper's Ghost Illusion[Cl//KARA REIL-LY. Theatre, Performance and Analogue Technology. London:Palgrave Macmillan, 2013:198-213.
[2]吴晓波.四大红利重新定义2017[EB/OL]. http://www.kan-shangj ie.com/article/9 17 80- l.html.
[3]百度百科.初音未来[EB/OL]. https://baike. baidu.com/item/o-/。E5%880-/09D% Ego-/09F% B30-/oE60-/09Co-/o AAo-/o E60-/09Do-/o A5/8231955.
[4]李季.Pepper-s-Ghost——spinning-Earth[EB/OL]. https://github.com/suncezhouyu/Peppers- Ghost-spinning-Earth.
[5]李季.佩珀耳幻象一虚拟地球影像I[EB/OL]. https://v.youku.com/v_show/id_XNDE5NjgzNDk2MA==. html? spm=a2hOj. 11185381.listitem_pagel.5 !2-A.
【通联编辑:唐一东】
收稿日期:2019 -11-15
作者简介:李季(1983-),男,山东潍坊人,中国电子科技集团公司第三十八研究所工程师,硕士,研究方向为显示软件的开发。