專利名稱:平面和球面非線性折射和反射的實(shí)時(shí)光線跟蹤方法
技術(shù)領(lǐng)域:
平面和球面非線性折射和反射的實(shí)時(shí)光線跟蹤方法屬于計(jì)算機(jī)圖形技術(shù)領(lǐng)域。
1996年,M.Levoy和P.Hanrahan.等人在SIGGRAPH上發(fā)表論文,提出了用4維光場(chǎng)來(lái)實(shí)現(xiàn)圖形、圖像的繪制的方法。在預(yù)處理中用多維光場(chǎng)計(jì)算圖像的映像,然后當(dāng)實(shí)時(shí)顯示時(shí),在每一幀中重新使用映像結(jié)果。但光場(chǎng)方法中仍有圖像信息存儲(chǔ)、走樣和快速查找等問(wèn)題有待進(jìn)一步解決。
視點(diǎn)無(wú)關(guān)的環(huán)境映射的方法是W.Heidrich等人在1998年提出來(lái)的。利用環(huán)境映射,通過(guò)硬件的支持來(lái)實(shí)現(xiàn)真實(shí)感圖形的顯示,能達(dá)到交互的速率,但是卻不能達(dá)到實(shí)時(shí)。它一般多用于處理反射現(xiàn)象,并且常常存在明顯的誤差。
1998年Ofek和Rappoport提出了利用反射虛物體和擴(kuò)張映射(explosion map)來(lái)實(shí)現(xiàn)曲面反射的光線跟蹤效果,它針對(duì)反射體將所有可能處在反射區(qū)域內(nèi)的頂點(diǎn)進(jìn)行變換,生成虛物體,然后同真實(shí)物體一樣進(jìn)行統(tǒng)一處理;但是他們不能處理折射問(wèn)題,且擴(kuò)張映射的誤差較大,在遞歸過(guò)程中誤差的累積和傳播十分嚴(yán)重,生成的結(jié)果圖像質(zhì)量不高。雖然他們采用插值方法加以改進(jìn),但效果有限,卻增加了不少計(jì)算量。
目前有許多交互式圖形系統(tǒng)利用硬件,每秒鐘能處理大量的三維面片,但基本上都只能提供深度緩存(Z-Buffer)算法的繪制效果,不能處理反射和折射場(chǎng)景的實(shí)時(shí)真實(shí)感圖形問(wèn)題。
本發(fā)明的特征在于對(duì)于被折射或反射的多面體,首先計(jì)算出該多面體各個(gè)頂點(diǎn)的虛頂點(diǎn),然后根據(jù)該多面體原有的點(diǎn)和面之間的拓?fù)潢P(guān)系依次把所有虛頂點(diǎn)連接成由許多虛面構(gòu)成且最終形成反射或折射的光學(xué)映射虛物體,簡(jiǎn)稱為虛物體;在顯示圖形時(shí),把該虛物體用遞歸算法遞歸地投射到反射或折射表面上,從而得到與光線跟蹤類似的圖像效果;其中,虛頂點(diǎn)P′可表達(dá)為P′=V+lB-V|B-V|,]]>其中V為視點(diǎn),l為光線L經(jīng)過(guò)折射或反射到達(dá)與該虛頂點(diǎn)對(duì)應(yīng)的一個(gè)場(chǎng)景中的點(diǎn)P時(shí)所經(jīng)過(guò)的路徑的長(zhǎng)度總和;B為投影平面上的一個(gè)采樣點(diǎn)。
對(duì)于場(chǎng)景在折射體外的平面折射體而言,它依次含有如下步驟(1)計(jì)算各虛頂點(diǎn)P′P′=V+lI1-V|I1-V|;]]>l=|V-I1|+|I1-I2|+|I2-P|,I1=Q+dU-Q|U-Q|,]]>Q=V-w1N,U=V-C3+CTVCT(P-V)(P-V),]]>其中,l為光線經(jīng)過(guò)折射到達(dá)場(chǎng)景中的點(diǎn)P時(shí)所經(jīng)過(guò)的路徑的長(zhǎng)度總和;w1為視點(diǎn)V與折射體的水平距離;d為點(diǎn)I1與視點(diǎn)V的垂直距離;Q為折射體入射面下端與視點(diǎn)V處于同一個(gè)水平位置上的一點(diǎn);U為線VP與折射體入射面的交點(diǎn),折射體入射面的方程設(shè)為C0x+C1y+C2z+C3=0,并記C=(C0,C1,C2)T;I1、I2分別為光線L與平面折射體投影平面即入、出兩個(gè)折射面的交點(diǎn),N為點(diǎn)I1處的單位法向矢量。
對(duì)于場(chǎng)景在折射體內(nèi)的平面折射體而言,它依次含有如下步驟(1)計(jì)算各虛頂點(diǎn)P′P′=V+lI-V|I-V|;]]>l=|V-I|+|I-P|,I=Q+dU-Q|U-Q|,]]>Q=V-w1N,U=V-C3+CTVCT(P-V)(P-V),]]>其中,I為光線L與平面折射體的入射面的交點(diǎn),該入射面的方程設(shè)為C0x+C1y+C2z+C3=0,并記C=(C0,C1,C2)T;N為點(diǎn)I處的單位法向矢量;d為點(diǎn)I1與視點(diǎn)V的垂直距離;Q為折射體入射面下端與視點(diǎn)V處于同一個(gè)水平位置上的一點(diǎn);U為線VP與折射體入射面的交點(diǎn);對(duì)于折射面相互垂直的三維平面折射而言,它依次含有如下步驟(1)計(jì)算各虛頂點(diǎn)P′P′=V+dI1-V|I1-V|;]]>d=|V-I1|+|I1-I2|+|I2-P|,I1=V+dx+dy+dz,dx=xex,dy=y(tǒng)ey,dz=zez,ey=N2,ez=-N1,ey叉乘ez再單位化得到ex,其中,P是場(chǎng)景中即物體上的點(diǎn),V是視點(diǎn),N1是入射面外法向量,N2是出射面外法向量,入射面與出射面垂直,N1、N2是單位向量,ex,ey,ez是局部坐標(biāo)系下的基,x,y,z是局部坐標(biāo)系下的坐標(biāo),dx,dy,dz是I1點(diǎn)相對(duì)于視點(diǎn)的偏移量;I2=I1-N1C1-x2+y2η2(x2+y2+z2)-e^Cx2+y2ηx2+y2+z2,]]>其中,e^=V-I1-N1[(V-I1)·N1]|V-I1-N1[(V-I1)·N1]|,C=η(a-y)yx2+y2+z2,]]>η是三維折射體的折射率,α為視點(diǎn)到折射體出射面的垂直距離。對(duì)于球面反射體而言,它依次含有如下步驟(1)計(jì)算各虛頂點(diǎn)P′P′=V+(x+y)I-V|I-V|,]]>I為光線L照到球面時(shí)的反射點(diǎn),它可表達(dá)為I=T·LI,其中,LI=[LIx,LIy,Pz,1]T,它是球面上點(diǎn)I在局部坐標(biāo)系下的坐標(biāo);;T為從局部坐標(biāo)系到世界坐標(biāo)系的變換矩陣T=uxvxwx0uyvywy0uzvzwz00001,]]>
其中wx=Nx,wy=Ny,wz=Nz;N=(Nx,Ny,Nz)T為視點(diǎn)V、球面的球心O和場(chǎng)景中的點(diǎn)P組成的平面VPO的法向量;以O(shè)為原點(diǎn),以N為z軸,以O(shè)P為y軸,以O(shè)P×N為x軸,建立局部坐標(biāo)系;ux=vywz-wyvz,uy=wxvz-vxwz,uz=vxwy-wxvy;vx、vy和vz分別是單位矢量(P-O)/|P-O|的三個(gè)坐標(biāo)分量;x,y分別為球面上的點(diǎn)I到視點(diǎn)V和場(chǎng)景中的點(diǎn)P之間的距離x=|V-I|,y=|I-P|;應(yīng)用公式I=T·LI便可把LI局部坐標(biāo)系變換為世界坐標(biāo)系。
對(duì)于球面折射體而言,它依次含有如下步驟(1)計(jì)算各虛頂點(diǎn)P′P′=V+(x+|I1-I2|+y)I1-V|I1-V|,]]>其中,I1、I2分別是光線射到球面折射體的入射點(diǎn)和出射點(diǎn),用公式I=T·LI,把I1、I2的局部坐標(biāo)變換成世界坐標(biāo)系的坐標(biāo);x,y分別為視點(diǎn)V到入射點(diǎn)I1,以及出射點(diǎn)I2到場(chǎng)景中的一點(diǎn)P的距離,即x=|V-I1|,y=|I2-P|;T為從局部坐標(biāo)系到世界坐標(biāo)系的變換矩陣T=uxvxwx0uyvywy0uzvzwz00001,]]>其中,ux=vywz-wyvz,uy=wxvz-vxwz,uz=vxwy-wxvy;vx、vy和vz分別是單位矢量(P-O)/|P-O|的三個(gè)坐標(biāo)分量;wx=Nx,wy=Ny,wz=Nz;N=(Nx,Ny,N2)T為視點(diǎn)V、球面的球心O和場(chǎng)景中的點(diǎn)P組成的平面VPO的法向量;以O(shè)為坐標(biāo)原點(diǎn),以N為z軸,以O(shè)P為y軸,以O(shè)P×N為x軸,建立局部坐標(biāo)系;所述的用遞歸算法來(lái)顯示圖形的過(guò)程,含有如下步驟算法1預(yù)處理第1步,對(duì)場(chǎng)景中的物體構(gòu)造二叉空間剖分(BSP)樹(shù),如果場(chǎng)景中含有球形反射或折射體,則用緊密包容該球的正方體的6個(gè)面代替該球參與構(gòu)造BSP樹(shù);第2步,收集場(chǎng)景中各種反射和折射體,并形成反射和折射體對(duì)象表;第3步,根據(jù)當(dāng)前的視點(diǎn),確定反射、折射體表中的各反射、折射體的先后順序;由于BSP樹(shù)與視點(diǎn)無(wú)關(guān),因而能很快的得到反射、折射體的順序;第4步,計(jì)算虛頂點(diǎn)并生成所有的虛物體,產(chǎn)生虛場(chǎng)景;算法2為折射體或反射體產(chǎn)生虛場(chǎng)景i)是否到達(dá)最大的遞歸層次?是則返回;
ii)如果為反射體,計(jì)算反射虛場(chǎng)景;如果為折射體,計(jì)算折射虛場(chǎng)景;iii)根據(jù)視點(diǎn)對(duì)虛場(chǎng)景中的反射和折射體進(jìn)行排序;iv)如果虛場(chǎng)景中還存在反射或折射體,則對(duì)虛場(chǎng)景中的反射、折射體遞歸調(diào)用本算法,轉(zhuǎn)i);否則轉(zhuǎn)v);v)返回;算法2有以下特點(diǎn)(1)上面的算法是一個(gè)遞歸算法,遞歸主要是針對(duì)場(chǎng)景中的反射、折射體進(jìn)行的;(2)對(duì)于反射體和折射體是統(tǒng)一處理的;(3)對(duì)于反射體,生成虛場(chǎng)景使用的是反射公式,對(duì)應(yīng)的面片的頂點(diǎn)順序要改變,即反射虛物體面片的頂點(diǎn)順序與原來(lái)的順序相反,以便確保平面的外法矢指向正確的方向;(4)在任一虛場(chǎng)景中,都要根據(jù)視點(diǎn)和BSP樹(shù)重新確定其中的反射和折射體的順序,以便后面能夠正確地實(shí)時(shí)顯示;(5)如果場(chǎng)景中的反射或折射體的個(gè)數(shù)大于1算法的終止條件是遞歸深度不大于所給定的最大遞歸深度值;如果視點(diǎn)發(fā)生變化,對(duì)于純反射虛場(chǎng)景,是不用重算的;但對(duì)于任意一個(gè)折射體及其以后的遞歸過(guò)程中出現(xiàn)的虛場(chǎng)景必須重新計(jì)算;下面是視點(diǎn)發(fā)生變化時(shí)重新計(jì)算虛場(chǎng)景的算法算法3視點(diǎn)位置改變時(shí)重新計(jì)算虛場(chǎng)景i)是否是折射體?ii)是,調(diào)用算法2;iii)否則,則遞歸調(diào)用本算法;要實(shí)現(xiàn)實(shí)時(shí)繪制場(chǎng)景,可以采用支持OpenGL編程(OpenGL-compatible)的三維圖形加速卡進(jìn)行硬件加速的辦法;這時(shí),我們要用到圖形硬件的軟件接口——OpenGL圖形系統(tǒng);前面的虛物體的生成,為我們實(shí)時(shí)繪制打下了基礎(chǔ);下面是我們使用的實(shí)時(shí)繪制算法;算法4實(shí)時(shí)繪制和顯示(本算法是針對(duì)真實(shí)場(chǎng)景中的某個(gè)反射體或折射體的)x)設(shè)置OpenGL的繪制參數(shù)(禁止顏色緩存寫(xiě),禁止深度緩存寫(xiě),禁止深度比較,禁止使用Alpha混合,使所繪制的模版緩沖區(qū)的值+1);xi)繪制反射、折射體本身;xii)如果其虛場(chǎng)景中含有反射或折射體,則轉(zhuǎn)i),遞歸地繪制虛場(chǎng)景中的反射、折射體;xiii)設(shè)置OpenGL的繪制參數(shù)(使所繪制的模版緩沖區(qū)的值不變,顏色緩存可寫(xiě),深度緩存可寫(xiě),深度比較生效,其他的繪制參數(shù)不變);xiv)在當(dāng)前模板緩沖區(qū)中繪制當(dāng)前虛場(chǎng)景中的其它虛物體;xv)設(shè)置OpenGL的繪制參數(shù)(顏色緩存可寫(xiě),深度緩存可寫(xiě),深度比較生效,Alpha混合生效,使所繪制的模版緩沖區(qū)的值-1);xvi)繪制反射、折射體本身;
xvii)設(shè)置OpenGL的繪制參數(shù)(恢復(fù)深度緩存可寫(xiě),顏色緩存可寫(xiě),禁止Alpha混合,禁止摸板操作);xviii)返回。
實(shí)驗(yàn)證明它達(dá)到了預(yù)期目的。
圖2任意平面反射的示意圖。
圖3折射第一種情況--場(chǎng)景在折射體外的示意圖。
圖4折射第二種情況--場(chǎng)景在折射體內(nèi)的示意圖。
圖5折射面相互垂直的三維折射光路圖。
圖6球面反射的光路示意圖。
圖7球面折射的光路示意圖。
圖8確定球面的入射點(diǎn)和出射點(diǎn)示意圖。
圖9方盒子(a)及其虛物體(b)示意圖。
圖10為算法1預(yù)處理框圖。
圖11為算法2平面折射體或反射體產(chǎn)生虛場(chǎng)景的程序流程框圖。
圖12為算法3視點(diǎn)位置改變時(shí)重新計(jì)算虛場(chǎng)景的程序流程框圖。
圖13為算法4實(shí)時(shí)繪制和顯示的程序流程框圖。
當(dāng)一條L經(jīng)過(guò)若干次反射或折射,與某一物體的平面M相交于V點(diǎn)時(shí),與傳統(tǒng)光線跟蹤算法不同,我們不是利用光照模型計(jì)算對(duì)應(yīng)象素點(diǎn)的顏色值,而是計(jì)算點(diǎn)V的光學(xué)映射虛頂點(diǎn)V’。假設(shè)光線L經(jīng)過(guò)若干次反射或折射到達(dá)V時(shí),經(jīng)過(guò)的路徑的長(zhǎng)度總和為d=d1+d2+Λ+d5則虛頂點(diǎn)V’的計(jì)算公式為V′=A+dB-A|B-A|,]]>其中A是視點(diǎn),B是投影平面上一個(gè)采樣點(diǎn)。這就是我們提出的“光學(xué)映射虛對(duì)象的概念”。
對(duì)于被反射或折射的多面體,我們首先計(jì)算出每個(gè)頂點(diǎn)的虛頂點(diǎn),然后根據(jù)拓?fù)潢P(guān)系依次將虛頂點(diǎn)連接成虛物體的邊,最終形成反射或折射的光學(xué)映射虛物體(簡(jiǎn)稱虛物體)。例如一個(gè)方盒子,見(jiàn)圖9(a),其頂點(diǎn)P1,P2,...,P8的虛頂點(diǎn)依次為P′1,p′2,...,P′8,則我們可以得到該方盒子對(duì)應(yīng)的虛物體,如圖9(b)所示。在顯示圖形時(shí),將這些虛物體投影到反射或折射表面上。這個(gè)過(guò)程可以遞歸地進(jìn)行,從而得到與光線跟蹤類似的圖像效果。為了得到高質(zhì)量的真實(shí)感圖像,被反射或折射的平面的尺寸不能太大,否則應(yīng)當(dāng)將平面細(xì)分成更小的矩形或三角形。對(duì)于場(chǎng)景中被反射或折射的曲面物體,則應(yīng)當(dāng)先將曲面離散成若干小平面,用多面體近似表示曲面物體。
2、虛頂點(diǎn)的計(jì)算公式對(duì)于平面反射問(wèn)題,我們可以采用類似光束跟蹤算法的思想計(jì)算各個(gè)頂點(diǎn)的虛頂點(diǎn)假設(shè)有一個(gè)過(guò)點(diǎn)R=[Vx,Vy,Vz,1]T的平面,如圖2所示,其單位法矢量為N=[a,b,c,0]T,NTN=1,其平面方程為ax+by+cz+d=0其中,d=-NTR,V為視點(diǎn)。
三維場(chǎng)景中的任意一個(gè)點(diǎn)P=[Px,Py,Pz,1]T相對(duì)于該平面作反射變換后到達(dá)P′=[P′x,P′y,P′z,1]T。根據(jù)幾何關(guān)系,可以得到P′=TmP其中,Tm=1-2a2-2ab-2ac-2ad-2ab1-2b2-2bc-2bd-2ac-2bc1-2c2-2cd0001,]]>P′是P點(diǎn)的反射虛頂點(diǎn)。
折射問(wèn)題比平面反射問(wèn)題要復(fù)雜得多。平面折射體的非線性折射有兩種情況物體在折射體外(如圖3所示)和物體在折射體內(nèi)(見(jiàn)圖4)兩種。下面我們分別予以討論。
1)二維平面折射(a)物體在折射體外如圖3所示,V是視點(diǎn),P是場(chǎng)景中任意選取的一點(diǎn),它在折射體的外面,P′是與P對(duì)應(yīng)的虛頂點(diǎn)。求其虛物體的公式推導(dǎo)如下已知w1,w2,w3,h,令η=Sinα/Sinβ=η2/η1,ξ=1+w3/w1,根據(jù)幾何關(guān)系,可得Ad4+Bd3+Cd2+Dd+E=0 (1)其中,A=(1-η2)ξ2,B=2η2hξ-2hξ,C=h2+w22-η2h2-w12η2ξ2,D=2η2hξw12,
E=-w12η2h2。
從(1)式中可以解出d。根據(jù)d的值,然后可以計(jì)算出折射光線和折射平面的交點(diǎn)I1和I2,從而求出虛頂點(diǎn)P′。
虛頂點(diǎn)P′求解過(guò)程如下(1)連接V和P,求出VP與平面的交點(diǎn)UU=V-C3+CTVCT(P-V)(P-V),]]>其中,該平面的方程為C0x+C1y+C2z+C3=0,另外,C=(C0,C1,C2)T;(2)Q=V-w1N;(3)---I1=Q+dU-Q|U-Q|.]]>同理,可以求出I2。
令l=|V-I1|+|I1-I2|+|I2-P|,則P點(diǎn)的虛頂點(diǎn)P′=V+lI1-V|I1-V|.]]>我們用光線跟蹤的方法產(chǎn)生了兩組點(diǎn),然后用上面的公式,反算I1,顯然,如果I1相同,則I2也相同,具體的結(jié)果如下表所示。
(b)物體在折射體內(nèi)如魚(yú)缸中的魚(yú),物體(魚(yú))是在折射體(魚(yú)缸)內(nèi)面。這種情況的計(jì)算公式應(yīng)該與第一鐘情況是不同的。如圖4所示,圖中V是視點(diǎn),P是場(chǎng)景中任意選取的點(diǎn),它在折射體內(nèi)部,P′是P對(duì)應(yīng)的虛頂點(diǎn)。類似地,我們可以根據(jù)幾何關(guān)系得到如下一元四次方程Ad4+Bd3+Cd2+Dd+E=0 (2)其中,A=η2-1,B=-2hA,C=h2A+η2w12-w22,D=-2η2hw12,
E=w12η2h2。
從(2)式中可以解出d,然后便可以計(jì)算出折射光線和折射平面的交點(diǎn)I,從而求出虛頂點(diǎn)P′。虛頂點(diǎn)P′求解過(guò)程如下(1)連接V和P,VP與鏡平面相交于U,U可照搬前面的公式得到;(2)Q=V-w1N;(3)---I=Q+dU-Q|U-Q|;]]>(4)---p′=V+lI-V|I-V|,]]>其中,l=|V-I|+|I-P|。
我們用光線跟蹤的方法產(chǎn)生了兩組點(diǎn),然后用上面的公式,反算出交點(diǎn)I。具體的結(jié)果如下表所示。
(c)解的選取顯然,(1)式和(2)式都是多解的方程,它們都至多有4個(gè)實(shí)根。因此,解方程后,將要對(duì)解的結(jié)果進(jìn)行選擇。根據(jù)光學(xué)的原理,光在介質(zhì)中從一點(diǎn)到達(dá)另一點(diǎn)時(shí),將選擇最短路徑傳播。這樣,我們連接視點(diǎn)V和場(chǎng)景中的點(diǎn)P,得到一條直線,離該直線最近的解,就是我們所求的點(diǎn)。
2)三維平面折射如圖5,已知視點(diǎn)V,場(chǎng)景中任意選取的點(diǎn)P,折射率η,AD=a,VA=z,PF=b,e=|(VP→)x|,f=|(VP→)y|,g=|(VP→)z|.]]>在圖5中,光線從視點(diǎn)V出發(fā),經(jīng)過(guò)介質(zhì)上表面I1點(diǎn)折射進(jìn)入介質(zhì),然后到達(dá)介質(zhì)右側(cè)面,從I2點(diǎn)折射進(jìn)入空氣,并最終達(dá)到場(chǎng)景中的點(diǎn)P。
由Snell折射定律和幾何關(guān)系,我們就可以得到下面的兩個(gè)方程
根據(jù)上面的兩個(gè)方程可以求出x和y,然后由x、y以及z和折射率η的值就可以依次算出I1和I2的三維坐標(biāo),從而得到P的虛頂點(diǎn)P’的位置。
(3)和(4)式是一個(gè)二元4次非線性方程組,為了提高計(jì)算速度,我們采用下面的方法進(jìn)行近似處理首先,用下式計(jì)算出df0+f1d+f2d2+f3d3+f4d4=0,忽略d的高階(>2)項(xiàng),得f0+f1d+f2d2=0,其中,f0=(14C7-14C1-C2C1)2(C4-C7)2-2b2C1(C7-C1)(C4-C7)(14C7-14C1+C2C1)+]]>b4C12(C7-C1)2,]]>f1=-2C9b2C1(C4-C7)(C2C5+14C6-14C5+C7-C1)+2b4C12C9(C6-C5)-]]>{2C9b2C1(2C5-C6)+[2C9b2C5+(2C6-2C5)b2C1]C8}(14C7-14C1+C2C1)+]]>2b4C1C5(C7-C1)2+2(C4-C7)(2C5-C6)(14C7-14C1-C2C1)2+]]>2(14C7-14C1-C2C1)(C4-C7)2(C7-C1-C2C5+14C6-14C5),]]>f2=(14C7-14C1-C2C1)2[2(C4-C7)(2-η2)+(2C5-C6)2]+4(14C7-14C1-C2C1)(14C6-]]>14C5-C2C5+C7-C1)(C4-C7)(2C5-C6)+[2(C7-C14-C2C1)(C7-C1-C2+14η2+]]>C6-C5-14)+(C7-C1-C2C5+C6-C54)2](C4-C7)2-2(C7-C1)b2C1(C4-C7)(-14+]]>C2+14η2+C6-C5+C7-C1)-{(2C7-2C1)b2C1(2C5-C6)+(C4-C7)[(2C7-2C1)b2C5+]]>2(C6-C5)b2C1]}(C2C5+C6-C54+C7-C1)-{2(C7-C1)b2C1(2-η2)+[2(C7-C1)b2C5+]]>2(C6-C5)b2C1](2C5-C6)+[2(C7-C1)b2+2(C6-C5)b2C5+(2η2-2)b2C1](C4-C7)}(14C7+]]>C2C1-14C1)+b4C12[2(C7-C1)(η2-1)+(C6-C5)2]+4b4C1C5(C7-C1)(C6-C5)+]]>b4(2C1+C52)(C7-C1)2.]]>在上面的3個(gè)式子當(dāng)中,C1=(a-12)2,C2=(g-z)2,C3=C1+z2,C4=2C1+z2,C5=-2a+1,]]>C6=η2C5,C7=η2C3,C8=C4-C7,C9=C7-C1.]]>
然后將d代入下式,便可以計(jì)算出當(dāng)x=0時(shí)y的值,我們把它記為y0,即y0=a-(0.5+d)。
通常d是一個(gè)很小的量,|d|≤0.5;在上面的計(jì)算中,我們忽略了d的高階(≥3)項(xiàng),如果保留d的更高階(3、4階)項(xiàng),可以提高計(jì)算精度,但是這也會(huì)使計(jì)算量略有增加。將(4)式在x=0點(diǎn)展開(kāi)并作線性近似y=y(tǒng)0+y1x,其中, 將y=y(tǒng)0+y1x代入(3)式,得 從上式中求出x,并將x的值代入式(4)并求解一個(gè)關(guān)于y的四次方程,該方程經(jīng)過(guò)整理為H4y4+H3y3+H2y2+H1y+H0=0,其中,H4=e2(2-η2),H3=-2aex(2-η2),H2=a2x2(2-η2)+e2(1-η2)(x2+z2)-b2x2,H1=-2aex(1-η2)(x2+z2),H0=a2x2(1-η2)(x2+z2)。
再由x、y和z以及η可以計(jì)算出點(diǎn)I1和I2的三維坐標(biāo),從而求出虛頂點(diǎn)P′。
由式(3)和式(4)組成的方程組來(lái)求解x和y的時(shí)候,還有另一種方案在前面得到y(tǒng)0后,將(3)式在x=0點(diǎn)展開(kāi)并作線性近似,得到y(tǒng)=y(tǒng)0+y1x,其中,y1=(η2-1)y02+η2z2e(η2-1)y0;]]>然后,將y=y(tǒng)0+y1x代入(4)式,整理得到T4x4+T3x3+T2x2+T1x+T0=0,其中 e2y02[(1-η2)+(2-η2)y12]-b2y02,]]> 從上式中求出x,并將x的值代入式(3),可直接求解出yy=±x2+(g-z)2x2(e-x)2-η2(x2+z2)η2-1.]]>在后面的計(jì)算實(shí)驗(yàn)中采用的是前一種方案。
具體計(jì)算I1、I2及虛頂點(diǎn)P’的過(guò)程如下a).求I1設(shè)物體上的點(diǎn)是P,視點(diǎn)是V,入射面外法向量n1,出射面外法向量n2,入射面與出射面垂直,n1,n2是單位向量。局部坐標(biāo)系的基是ex,ey,ez,其中ey=nz,ex=-n1,ey叉乘ez,再單位化可得ex。
計(jì)算出的x,y,z是局部坐標(biāo)系下的坐標(biāo)。設(shè)dx,dy,dz是I1點(diǎn)相對(duì)于視點(diǎn)的偏移量,有dx=xex,dy=y(tǒng)ey,dz=zez,則I1=V+dx+dy+dz。
b).求I2已知入射光線方向矢量IN=I1-V,折射面法矢量n1,折射率η,可計(jì)算折射光線方向矢量OUT。由折射光線上一點(diǎn)I1以及其方向,和出射面法向量n2及面上一點(diǎn),可以求出折射光線與出射平面的交點(diǎn)I2。我們可以給出I2的公式如下I2=I1-n1C1-x2+y2η2(x2+y2+z2)-e^Cx2+y2ηx2+y2+z2,]]>其中e^=V-I1-n1[(V-I1)·n1]|V-I1-n1[(V-I1)·n1]|,C=η(a-y)yx2+y2+z2.]]>c).求P’從視點(diǎn)到物點(diǎn),光線走過(guò)的距離是d=‖V-I1‖I1-I2‖+‖I2-P‖,于可以得到虛頂點(diǎn)P’的計(jì)算公式P,=V+d(I1-V)||I1-V||.]]>我們用光線跟蹤的方法產(chǎn)生了兩組點(diǎn),然后用上面的公式,反算I1,顯然,如果I1相近,則I2也相近。具體的結(jié)果如下表所示,其中ε為相對(duì)誤差,即用近似公式反算的虛頂點(diǎn)P’到精確的虛頂點(diǎn)p’的距離與視點(diǎn)到虛頂點(diǎn)的距離之比ε=|P′-p′|/|V-p′|。
3)球面反射和折射(1)球面反射已知視點(diǎn)V,場(chǎng)景中任意選取的點(diǎn)P,設(shè)反射球的半徑為r,球心在0點(diǎn),如圖6所示。令a=|V-P|,b=|V-O|,c=|O-P|。
根據(jù)幾何光學(xué)原理可以得到2bcxyzcos(α+β)=bcxysin2(α+β)-b2y2z-c2x2z(5)x(r2+y2-c2)=y(tǒng)(x2+r2-b2) (6)其中,z=(a2-(x-y)2)/(4abc)。
取視點(diǎn)V為坐標(biāo)原點(diǎn),視點(diǎn)到球心0的距離為單位長(zhǎng)度。從(6)式可以解出y,它可以看成是x的函數(shù)。將y在x=b-r處作泰勒展開(kāi),并取線性近似y=A+Bx,(7)其中,A=(c-b)(c-r)/c,B=b(c-r)c(b-r).]]>將(7)代入(5)式,可以得到如下四次方程x(A+Bx)[a2-(x-A-Bx)2]cos(α+β)=2bcx(A+Bx)sin2(α+β)-[b2(A+Bx)2+c2x2][(a2-(x-A-Bx)2]/(2bc),(8)解出x,然后代入(7)可以求出y,從而計(jì)算出虛頂點(diǎn)P’。
下面介紹如何計(jì)算虛頂點(diǎn)P’
I.由于V,0,P三點(diǎn)在一個(gè)平面上,我們以0點(diǎn)為原點(diǎn),平面VP0的法向量N=[Nx,Ny,Nz]T為z軸,以0P為y軸,0P×N為x軸,建立局部坐標(biāo)系。這樣我們可以得到從世界坐標(biāo)系到局部坐標(biāo)系的轉(zhuǎn)換矩陣T=uxvxwx0uyvywy0uzvzwz00001,]]>其中,wx=Nx,wy=Ny,wz=Nz;ux=vywz-wyvz,uy=wxvz-vxwz,uz=vxwy-wxvy;vx、vy和vz分別是單位矢量(P-O)/|P-O|的三個(gè)坐標(biāo)分量;x,y分別為球面上的點(diǎn)I到視點(diǎn)V和場(chǎng)景中的點(diǎn)P之間的距離x=|V-I|,y=|I-P|;應(yīng)用公式I=T.LI便可把LI從局部坐標(biāo)系變換為世界坐標(biāo)系下的坐標(biāo)。
II.在局部坐標(biāo)系中,分別以0,V,P為圓心,R(球的半徑),x,y為半徑做三個(gè)圓,分別記為c1,c2,c3。
III.求出c1和c2的兩個(gè)交點(diǎn)p1,p3,c1和c3的兩個(gè)交點(diǎn)p3,p4。分別計(jì)算p1p3,p1p4,p2p3和p2P4的距離,取距離最小的一對(duì)點(diǎn)坐標(biāo)的平均值,即為球面上點(diǎn)I在局部坐標(biāo)系上的坐標(biāo),記為L(zhǎng)I[LIx,LIy,Pz,1]T。應(yīng)用公式I=T·LI將LI的局部坐標(biāo)變換成世界坐標(biāo)系下的坐標(biāo),結(jié)果記為I。IV.計(jì)算P′=V+(x+y)I-V|I-V|.]]>我們用光線跟蹤的方法產(chǎn)生了兩組點(diǎn),然后用上面的公式,反算I1和I2。具體的結(jié)果如下表所示。
(2)球面折射如圖7所示,球的半徑為r,根據(jù)幾何光學(xué)可以得到{(a2+r2-x2)(b2+r2-y2)x2cosθ4abr2-[x2-(x2+r2-a2)24r2](xycosθab+]]>(9)2η2)+x2}2=x2sin2θ[r2x+y](a2-x2)]2a2b2r2[x2-(x2+r2-a2)24r2],]]>y(x2+r2-a2)=x(y2+r2-b)。
(10)不失一般性,取視點(diǎn)V為坐標(biāo)原點(diǎn),視點(diǎn)到球心0的距離為單位長(zhǎng)度。令x=a-r+t, (11)對(duì)(10)式在t=0處作泰勒展開(kāi),并作線性近似,可得y=b-r+a(b-r)b(a-r)t,]]>將(11)和(12)式代入(9)式,并忽略t的(5次以上的)高階項(xiàng),得y=G0+G1t+G2t2+G3t3+G4t4, (13)其中,G0=T02-C1S0R0;G1=2T0T1-C1(S0R1+S1R0);G2=2T0T2+T1T1-C1(S0R2+S1R1+S2R0);G3=2T0T3+2T1T2-C1(S0R3+S1R2+S2R1+S3R0);G4=2T0T4+2T1T3+T22-C1(S0R4+S1R3+S2R2+S3R1+S4R0);C0=a-r;C1=sin2θ/(a2b2r2);C2=-1/(4r2);C3=cosθ/(4abr2);C4=cosθ/(ab);C5=2/η2+C4AC0;C6=C4(A+BC0);C7=C4B;S0=C02+C2(C02-a2+r2)2;S1=2C0+4C2C0(C02-a2+r2);S2=1+2C2(3C02-a2+r2);S3=4C2C0;S4=C2;Q0=r2C0+A(a2-C02);Q1=r2-2AC0+B(a2-C02);
Q2=-A-2BC0;Q3=-B;U0=Q0C02;U1=2Q0C0+Q1C02;U2=Q0+2Q1C0+Q2C02;U3=Q1+2Q2C0+Q3C02;U4=Q2+2Q3C0;R0=Q0U0;R1=Q0U1+Q1U0;R2=Q0U2+Q1U1+Q2U0;R3=Q0U3+Q1U2+Q2U1+Q3U0;R4=Q0U4+Q1U3+Q2U2+Q3U1;P0=(a2+r2-C02)(b2+r2-A2);P1=-2AB(a2+r2-C02)-2C0(b2+r2-A2);P2=-B2(a2+r2-C02)+4C0AB-(b2+r2-A2);P3=2C0B2+2AB;P4=BB;T0=C3C02P0-C5S0+C02;T1=C3(C02P1+2C0P0)-C5S1-C6S0+2C0;T2=C3(C02P2+2C0P1+P0)-C5S2-C6S1-C7S0+1;T3=C3(C02P3+2C0P2+P1)-C5S3-C6S2-C7S1;T4=C3(C02P4+2C0P3+P2)-C5S4-C6S3-C7S2;從(13)式可以計(jì)算出t,將t代入(11)和(12)式即可分別求出x和y,這樣就可以求出虛頂點(diǎn)P’。
確定I1和I2的方法得到x和y后,分別以V和P為圓心,x和y為半徑畫(huà)圓,在折射平面里和球面分別交于I1′,I1″和I2′,I2″,見(jiàn)圖8。球面的入射點(diǎn)I1取自I1′和I1″中的某一個(gè),出射點(diǎn)I2取自I2′和I2″中的某一個(gè)。也就是說(shuō),I1和I2有四種可能的取法。此時(shí),我們將應(yīng)用折射定律,選取出我們所要的那一種可能情況。注意到,如果I1和I2是精確的入射點(diǎn)和出射點(diǎn),則sinβsinα=1η,]]>或者說(shuō),1-cos2β1-cos2α=1η2,]]>同時(shí),cosβ=||I1I2||2r,cosα=-x2+r2-a22xr=-y2+r2-b22yr,]]>因而1-||I1I2||24r21-(x2+r2-a22xr)2=1η2,1-||I1I2||24r21-(y2+r2-b22yr)2=1η2.]]>于是,我們的選取準(zhǔn)則是,取使得|1-||I1I2||24r21-(x2+r2-a22xr)2-1η2|+|1-||I1I2||24r21-(y2+r2-b22yr)2-1η2|]]>最小的那一組I1I2。
下面介紹如何計(jì)算虛頂點(diǎn)P’I.由于V,O,P,I1,I2五點(diǎn)在一個(gè)平面上,我們以O(shè)點(diǎn)為原點(diǎn),平面VPO的法向量N=[Nx,Ny,Nz]T為z軸,以O(shè)P為y軸,N×OP為x軸,建立局部坐標(biāo)系。這樣我們可以得到從局部坐標(biāo)系到世界坐標(biāo)系的變換矩陣T=uxvxwx0uyvywy0uzvzwz00001,]]>其中,wx=Nx,wy=Ny,wz=Nz;uz=vywz-wyvz,uy=wxvz-vxwz,uz=vxwy-wxvy;vx、vy和vz分別是單位矢量 的三個(gè)坐標(biāo)分量。
II.應(yīng)用公式I=T·LI將I1和I2的局部坐標(biāo)轉(zhuǎn)換成世界坐標(biāo)系的坐標(biāo),結(jié)果仍然用I1和I2表示。
III.計(jì)算P′=V+(x+|I2-I1|+y)I1-V|I1-V|.]]>我們用光線跟蹤的方法產(chǎn)生了兩組點(diǎn),然后用上面的公式,反算I1和I2。具體的結(jié)果如下表所示。
3、算法實(shí)現(xiàn)算法1預(yù)處理,如圖10所示。
第1步,對(duì)場(chǎng)景中的物體構(gòu)造二叉空間剖分(BSP)樹(shù),如果場(chǎng)景中含有球形反射或折射體,則用緊密包容該球的正方體的6個(gè)面代替該球參與構(gòu)造BSP樹(shù);第2步,收集場(chǎng)景中所有的反射和折射體,并形成反射和折射體對(duì)象表;第3步,根據(jù)當(dāng)前的視點(diǎn),確定反射、折射體表中的各反射、折射體的先后順序;由于BSP樹(shù)與視點(diǎn)無(wú)關(guān),因而能很快的得到反射、折射體的順序;第4步,計(jì)算虛頂點(diǎn)并生成所有的虛物體,產(chǎn)生虛場(chǎng)景。
算法2為平面折射體或反射體產(chǎn)生虛場(chǎng)景,如圖11所示。有以下特點(diǎn)(1)上面的算法是一個(gè)遞歸算法,遞歸主要是針對(duì)場(chǎng)景中的反射、折射體進(jìn)行的;(2)對(duì)于反射體和折射體是統(tǒng)一處理的;(3)對(duì)于反射體,生成虛場(chǎng)景使用的是反射公式,對(duì)應(yīng)的面片的頂點(diǎn)順序要改變,即反射虛物體面片的頂點(diǎn)順序與原來(lái)的順序相反,以便確保平面的外法矢指向正確的方向;(4)在任一虛場(chǎng)景中,都要根據(jù)視點(diǎn)和BSP樹(shù)重新確定其中的反射和折射體的順序,以便后面能夠正確地實(shí)時(shí)顯示;(5)如果場(chǎng)景中的反射或折射體的個(gè)數(shù)大于1算法的終止條件是遞歸深度不大于所給定的最大遞歸深度值;如果視點(diǎn)發(fā)生變化,對(duì)于純反射虛場(chǎng)景,是不用重算的;但對(duì)于任意一個(gè)折射體及其以后的遞歸過(guò)程中出現(xiàn)的虛場(chǎng)景必須重新計(jì)算;下面是視點(diǎn)發(fā)生變化時(shí)重新計(jì)算虛場(chǎng)景的算法算法3為視點(diǎn)位置改變時(shí)重新計(jì)算虛場(chǎng)景,如圖12所示。
要實(shí)現(xiàn)實(shí)時(shí)繪制場(chǎng)景,就必須采用硬件加速的辦法。這時(shí),我們要用到圖形硬件的公用的軟件接口OpenGL。前面的虛物體的生成,為我們實(shí)時(shí)繪制打下了基礎(chǔ)。下面是我們使用的實(shí)時(shí)繪制算法。
算法4為實(shí)時(shí)繪制和顯示,如圖13所示。
權(quán)利要求
1.平面和球面非線性折射和反射的實(shí)時(shí)光線跟蹤方法,含有用虛物體實(shí)現(xiàn)實(shí)時(shí)光線跟蹤的方法,其特征在于對(duì)于被折射或反射的多面體,首先利用計(jì)算機(jī)計(jì)算出該多面體各個(gè)頂點(diǎn)的虛頂點(diǎn),然后根據(jù)該多面體原有的點(diǎn)和面之間的拓?fù)潢P(guān)系依次把所有虛頂點(diǎn)連接成由許多虛面構(gòu)成且最終形成反射或折射的光學(xué)映射虛物體,簡(jiǎn)稱為虛物體;在顯示圖形時(shí),利用圖形硬件加速技術(shù),把該虛物體用遞歸算法遞歸地投射到反射或折射表面上,通過(guò)與折射表面本身的亮度值進(jìn)行α混合,從而得到與光線跟蹤類似的圖像效果;其中,三維場(chǎng)景中任意一點(diǎn)P的虛頂點(diǎn)P′可表達(dá)為P′=V+lB-V|B-V|,]]>其中V為視點(diǎn),l為光線L經(jīng)過(guò)折射或反射到達(dá)點(diǎn)P時(shí)所經(jīng)過(guò)的路徑的長(zhǎng)度總和;B為投影平面上的一個(gè)采樣點(diǎn);對(duì)于場(chǎng)景在折射體外的平面折射體而言,它依次含有如下步驟(1)計(jì)算各虛頂點(diǎn)P′P′=V+lI1-V|I1-V|;]]>l=|V-I1|+|I1-I2|+|I2-P|,I1=Q+dU-Q|U-Q|,]]>Q=V-w1N,U=V-C3+CTVCT(P-V)(P-V),]]>其中,l為光線經(jīng)過(guò)折射到達(dá)場(chǎng)景中的點(diǎn)P時(shí)所經(jīng)過(guò)的路徑的長(zhǎng)度總和;w1為視點(diǎn)V到折射體入射面的距離;Q為視點(diǎn)V在折射體入射面上的垂足;d為點(diǎn)Q到點(diǎn)I1的距離;U為直線VP與折射體入射面的交點(diǎn);折射體入射面的方程設(shè)為C0x+C1y+C2z+C3=0,并記C=(C0,C1,C2)T;I1、I2分別為光線L與平面折射體相應(yīng)的兩個(gè)表面—即入、出兩個(gè)折射面的交點(diǎn),N為點(diǎn)I1處的單位法向矢量;(2)根據(jù)場(chǎng)景中物體原有的拓?fù)潢P(guān)系依次把各虛頂點(diǎn)連接成虛物體的邊,相應(yīng)的面構(gòu)成各虛面;(3)用遞歸算法把該虛物體投影到折射表面上,并與折射表面本身的局部光亮度值進(jìn)行α混合后,顯示結(jié)果圖形。
2.平面和球面非線性折射和反射的實(shí)時(shí)光線跟蹤方法,含有用虛物體實(shí)現(xiàn)實(shí)時(shí)光線跟蹤的方法,其特征在于對(duì)于被折射或反射的多面體,首先利用計(jì)算機(jī)計(jì)算出該多面體各個(gè)頂點(diǎn)的虛頂點(diǎn),然后根據(jù)該多面體原有的點(diǎn)和面之間的拓?fù)潢P(guān)系依次把所有虛頂點(diǎn)連接成由許多虛面構(gòu)成且最終形成反射或折射的光學(xué)映射虛物體,簡(jiǎn)稱為虛物體;在顯示圖形時(shí),利用圖形硬件加速技術(shù),把該虛物體用遞歸算法遞歸地投射到反射或折射表面上,通過(guò)與折射表面本身的亮度值進(jìn)行α混合,從而得到與光線跟蹤類似的圖像效果;其中,三維場(chǎng)景中任意一點(diǎn)P的虛頂點(diǎn)P′可表達(dá)為P′=V+lB-V|B-V|,]]>其中V為視點(diǎn),l為光線L經(jīng)過(guò)折射或反射到達(dá)點(diǎn)P時(shí)所經(jīng)過(guò)的路徑的長(zhǎng)度總和;B為投影平面上的一個(gè)采樣點(diǎn);對(duì)于場(chǎng)景在折射體內(nèi)的平面折射而言,它依次含有如下步驟(1)計(jì)算各虛頂點(diǎn)P′P′=V+lI-V|I-V|;]]>l=|V-I|+|I-P|,I=Q+dU-Q|U-Q|,]]>Q=V-w1N,U=V-C3+CTVCT(P-V)(P-V),]]>其中,I為光線L與平面折射體的入射面的交點(diǎn),該入射面的方程設(shè)為C0x+C1y+C2z+C3=0,并記C=(C0,C1,C2)T;N為點(diǎn)I處的單位法向矢量;Q為視點(diǎn)V在折射體入射面上的垂足;d為點(diǎn)Q到點(diǎn)I1的距離;U為直線VP與折射體入射面的交點(diǎn);(2)根據(jù)場(chǎng)景中物體原有的拓?fù)潢P(guān)系依次把各虛頂點(diǎn)連接成虛物體的邊,相應(yīng)的面構(gòu)成虛面;(3)用遞歸算法把該虛物體投影到折射表面上,并與折射表面本身的局部光亮度值進(jìn)行α混合后,顯示結(jié)果圖形。
3.平面和球面非線性折射和反射的實(shí)時(shí)光線跟蹤方法,其特征在于對(duì)于被折射或反射的多面體,首先利用計(jì)算機(jī)計(jì)算出該多面體各個(gè)頂點(diǎn)的虛頂點(diǎn),然后根據(jù)該多面體原有的點(diǎn)和面之間的拓?fù)潢P(guān)系依次把所有虛頂點(diǎn)連接成由許多虛面構(gòu)成且最終形成反射或折射的光學(xué)映射虛物體,簡(jiǎn)稱為虛物體;在顯示圖形時(shí),利用圖形硬件加速技術(shù),把該虛物體用遞歸算法遞歸地投射到反射或折射表面上,通過(guò)與折射表面本身的亮度值進(jìn)行α混合,從而得到與光線跟蹤類似的圖像效果;其中,三維場(chǎng)景中任意一點(diǎn)P的虛頂點(diǎn)P′可表達(dá)為P′=V+lB-V|B-V|,]]>其中V為視點(diǎn),l為光線L經(jīng)過(guò)折射或反射到達(dá)與該虛頂點(diǎn)對(duì)應(yīng)的一個(gè)場(chǎng)景中的點(diǎn)P時(shí)所經(jīng)過(guò)的路徑的長(zhǎng)度總和;B為投影平面上的一個(gè)采樣點(diǎn);對(duì)于光線入、出折射體的兩個(gè)折射面相互垂直的三維平面折射而言,它依次含有如下步驟(1)計(jì)算各虛頂點(diǎn)P′P′=V+dI1-V|I1-V|;]]>d=|V-I1|+|I1-I2|+|I2-P|,I1=V+dx+dy+dz,dx=xex,dy=y(tǒng)ey,dz=zez,ey=N2,ez=-N1,ex=ey×ez,其中,P是場(chǎng)景中的物體上的點(diǎn),V是視點(diǎn),N1是入射面外法向量,N2是出射面外法向量,入射面與出射面垂直,N1、N2是單位向量,ex,ey,ez是局部坐標(biāo)系下的基向量,x,y,z是局部坐標(biāo)系下的坐標(biāo),dx,dy,dz是I1點(diǎn)相對(duì)于視點(diǎn)的偏移量;I2=I1-N1c1-x2+y2η2(x2+y2+z2)-e^cx2+y2ηx2+y2+z2,]]>其中,e^=V-I1-N1[(V-I1)·N1]|V-I1-N1[(V-I1)·N1],]]>c=η(a-y)yx2+y2+z2,]]>η是三維折射體的折射率,α為視點(diǎn)到折射體出射面的垂直距離;(2)根據(jù)場(chǎng)景中物體原有的拓?fù)潢P(guān)系依次把各虛頂點(diǎn)連接成虛物體的邊,相應(yīng)的面構(gòu)成虛面;(3)用遞歸算法把該虛物體投影到折射表面上,并與折射表面本身的局部光亮度值進(jìn)行α混合后,顯示結(jié)果圖形。
4.平面和球面非線性折射和反射的實(shí)時(shí)光線跟蹤方法,其特征在于對(duì)于被折射或反射的多面體,首先利用計(jì)算機(jī)計(jì)算出該多面體各個(gè)頂點(diǎn)的虛頂點(diǎn),然后根據(jù)該多面體原有的點(diǎn)和面之間的拓?fù)潢P(guān)系依次把所有虛頂點(diǎn)連接成由許多虛面構(gòu)成且最終形成反射或折射的光學(xué)映射虛物體,簡(jiǎn)稱為虛物體;在顯示圖形時(shí),利用圖形硬件加速技術(shù),把該虛物體用遞歸算法遞歸地投射到反射或折射表面上,通過(guò)與折射表面本身的亮度值進(jìn)行α混合,從而得到與光線跟蹤類似的圖像效果;其中,三維場(chǎng)景中任意一點(diǎn)P的虛頂點(diǎn)P′可表達(dá)為P′=V+lB-V|B-V|,]]>其中V為視點(diǎn),l為光線L經(jīng)過(guò)折射或反射到達(dá)點(diǎn)P時(shí)所經(jīng)過(guò)的路徑的長(zhǎng)度總和;B為投影平面上的一個(gè)采樣點(diǎn);對(duì)于球面反射體而言,它依次含有如下步驟(1)計(jì)算各虛頂點(diǎn)P′P′=V+(x+y)I-V|I-V|,]]>I為光線L在球面上的入射點(diǎn),它可表達(dá)為I=T·LI,其中,LI=[LIx,LIy,Pz,1]T它是球面上點(diǎn)I在局部坐標(biāo)系下的坐標(biāo);T為從局部坐標(biāo)系到世界坐標(biāo)系的變換矩陣T=uxvxwx0uyvywy0uzvzwz00001,]]>其中,ux=vywz-wyvz,uy=wxvz-vxwz,uz=vxwy-wxvy;vx、vy和vz分別是單位矢量(P-O)/|P-O|的三個(gè)坐標(biāo)分量;wx=Nx,wy=Ny,wz=Nz;N=(Nx,Ny,Nz)T為視點(diǎn)V、球面的球心O和場(chǎng)景中的點(diǎn)P組成的平面VPO的法向量;以O(shè)為坐標(biāo)原點(diǎn),以N為z軸,以O(shè)P為y軸,以O(shè)P×N為x軸,建立局部坐標(biāo)系;x,y分別為球面上的點(diǎn)I到視點(diǎn)V和場(chǎng)景中的點(diǎn)P之間的距離x=|V-I|,y=|I-P|;應(yīng)用公式I=T·LI便可把LI從局部坐標(biāo)系變換到世界坐標(biāo)系;(2)根據(jù)場(chǎng)景中物體原有的拓?fù)潢P(guān)系依次把各虛頂點(diǎn)連接成虛物體的邊,相應(yīng)的面構(gòu)成各虛面;(3)用遞歸算法把該虛物體投影到反射表面上,并與反射表面本身的局部光亮度值進(jìn)行α混合后,顯示結(jié)果圖形。
5.平面和球面非線性折射和反射的實(shí)時(shí)光線跟蹤方法,其特征在于對(duì)于被折射或反射的多面體,首先利用計(jì)算機(jī)計(jì)算出該多面體各個(gè)頂點(diǎn)的虛頂點(diǎn),然后根據(jù)該多面體原有的點(diǎn)和面之間的拓?fù)潢P(guān)系依次把所有虛頂點(diǎn)連接成由許多虛面構(gòu)成且最終形成反射或折射的光學(xué)映射虛物體,簡(jiǎn)稱為虛物體;在顯示圖形時(shí),利用圖形硬件加速技術(shù),把該虛物體用遞歸算法遞歸地投射到反射或折射表面上,通過(guò)與折射表面本身的亮度值進(jìn)行α混合,從而得到與光線跟蹤類似的圖像效果;其中,三維場(chǎng)景中任意一點(diǎn)P的虛頂點(diǎn)P′可表達(dá)為P′=V+lB-V|B-V|,]]>其中V為視點(diǎn),l為光線L經(jīng)過(guò)折射或反射到達(dá)點(diǎn)P時(shí)所經(jīng)過(guò)的路徑的長(zhǎng)度總和;B為投影平面上的一個(gè)采樣點(diǎn);對(duì)于球面折射體而言,它依次含有如下步驟(1)計(jì)算各虛頂點(diǎn)P′P′=V+(x+|I1-I2|+y)I1-V|I1-V|,]]>其中,I1、I2分別是光線射到球面折射體的入射點(diǎn)和出射點(diǎn),用公式I=T·LI,把I1、I2的局部坐標(biāo)變換成世界坐標(biāo)系的坐標(biāo);x,y分別為視點(diǎn)V到入射點(diǎn)I1,以及出射點(diǎn)I2到場(chǎng)景中的一點(diǎn)P的距離,即x=|V-I1|,y=|I2-P|;T為從局部坐標(biāo)系到世界坐標(biāo)系的變換矩陣T=uxvxwx0uyvywy0uzvzwz00001,]]>其中,ux=vywz-wyvz,uy=wxvz-vxwz,uz=vxwy-wxvy;vx、vy和vz分別是單位矢量(P-O)/|P-O|的三個(gè)坐標(biāo)分量;wx=Nx,wy=Ny,wz=Nz;N=(Nx,Ny,Nz)T為視點(diǎn)V、球面的球心O和場(chǎng)景中的點(diǎn)P組成的平面VPO的法向量;以O(shè)為坐標(biāo)原點(diǎn),以N為z軸,以O(shè)P為y軸,以O(shè)P×N為x軸,建立局部坐標(biāo)系;(2)根據(jù)場(chǎng)景中物體原有的拓?fù)潢P(guān)系依次把各虛頂點(diǎn)連接成虛物體的邊,相應(yīng)的面構(gòu)成各虛面;(3)用遞歸算法把該虛物體投影到折射表面上,并與折射表面本身的局部光亮度值進(jìn)行α混合后,顯示結(jié)果圖形。
6.根據(jù)權(quán)利要求1或2,或3,或4,或5所述的平面和球面非線性折射和反射的實(shí)時(shí)光線跟蹤方法,其特征在于所述的用遞歸算法來(lái)顯示圖形的過(guò)程,含有如下步驟和算法算法1預(yù)處理第1步,對(duì)場(chǎng)景中的物體構(gòu)造二叉空間剖分(BSP)樹(shù),如果場(chǎng)景中含有球形反射或折射體,則用緊密包容該球的正方體的6個(gè)面代替該球參與構(gòu)造BSP樹(shù);第2步,收集場(chǎng)景中所有的反射和折射體,并形成反射和折射體對(duì)象表;第3步,根據(jù)當(dāng)前的視點(diǎn),確定反射、折射體表中的各反射、折射體的先后順序;由于BSP樹(shù)與視點(diǎn)無(wú)關(guān),因而能很快的得到反射、折射體的順序;第4步,計(jì)算虛頂點(diǎn)并生成所有的虛物體,產(chǎn)生虛場(chǎng)景;算法2為折射體或反射體產(chǎn)生虛場(chǎng)景i)是否到達(dá)最大的遞歸層次?是則返回;ii)如果為反射體,計(jì)算反射虛場(chǎng)景;如果為折射體,計(jì)算折射虛場(chǎng)景;iii)根據(jù)視點(diǎn)對(duì)虛場(chǎng)景中的反射和折射體進(jìn)行排序;iv)如果虛場(chǎng)景中還存在反射或折射體,則對(duì)虛場(chǎng)景中的反射、折射體遞歸調(diào)用本算法,轉(zhuǎn)i);否則轉(zhuǎn)v);v)返回;如果視點(diǎn)發(fā)生變化,對(duì)于平面反射虛場(chǎng)景,是不用重算的;但對(duì)于任意一個(gè)折射體或球面反射體的虛場(chǎng)景以及以后的遞歸過(guò)程中出現(xiàn)的所有虛場(chǎng)景必須重新計(jì)算;下面是視點(diǎn)發(fā)生變化時(shí)重新計(jì)算虛場(chǎng)景的算法算法3視點(diǎn)位置改變時(shí)重新計(jì)算虛場(chǎng)景i)是否是折射體?ii)是,調(diào)用算法2;iii)否則,遞歸調(diào)用本算法;算法4實(shí)時(shí)繪制和顯示(本算法是針對(duì)真實(shí)場(chǎng)景中的某個(gè)反射體或折射體的)i)設(shè)置OpenGL的繪制參數(shù)(禁止顏色緩存寫(xiě),禁止深度緩存寫(xiě),禁止深度比較,禁止使用Alpha混合,使所繪制的模版緩沖區(qū)的值+1);ii)繪制反射、折射體本身;iii)如果其虛場(chǎng)景中含有反射或折射體,則轉(zhuǎn)i),遞歸地繪制虛場(chǎng)景中的反射、折射體;否則,轉(zhuǎn)iv);iv)設(shè)置OpenGL的繪制參數(shù)(使所繪制的模版緩沖區(qū)的值不變,顏色緩存可寫(xiě),深度緩存可寫(xiě),深度比較生效,其他的繪制參數(shù)不變);v)在當(dāng)前模板緩沖區(qū)中繪制當(dāng)前虛場(chǎng)景中的其它虛物體;vi)設(shè)置OpenGL的繪制參數(shù)(顏色緩存可寫(xiě),深度緩存可寫(xiě),深度比較生效,Alpha混合生效,使所繪制的模版緩沖區(qū)的值-1);vii)繪制反射、折射體本身;viii)設(shè)置OpenGL的繪制參數(shù)(恢復(fù)深度緩存可寫(xiě),顏色緩存可寫(xiě),禁止Alpha混合,禁止摸板操作);ix)返回。
全文摘要
平面和球面非線性反射和折射的實(shí)時(shí)光線跟蹤方法,屬于計(jì)算機(jī)圖形技術(shù)領(lǐng)域。其特征在于對(duì)于被折射或反射的多面體,首先計(jì)算出各頂點(diǎn)的光學(xué)映射虛頂點(diǎn),再根據(jù)多面體的拓?fù)潢P(guān)系依次把虛頂點(diǎn)連接成由若干虛面構(gòu)成的虛物體;繪制時(shí)用遞歸算法把虛物體投射到相應(yīng)的反射或折射表面上,通過(guò)與該表面本身的顏色值進(jìn)行α混合,從而得到與光線跟蹤算法類似的真實(shí)感圖形。本專利同時(shí)給出了物體在平面折射體內(nèi)或外、三維折射、球面反射和折射五種情況下場(chǎng)景中任一點(diǎn)P的虛頂點(diǎn)P′的計(jì)算公式、以及它們公用的遞歸算法及其繪制過(guò)程。對(duì)于中等復(fù)雜程度的場(chǎng)景,利用支持OpenGL編程的圖形硬件的加速技術(shù),解決了統(tǒng)一處理反射和折射平面場(chǎng)景的實(shí)時(shí)光線跟蹤問(wèn)題。
文檔編號(hào)G06T17/00GK1410948SQ0213094
公開(kāi)日2003年4月16日 申請(qǐng)日期2002年9月23日 優(yōu)先權(quán)日2002年9月23日
發(fā)明者秦開(kāi)懷 申請(qǐng)人:清華大學(xué)