本發(fā)明涉及一種在三維場(chǎng)景中任意位置生成全景圖的方法。
背景技術(shù):
全景圖通過廣角的表現(xiàn)手段以及繪畫、相片、視頻、三維模型等形式,盡可能多表現(xiàn)出周圍的環(huán)境,從而使人產(chǎn)生一定沉浸感。
全景圖相對(duì)于三維場(chǎng)景可執(zhí)行文件,具有占用空間小、多平臺(tái)支持及傳播廣等優(yōu)點(diǎn),現(xiàn)在市面上已有的全景圖產(chǎn)生方式主要有兩種:一種是通過多鏡頭或單鏡頭多方向?qū)嵟?,根?jù)特征點(diǎn)將多張圖片縫合成一張,但這種方法不適用于虛擬三維場(chǎng)景;第二種是通過類似3dmax這類軟件進(jìn)行渲染,將整個(gè)空間上的點(diǎn)映射到一張全景圖中,但渲染過程復(fù)雜、對(duì)渲染設(shè)備的要求高,耗時(shí)長(zhǎng),往往需要等待數(shù)小時(shí)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)的不足,提供一種在三維場(chǎng)景中任意位置生成全景圖的方法。
為實(shí)現(xiàn)上述目的,本發(fā)明采用以下技術(shù)方案:
一種在三維場(chǎng)景中任意位置生成全景圖的方法,包括以下步驟:
s1、在三維場(chǎng)景中創(chuàng)建虛擬相機(jī),并以虛擬相機(jī)所在點(diǎn)o為中心點(diǎn)建立右手坐標(biāo)系o-xyz,將虛擬相機(jī)水平與垂直方向的視場(chǎng)角度設(shè)置為90°,方向朝向-z軸,并保持俯仰角和翻滾角為0°;
s2、設(shè)定渲染圖片的形狀為正方形,其邊長(zhǎng)為w,將虛擬相機(jī)分別朝向-z、-x、+z、+x、+y以及-y方向各渲染一張圖片,以獲得當(dāng)前位置的六視圖;
s3、以虛擬相機(jī)所在點(diǎn)o為中心,分別建立球體與立方體,設(shè)定球體半徑為1,立方體邊長(zhǎng)為2,立方體的各邊平行于x、y、z軸;
s4、計(jì)算球面任意點(diǎn)p的坐標(biāo),根據(jù)球面任意點(diǎn)p的坐標(biāo)計(jì)算連線op與立方體相交點(diǎn)pc的坐標(biāo);
s5、設(shè)定所需全景圖的寬度與高度,將全景圖上的像素點(diǎn)一一映射到球面坐標(biāo)系中,獲得全景圖像素點(diǎn)在球面坐標(biāo)系的映射坐標(biāo);
s6、在w*h個(gè)像素點(diǎn)的全景圖中,對(duì)每個(gè)像素點(diǎn)p按寬度、高度方向分別循環(huán),根據(jù)全景圖到球面坐標(biāo)系中的映射坐標(biāo)以及pc點(diǎn)的坐標(biāo)確定對(duì)應(yīng)的采樣圖及采樣坐標(biāo);根據(jù)采樣坐標(biāo)所對(duì)應(yīng)的點(diǎn)在采樣圖中的顏色確定全景圖中像素點(diǎn)p的顏色,獲得所需全景圖。
進(jìn)一步地,步驟s4中,令連線op與yoz平面的夾角為θ,圍繞y軸順時(shí)針方向旋轉(zhuǎn)為正向;令連線op與xoz平面夾角為
進(jìn)一步地,步驟s4中,球面任意點(diǎn)p(xp,yp,zp)在平面xoz中的投影為b,連線ob交球面于點(diǎn)a,設(shè)m、n為oz軸上的點(diǎn),連線am及bn平行于x軸,則由
opc與op共線,則有
球面任意點(diǎn)p的坐標(biāo)及相交點(diǎn)pc的坐標(biāo)根據(jù)其在坐標(biāo)系o-xyz中的位置取正負(fù)值。
進(jìn)一步地,步驟s5中,設(shè)定所需全景圖的寬度為w,高度為h,則全景圖上任意一點(diǎn)p(x,y)在球面坐標(biāo)系的坐標(biāo)值為
進(jìn)一步地,步驟s6中,各采樣圖及其采樣坐標(biāo)的確定方式如下,
當(dāng)
當(dāng)
當(dāng)
當(dāng)
當(dāng)
當(dāng)
進(jìn)一步地,步驟s6中,采樣坐標(biāo)所對(duì)應(yīng)的點(diǎn)正好位于采樣圖的像素點(diǎn)q上時(shí),像素點(diǎn)p取該像素點(diǎn)q的顏色,否則,取采樣坐標(biāo)對(duì)應(yīng)點(diǎn)的鄰域插值顏色或最鄰近點(diǎn)顏色。
采用上述技術(shù)方案后,本發(fā)明與背景技術(shù)相比,具有如下優(yōu)點(diǎn):不依賴于渲染方法或系統(tǒng),僅通過規(guī)范化參數(shù)的虛擬相機(jī)渲染前、后、左、右、頂部及底部六張貼圖(環(huán)境映射),無需復(fù)雜的特征提取、識(shí)別與縫合,直接經(jīng)過立方體空間到球形空間的映射,即可在三維場(chǎng)景的任意位置快速(普通pc端,數(shù)秒內(nèi))生成高質(zhì)量的全景圖。本發(fā)明不僅適用于實(shí)時(shí)渲染,在離線渲染時(shí),同樣適用。
附圖說明
圖1為本發(fā)明建模示意圖;
圖2為本發(fā)明虛擬相機(jī)所渲染的六視圖,其中,圖2a為朝-z方向渲染的前視圖,圖2b為朝-x方向渲染的左視圖;圖2c為朝+z方向渲染的后視圖;圖2d為朝+x方向渲染的右視圖;圖2e為朝+y方向渲染的頂視圖;圖2f為朝-y方向渲染的底視圖;
圖3為寬度為w、高度為h的全景圖在球體上的貼圖展開圖;
圖4為由o點(diǎn)朝+z向看,立方體的頂點(diǎn)坐標(biāo)以及后視圖貼圖坐標(biāo);
圖5為以圖2所渲染的六視圖為輸入獲得的全景圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
實(shí)施例
一種在三維場(chǎng)景中任意位置生成全景圖的方法,包括以下步驟:
s1、如圖1所示,在三維場(chǎng)景中創(chuàng)建虛擬相機(jī),并以虛擬相機(jī)所在點(diǎn)o為中心點(diǎn)建立右手坐標(biāo)系o-xyz,選擇合適的遠(yuǎn)近裁剪,將虛擬相機(jī)水平與垂直方向的視場(chǎng)角度設(shè)置為90°,方向朝向-z軸,并保持俯仰角和翻滾角為0°。
s2、設(shè)定渲染圖片的形狀為正方形,其邊長(zhǎng)為w,將虛擬相機(jī)分別朝向-z、-x、+z、+x、+y以及-y方向各渲染一張圖片,以獲得當(dāng)前位置的六視圖。
首先,朝-z方向渲染一張圖片,得到當(dāng)前位置的前視圖;圍繞y軸逆時(shí)針旋轉(zhuǎn)90度,朝-x方向渲染一張圖片,得到左視圖;圍繞y軸逆時(shí)針再旋轉(zhuǎn)90度,朝+z方向渲染一張圖片,得到后視圖;圍繞y軸逆時(shí)針再旋轉(zhuǎn)90度,朝+x方向渲染一張圖片,得到右視圖;圍繞y軸逆時(shí)針再旋轉(zhuǎn)90度,朝向-z軸,回到初始位置,再圍繞x軸逆時(shí)針旋轉(zhuǎn)90度,朝+y方向渲染一張圖片,得到頂視圖;圍繞x軸逆時(shí)針再旋轉(zhuǎn)180度,朝-y方向渲染一張圖片,得到底視圖,得到的六視圖如圖2所示。
s3、以虛擬相機(jī)所在點(diǎn)o為中心,分別建立球體與立方體,立方體的各邊平行于x、y、z軸。
由于,連線op與立方體的相交點(diǎn)對(duì)應(yīng)在立方體某個(gè)面中的相對(duì)位置(即分別與長(zhǎng)、寬的比率)僅與球面任意點(diǎn)p在坐標(biāo)系中的方向有關(guān),與球體及立方體的大小無關(guān),因此,為便于計(jì)算,設(shè)定球體的半徑為1,立方體邊長(zhǎng)為2。
s4、計(jì)算球面任意點(diǎn)p的坐標(biāo),根據(jù)球面任意點(diǎn)p的坐標(biāo)計(jì)算連線op與立方體相交點(diǎn)pc的坐標(biāo);
由于虛擬相機(jī)默認(rèn)朝向-z軸,如圖1所示,正方形c1c2c3c4為后視圖方向,c5c6c7c8為前視圖方向,為了使前視圖能位于全景圖的正中,且全景圖從左到右環(huán)繞,令連線op與yoz平面的夾角為θ,圍繞y軸順時(shí)針方向旋轉(zhuǎn)為正向;由于虛擬相機(jī)的俯仰角與翻滾角為0,為了使全景圖由上而下平鋪,令連線op與xoz平面夾角為
如圖1所示,球面任意點(diǎn)p(xp,yp,zp)在平面xoz中的投影為b,連線ob交球面于點(diǎn)a,設(shè)m、n為oz軸上的點(diǎn),連線am及bn平行于x軸,則有∠bon為θ,∠pob為
則由
opc與op共線,則有
球面任意點(diǎn)p的坐標(biāo)及相交點(diǎn)pc的坐標(biāo)根據(jù)其在坐標(biāo)系o-xyz中的位置取正負(fù)值。
s5、設(shè)定所需全景圖的寬度和高度,將全景圖上的像素點(diǎn)一一映射到球面坐標(biāo)系中,獲得全景圖像素點(diǎn)在球面坐標(biāo)系的映射坐標(biāo)。
設(shè)定所需全景圖的寬度為w,高度為h,如圖3所示的是全景圖的球形展開,豎直方向?yàn)榻?jīng)線,水平方向?yàn)榫暰€,由橫坐標(biāo)[0,w]->[0,2π],縱坐標(biāo)[0,h]->[+π,-π]的均勻分布一一映射可得,全景圖上任意點(diǎn)p(x,y)到球面坐標(biāo)系
s6、在w*h個(gè)像素點(diǎn)的全景圖中,對(duì)每個(gè)像素點(diǎn)p按寬度、高度方向分別循環(huán),根據(jù)全景圖到球面坐標(biāo)系中的映射坐標(biāo)以及pc點(diǎn)的坐標(biāo)確定對(duì)應(yīng)的采樣圖及采樣坐標(biāo);根據(jù)采樣坐標(biāo)所對(duì)應(yīng)的點(diǎn)在采樣圖中的顏色確定全景圖中像素點(diǎn)p的顏色,獲得所需全景圖。
各采樣圖及其采樣坐標(biāo)的確定方式如下,
當(dāng)
當(dāng)
當(dāng)
當(dāng)
當(dāng)
當(dāng)
采樣坐標(biāo)所對(duì)應(yīng)的點(diǎn)正好位于采樣圖的像素點(diǎn)q上時(shí),像素點(diǎn)p取該像素點(diǎn)q的顏色,否則,取采樣坐標(biāo)對(duì)應(yīng)點(diǎn)的鄰域插值顏色或最鄰近點(diǎn)顏色。
本發(fā)明中生成全景圖片的方法同樣適用于生成全景視頻,只需將生成的多組圖片連接成序列幀即可。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。