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