摘要:佩珀爾幻象是虛擬現(xiàn)實的一種實現(xiàn)手段。而OpenGL是一種用于渲染二維、三維圖形的應(yīng)用程序接口。介紹佩珀爾幻象的實現(xiàn)原理,并給出一個利用OpenGL強(qiáng)大的三維渲染能力來實現(xiàn)佩珀爾幻象的方案。不僅從硬件角度介紹該方案的光路設(shè)計,還將從軟件角度詳細(xì)闡述如何正確運(yùn)用OpenGL對虛擬影像進(jìn)行建模。最后還會展示一個實例的效果:地球的動態(tài)虛擬影像。
關(guān)鍵詞:佩珀爾幻象;OpenGL;虛擬現(xiàn)實
中圖分類號:TN873
文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2020)05-0102-03
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
佩珀爾幻象(Pepper's Ghost)是一種光學(xué)錯覺技術(shù),由Hen-ry Dircks發(fā)明。19世紀(jì)的英國人約翰·佩珀爾(John Pepper)第一次向觀眾展示了這一技術(shù),此技術(shù)因而被命名為佩珀爾幻象[1]。
虛擬現(xiàn)實產(chǎn)業(yè)被認(rèn)為將在不久的將來成為中國經(jīng)濟(jì)乃至世界經(jīng)濟(jì)的主要增長點之一[2]。國內(nèi)外眾多實力雄厚的IT企業(yè)紛紛參與到此類產(chǎn)品的研發(fā)中。2010年3月9日,日本世嘉公司主辦了名為“未來之日39感謝祭”的演唱會。主辦方利用佩珀爾幻象技術(shù)將一個虛擬的動漫人物一初音未來一以全息投影的形式投放到舞臺上。這場演唱會使得初音未來成為世界上第一個利用全息投影技術(shù)舉辦演唱會的虛擬偶像[3]。在此之后,佩珀爾幻象多次被應(yīng)用于大型的政治集會、藝術(shù)匯演等場合中,用來呈現(xiàn)虛擬現(xiàn)實的效果。佩珀爾幻象的實現(xiàn)成本低廉,且技術(shù)門檻低,所以成為許多IT企業(yè)實現(xiàn)虛擬現(xiàn)實效果的捷徑。
本文將給出一個實例,介紹如何通過佩珀爾幻象技術(shù)實現(xiàn)地球的三維動態(tài)虛擬影像。
1 原理
圖1展示了佩珀爾幻象裝置的基本構(gòu)造,由4部分構(gòu)成:展臺、觀眾席、反射界面、光源。觀眾席正對展臺,而反射界面與展臺面成45度角放置。光源置于展臺上。光源經(jīng)過反射界面鏡面成像,使得觀眾產(chǎn)生錯覺,誤以為反射界面后方的虛像是實在的物體。
圖l所示的裝置僅能讓觀眾通過反射界面看到虛像一光源發(fā)出的光線被反射界面反射后,進(jìn)入觀眾的眼睛,才能讓觀眾看到虛像。而一旦觀眾的位置到了反射界面的后面,反射光線就不可能進(jìn)入觀眾眼睛,觀眾也就看不到虛像。為了實現(xiàn)地球的三維動態(tài)影像效果,觀眾不論坐在那個位置,都應(yīng)能夠看到虛像。所以應(yīng)將反射界面設(shè)計成如圖2所示的倒漏斗形。漏斗的每個側(cè)面的下方都是地球在某一個方向的投影像。不論觀眾從漏斗的哪個側(cè)面觀察,都應(yīng)看到地球在對應(yīng)方向的虛像。
2 實現(xiàn)
2.1 硬件設(shè)計
準(zhǔn)備4塊Imm厚的有機(jī)玻璃片,裁剪為如圖3所示的4個梯形。梯形的上底寬度為30mm,下底寬度為180mm,高105mm:
利用透明膠帶將這4塊梯形粘接成如圖2所示的方形漏斗的形狀。不難算出,漏斗的每個側(cè)面與底面的夾角都是45度。
2.2 軟件設(shè)計
正如第2節(jié)所述,只有在倒立漏斗的四個側(cè)面下方各自顯示一個地球的側(cè)面像,才能保證觀眾從任一側(cè)面都能觀察到地球的虛擬影像。為了實現(xiàn)此效果,我們需要一臺計算機(jī)。計算機(jī)的屏幕水平放置,充當(dāng)圖1中展臺的角色。另外應(yīng)設(shè)計一個顯示軟件。軟件運(yùn)行后,一個窗口出現(xiàn)在屏幕中央。窗口被劃分為3行3列9個單元。窗口正上方的單元、正下方的單元和正左方、正右方的單元分別顯示地球的四個側(cè)面的投影(分別對應(yīng)圖4的2,4,6,8區(qū)域)。將方形漏斗的窄頭朝下,放置到計算機(jī)屏幕上。則4個投影分別被四個側(cè)面反射。觀眾從4個方向觀察,會看到地球在4個方向的不同地貌,仿佛在觀察一個立體的地球一樣。
屏幕水平放置,其窗體被分成9個單元(黑色區(qū)域);漏斗倒立放置于屏幕之上(藍(lán)色示意線),且漏斗的底部與窗體的5號區(qū)域重合。假如窗體的2,4,6,8區(qū)域分別顯示地球四個側(cè)面的投影,則觀眾可以透過漏斗觀察到地球的虛像。
圖5展示了2個球和一個平面鏡,鏡面的下方是一個實物球,實物球經(jīng)鏡面反射就產(chǎn)生了鏡面上方的虛像。在本文的設(shè)計中,我們要在沒有實物球,也沒有鏡面的條件下仍然能獲得虛像。為了這個目的,我們首先利用OpenGL構(gòu)建一個假想的實物球,然后將這個實物球的四個側(cè)面分別顯示在圖5平面的2,4,6,8區(qū)域,則漏斗的4個側(cè)面仍然能分別對這4個區(qū)域的圖像反射成像。這樣的效果與圖5示意的虛像的效果基本一致。
軟件源代碼可以在GitHub上閱讀[4]。源代碼分為以下6部分:l)OpenGL不能繪制完美的球體,只能用多面體來近似球體。故球體被剖分為18 x 36份:沿緯線圈方向剖分成18等份,沿經(jīng)線圈方向剖分成36等份。剖分之后,相鄰的任兩條緯線和相鄰的任兩條經(jīng)線相交,產(chǎn)生4個交點。4個交點構(gòu)成一個四邊形,一共產(chǎn)生648個四邊形。OpenGL繪制的是這648個四邊形圍成的多面體。2)為了能將7大洲4大洋顯示出來,在繪制球體的同時,還應(yīng)向球體表面貼上紋理。故源代碼中引入成員變量m_pTextures存儲紋理。3)利用OpenGL構(gòu)建假想的實物球時,還應(yīng)考慮到實物球與虛像互為鏡面對稱的關(guān)系,如圖6所示,假如一方的表面有”G”圖案,則另一方的對應(yīng)圖案是反寫的”G”。故向假想的實物球貼的紋理不應(yīng)是世界地圖,而應(yīng)是反寫的世界地圖。4)paintGLO函數(shù)中調(diào)用了QMatrix4x4::100-kAt0函數(shù),來獲取假想的實物球在某一方向的投影。5)paintGL()函數(shù)調(diào)用了glViewport0函數(shù),將某一方向的投影顯示在對應(yīng)的屏幕區(qū)域(圖5所示2,4,6,8中的對應(yīng)區(qū)域)。6)程序中調(diào)用函數(shù)OnTimer0和QMatrix4x4::rotate0實現(xiàn)地球轉(zhuǎn)動的效果。
3 效果
程序運(yùn)行在一臺12.3英寸的Surface Pro平板電腦上。平板電腦水平放置。程序啟動后,一個窗口出現(xiàn)在屏幕中央。窗口被劃分為3行3列9個單元。窗口正上方的單元、正下方的單元和正左方、正右方的單元分別顯示地球的四個側(cè)面的投影。將方形漏斗的窄頭朝下,放置到平板電腦上。由于窗口的寬度是梯形上底寬度的3倍,漏斗的窄頭剛好可以覆蓋窗口正中央的正方形單元。此時從側(cè)面觀察方形漏斗,可以觀察到自轉(zhuǎn)的地球(圖7)[5]。
Surface Pro水平放置,地球從四個方向的投影顯示在屏幕的四個4塊不同的區(qū)域內(nèi)。漏斗置于Surface Pro之上,圖的中央顯示的是經(jīng)漏斗側(cè)面反射的虛像。
4 結(jié)束語
本文以地球的佩珀爾幻象為案例,從硬件設(shè)計和軟件設(shè)計兩方面做了詳細(xì)介紹。其中,不僅提供了軟件的源代碼,還詳細(xì)介紹了如何正確運(yùn)用OpenGL來一步步實現(xiàn)對地球的渲染。故本文對于有志于學(xué)習(xí)OpenGL,以及有志于研究佩珀爾幻象技術(shù)的技術(shù)人員,都有參考價值。
參考文獻(xiàn):
[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.
【通聯(lián)編輯:唐一東】
收稿日期:2019 -11-15
作者簡介:李季(1983-),男,山東濰坊人,中國電子科技集團(tuán)公司第三十八研究所工程師,碩士,研究方向為顯示軟件的開發(fā)。