專(zhuān)利名稱:一種由光滑表面折射產(chǎn)生的3d虛擬場(chǎng)景面焦散效果的繪制方法
技術(shù)領(lǐng)域:
本發(fā)明屬于真實(shí)感3D虛擬場(chǎng)景繪制技術(shù)領(lǐng)域,涉及一種由光滑表面折射產(chǎn)生的 3D虛擬場(chǎng)景面焦散效果的繪制方法。
背景技術(shù):
真實(shí)感3D虛擬場(chǎng)景繪制技術(shù)在數(shù)字娛樂(lè)、影視特效、建筑CAD、廣告動(dòng)畫(huà)等領(lǐng)域受 到人們的廣泛關(guān)注。目前3D虛擬場(chǎng)景繪制技術(shù)雖然已經(jīng)得到深入的研究,但是如何快速繪 制具有高度真實(shí)感的3D虛擬場(chǎng)景畫(huà)面仍然是一個(gè)有待進(jìn)一步解決的難題。當(dāng)光源發(fā)出的 光線入射到光滑透明表面上時(shí),光滑透明表面的折射過(guò)程可能對(duì)折射光線產(chǎn)生聚焦或者離 焦作用,從而導(dǎo)致折射光線形成復(fù)雜的空間分布。當(dāng)這些空間分布復(fù)雜的折射光線再次入 射到不透明的反射表面上時(shí),就會(huì)在反射表面上產(chǎn)生形狀復(fù)雜的亮斑,這就是由光滑表面 折射產(chǎn)生的面焦散。光子映射是一種繪制面焦散效果的經(jīng)典方法。標(biāo)準(zhǔn)的光子映射算法首先對(duì)大量的 從光源發(fā)射的光子進(jìn)行跟蹤,將這些光子與場(chǎng)景表面的碰撞位置及其相關(guān)數(shù)據(jù)記錄在光子 緩存中;然后根據(jù)光子緩存中的數(shù)據(jù)計(jì)算場(chǎng)景的焦散圖;最后利用類(lèi)似陰影映射的方法把 焦散圖投影到場(chǎng)景表面上,從而繪制出面焦散效果。由于大量的光子跟蹤計(jì)算存在較大的 系統(tǒng)執(zhí)行時(shí)間和存儲(chǔ)空間開(kāi)銷(xiāo),因此利用光子映射算法繪制面焦散效果的效率通常不高。隨著3D虛擬場(chǎng)景繪制技術(shù)的不斷發(fā)展,影視特效、游戲、視景仿真等3D應(yīng)用對(duì)繪 制畫(huà)面的真實(shí)感要求變得越來(lái)越高。在這些3D應(yīng)用中加入由光滑表面折射產(chǎn)生的3D虛擬 場(chǎng)景的面焦散效果可顯著增強(qiáng)繪制畫(huà)面的真實(shí)感。目前人們迫切需要在不明顯降低繪制效 率的條件下,將面焦散效果加入到3D虛擬場(chǎng)景的繪制之中。因此設(shè)計(jì)快速繪制由光滑表面 折射產(chǎn)生的3D虛擬場(chǎng)景的面焦散效果的方法具有重要的意義。值得注意的是,在大多數(shù)3D 虛擬場(chǎng)景中,僅繪制由一次或者二次折射產(chǎn)生的面焦散效果就可以獲得很好的真實(shí)感。例 如,對(duì)于水底場(chǎng)景,通常只需考慮水面對(duì)光線的一次折射即可,然而當(dāng)光線透過(guò)玻璃球照射 到桌面上時(shí),則需考慮由二次折射產(chǎn)生的面焦散效果。換句話說(shuō),3D虛擬場(chǎng)景中的不封閉的 透明折射面會(huì)形成一次折射產(chǎn)生的面焦散效果,而封閉的透明折射體則形成二次折射產(chǎn)生 的面焦散效果。充分利用這一特點(diǎn),可以設(shè)計(jì)出不需光子跟蹤的算法來(lái)繪制由光滑表面折 射產(chǎn)生的面焦散效果。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種由光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景面焦散效果的繪 制方法。如圖1所示,本方法首先創(chuàng)建由光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景中的所有焦散照 明體,然后對(duì)每個(gè)焦散照明體,判斷待繪制場(chǎng)景點(diǎn)是否處于此焦散照明體之中,如果待繪制 場(chǎng)景點(diǎn)處于其中且待繪制場(chǎng)景點(diǎn)所在的焦散照明體位置不受光源遮擋影響,則計(jì)算此焦散 照明體對(duì)待繪制場(chǎng)景點(diǎn)的光照貢獻(xiàn),并將其加到待繪制場(chǎng)景點(diǎn)的總光照值之中,否則此焦
6散照明體對(duì)待繪制場(chǎng)景點(diǎn)的光照貢獻(xiàn)為0。本發(fā)明首先提供一種存儲(chǔ)由光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景中的焦散照明體的 數(shù)據(jù)結(jié)構(gòu)(100),如圖2所示,其包括光滑透明三角形面片的頂點(diǎn)位置P1、頂點(diǎn)位置P2、頂點(diǎn) 位置P3、頂點(diǎn)法向量N1、頂點(diǎn)法向量隊(duì)、頂點(diǎn)法向量隊(duì)、折射標(biāo)識(shí)F1、折射標(biāo)識(shí)F2、折射標(biāo)識(shí) F3、折射光線方向向量隊(duì)、折射光線方向向量&、折射光線方向向量R3、相交標(biāo)識(shí)T1、相交標(biāo) 識(shí)T2、相交標(biāo)識(shí)T3、交點(diǎn)S1、交點(diǎn)&、交點(diǎn)&、二次折射標(biāo)識(shí)G1、二次折射標(biāo)識(shí)( 、二次折射標(biāo) 識(shí)( 、二次折射光線方向向量RS1、二次折射光線方向向量RS2、二次折射光線方向向量RS3 等18個(gè)成員變量。本發(fā)明的方法(010)部分創(chuàng)建由光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景(A001)中的所 有焦散照明體,具體步驟如下步驟(SOll)將3D虛擬場(chǎng)景(A001)中所有面向光源的光滑透明三角形面片存 入三角形面片列表KAOO》中;將3D虛擬場(chǎng)景(A002)中所有背向光源的光滑透明三角 形面片存入三角形面片列表2(A003)中;對(duì)三角形面片列表1(A002)中的每個(gè)三角形面 片(A004),創(chuàng)建一個(gè)數(shù)據(jù)結(jié)構(gòu)(100)類(lèi)型的變量(A005),并將變量(A005)與三角形面片 (A004)相關(guān)聯(lián);步驟(S012)將三角形面片列表1 (A002)中所有三角形面片的頂點(diǎn)存入頂點(diǎn)列表 1 (A006)中,并且刪除重復(fù)的頂點(diǎn);對(duì)頂點(diǎn)列表1(A006)中的每個(gè)頂點(diǎn)(A007),創(chuàng)建一個(gè)從 頂點(diǎn)(A007)指向光源位置的向量(A008),如果頂點(diǎn)(A007)的法向量與向量(A008)的夾角 大于90度,則將頂點(diǎn)(A007)從頂點(diǎn)列表1(A006)中刪除;步驟(S013)對(duì)頂點(diǎn)列表1 (A006)中的每個(gè)頂點(diǎn)(A009),做如下計(jì)算(S013-1)根據(jù)頂點(diǎn)(A009)的位置及法向量、光源位置、頂點(diǎn)(A009)對(duì)應(yīng)的光滑 透明三角形面片的折射率,判斷從光源入射的光線在頂點(diǎn)(A009)位置處是否能發(fā)生折射, 如果能發(fā)生折射,則計(jì)算頂點(diǎn)(A009)位置處的折射光線方向向量(A010)并置FlagO = 1, 否則置FlagO = 0并轉(zhuǎn)步驟(S014);(S013-2)根據(jù)頂點(diǎn)(A009)的位置及折射光線方向向量(A010)創(chuàng)建折射光線射 線(AOll),判斷三角形面片列表1(A002)和三角形面片列表2(A003)中是否有三角形面片 (A012)與折射光線射線(AOll)相交,如果沒(méi)有,則置Flagl = 0并轉(zhuǎn)步驟(S014),否則置 Flagl = 1,并計(jì)算出離頂點(diǎn)(A009)最近的交點(diǎn)(A013),將交點(diǎn)(A013)位置處的三角形面 片(A014)與頂點(diǎn)(A009)相關(guān)聯(lián),再根據(jù)折射定律判斷在交點(diǎn)(A013)位置處能否發(fā)生折 射,如果發(fā)生折射則置Flag2 = 1并計(jì)算折射光線方向向量(A015),否則置Flag2 = 0并轉(zhuǎn) 步驟(SO 14);(S013-3)在三角形面片列表1(A002)中,找出包含頂點(diǎn)(A009)的所有三角形面 片(A016),計(jì)算頂點(diǎn)(A009)在各三角形面片(A016)的頂點(diǎn)序列中的編號(hào)i (i = 1,2,3);將 頂點(diǎn)(A009)的位置及法向量分別賦值給與各三角形面片(A016)相關(guān)聯(lián)的變量(A005)的 頂點(diǎn)位置Pi及頂點(diǎn)法向量Ni成員變量;將FlagO賦值給與各三角形面片(A016)相關(guān)聯(lián)的 變量(A0(^)的折射標(biāo)識(shí)Fi成員變量;將折射光線方向向量(A010)賦值給與各三角形面片 (A016)相關(guān)聯(lián)的變量(A0(^)的折射光線方向向量氏成員變量;將Flagl賦值給與各三角 形面片(A016)相關(guān)聯(lián)的變量(A0(^)的相交標(biāo)識(shí)Ti成員變量;將交點(diǎn)(AOU)賦值給與各三 角形面片(A016)相關(guān)聯(lián)的變量(A0(^)的交點(diǎn)Si成員變量;將Flag2賦值給與各三角形面片(A016)相關(guān)聯(lián)的變量(A005)的二次折射標(biāo)識(shí)Gi成員變量;將折射光線方向向量(A015) 賦值給與各三角形面片(A016)相關(guān)聯(lián)的變量(A0(^)的二次折射光線方向向量RSi成員變 量;步驟(S014):對(duì)于三角形面片列表1(A002)中的每個(gè)三角形面片(A017),做如下 計(jì)算(S014-1)如果與三角形面片(A017)相關(guān)聯(lián)的變量(A005)的第i個(gè)折射標(biāo)識(shí)Fi 成員變量的值為0(i = 1,2,3),則將三角形面片(A017)從三角形面片列表1(A002)中刪 除,否則轉(zhuǎn)步驟(S015);(S014-2)如果與三角形面片(A017)相關(guān)聯(lián)的變量(A005)的第i個(gè)二次折射標(biāo) 識(shí)&成員變量的值為0(i = 1,2,3),則將三角形面片(A017)從三角形面片列表1(A002) 中刪除,否則轉(zhuǎn)步驟(S015);步驟(S015)將三角形面片列表1(A002)中的各個(gè)三角形面片(A018)所關(guān)聯(lián)的 變量(A0(^)存入一個(gè)列表(A019)中,列表(A019)定義了由光滑表面折射產(chǎn)生的3D虛擬 場(chǎng)景中的所有焦散照明體。本發(fā)明的方法(020)部分實(shí)現(xiàn)待繪制場(chǎng)景點(diǎn)(B001)的焦散光照值的計(jì)算,具體步 驟如下步驟(S021)創(chuàng)建一個(gè)包含待繪制場(chǎng)景點(diǎn)(B001)的平面(B002),且平面(B002) 的法向量平行于待繪制場(chǎng)景點(diǎn)(B001)的法向量;步驟(S022)對(duì)于列表(A019)中的每個(gè)元素(B003),做如下計(jì)算(S022-1)如果元素(BOO; )的相交標(biāo)識(shí)T1、相交標(biāo)識(shí)T2、相交標(biāo)識(shí)T3等三個(gè)成 員變量都為1,則轉(zhuǎn)(S022-5),否則,創(chuàng)建一條起始于元素(B003)的頂點(diǎn)位置P1成員變量 表示的頂點(diǎn),方向平行于元素(B003)的折射光線方向向量R1成員變量表示的方向的射線 (B004),創(chuàng)建一條起始于元素(BOO; )的頂點(diǎn)位置P2成員變量表示的頂點(diǎn),方向平行于元素 (B003)的折射光線方向向量&成員變量表示的方向的射線(B005),創(chuàng)建一條起始于元素 (B003)的頂點(diǎn)位置P3成員變量表示的頂點(diǎn),方向平行于元素(BOO; )的折射光線方向向量 R3成員變量表示的方向的射線(B006);(S022-2)計(jì)算射線(B004)與平面(B002)的交點(diǎn)(B007);計(jì)算射線(B005)與平 面(B002)的交點(diǎn)(B008);計(jì)算射線(B006)與平面(B002)的交點(diǎn)(B009);如果待繪制場(chǎng)景 點(diǎn)(B001)處于由交點(diǎn)(B007)、交點(diǎn)(B008)和交點(diǎn)(B009)確定的三角形之外或者待繪制場(chǎng) 景點(diǎn)(B001)不在由交點(diǎn)(B007)、交點(diǎn)(B008)和交點(diǎn)(B009)確定的直線段之上,則結(jié)束元 素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算,否則根據(jù)待繪制場(chǎng) 景點(diǎn)(B001)到交點(diǎn)(B007)、交點(diǎn)(B008)和交點(diǎn)(B009)的距離以及元素(B003)的折射光 線方向向量札、折射光線方向向量&、折射光線方向向量R3等三個(gè)成員變量,通過(guò)插值計(jì)算 出待繪制場(chǎng)景點(diǎn)(B001)處的折射光線方向向量(B010);(S022-3)創(chuàng)建一條起始于待繪制場(chǎng)景點(diǎn)(B001),方向平行于折射光線方向向量 (B010)的反向向量的射線(BOll);計(jì)算射線(BOll)與由元素(B003)的頂點(diǎn)位置P1、頂點(diǎn) 位置P2、頂點(diǎn)位置P3等三個(gè)成員變量表示的頂點(diǎn)構(gòu)成的三角形面片(B012)的交點(diǎn)(B013); 創(chuàng)建一條起始于交點(diǎn)(B013),終止于光源位置的線段(B014);測(cè)試3D虛擬場(chǎng)景(A001)中 是否有不透明的三角形面片(B015)與線段(B014)相交,如果無(wú)交則轉(zhuǎn)(S022-4),否則三角形面片¢01 相對(duì)于光源被部分遮擋,其產(chǎn)生的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光 照貢獻(xiàn)為0,結(jié)束元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算;(S022-4)如果交點(diǎn)(B007)、交點(diǎn)(B008)和交點(diǎn)(B009)構(gòu)成一個(gè)三角形(B016), 則計(jì)算三角形(B016)在三角形面片(B012)所在平面上的投影面積(B017),再計(jì)算投影面 積(B017)與三角形面片(B012)的面積之比(B018),將面積之比(B018)賦值給變量α ; 如果交點(diǎn)(Β007)、交點(diǎn)(Β008)和交點(diǎn)(Β009)構(gòu)成一條直線段,則將變量α設(shè)置為一個(gè)固 定值;創(chuàng)建從交點(diǎn)(BOU)指向光源位置的向量(Β019),對(duì)向量(Β019)進(jìn)行歸一化計(jì)算; 根據(jù)三角形面片¢01 的三個(gè)頂點(diǎn)位置,計(jì)算三角形面片¢01 的表面法向量(B020); 根據(jù)光源到交點(diǎn)(B013)的距離、向量(B019)與表面法向量(B020)的夾角以及光源的輻 射亮度,計(jì)算三角形面片(B012)的照明度(B021),將照明度(B021)乘以變量α并賦值 給變量I ¢02 ;根據(jù)變量I ¢02 的值、待繪制場(chǎng)景點(diǎn)(B001)的材質(zhì)屬性以及待繪制場(chǎng) 景點(diǎn)(B001)的法向量與折射光線方向向量(B010)的反向向量的夾角,按照光照反射模型 計(jì)算元素(BOO; )表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)值,并將其加到待 繪制場(chǎng)景點(diǎn)(B001)的總光照值之中,結(jié)束元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn) (B001)的光照貢獻(xiàn)計(jì)算;(S022-5)創(chuàng)建一條起始于元素(BOO; )的交點(diǎn)S1成員變量表示的交點(diǎn)位置,方向 平行于元素(B003)的二次折射光線方向向量RS1成員變量表示的方向的射線(B023);創(chuàng)建 一條起始于元素(BOO; )的交點(diǎn)&成員變量表示的交點(diǎn)位置,方向平行于元素(BOO; )的二 次折射光線方向向量成員變量表示的方向的射線(B024);創(chuàng)建一條起始于元素(B003) 的交點(diǎn)&成員變量表示的交點(diǎn)位置,方向平行于元素(BOO; )的二次折射光線方向向量RS3 成員變量表示的方向的射線(B025);計(jì)算射線(B023)與平面(B002)的交點(diǎn)(B026);計(jì)算 射線(B024)與平面(B002)的交點(diǎn)(B027);計(jì)算射線(B025)與平面(B002)的交點(diǎn)(B028); 如果待繪制場(chǎng)景點(diǎn)(B001)處于由交點(diǎn)(B(^6)、交點(diǎn)(B027)和交點(diǎn)(B028)確定的三角形 之外或者待繪制場(chǎng)景點(diǎn)(B001)不在由交點(diǎn)(B(^6)、交點(diǎn)(B027)和交點(diǎn)(B028)確定的直 線段之上,則結(jié)束元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算, 否則根據(jù)待繪制場(chǎng)景點(diǎn)(B001)到交點(diǎn)(BOW)、交點(diǎn)(B027)和交點(diǎn)(B028)的距離以及元 素(B003)的二次折射光線方向向量RS1、二次折射光線方向向量RS2、二次折射光線方向向 量舊3等三個(gè)成員變量,通過(guò)插值計(jì)算出待繪制場(chǎng)景點(diǎn)(B001)處的二次折射光線方向向量 (B029);(S022-6)創(chuàng)建一條起始于待繪制場(chǎng)景點(diǎn)(B001),方向平行于二次折射光線方向 向量(B029)的反向向量的射線(B030);計(jì)算射線(B030)與由元素(B003)的交點(diǎn)S1、交點(diǎn) &、交點(diǎn)&等三個(gè)成員變量表示的交點(diǎn)構(gòu)成的三角形的交點(diǎn)(B031);根據(jù)交點(diǎn)(B031)與元 素(B003)的交點(diǎn)S1、交點(diǎn)&、交點(diǎn)&等三個(gè)成員變量表示的交點(diǎn)的距離以及元素(B003)的 折射光線方向向量R1、折射光線方向向量&、折射光線方向向量R3等三個(gè)成員變量,通過(guò)插 值計(jì)算出交點(diǎn)(B031)處的折射光線方向向量(B032);(S022-7)創(chuàng)建一條起始于交點(diǎn)(B031),方向平行于折射光線方向向量(B032)的 反向向量的射線(B033);計(jì)算射線(B033)與由元素(B003)的頂點(diǎn)位置P1、頂點(diǎn)位置P2、頂 點(diǎn)位置P3等三個(gè)成員變量表示的頂點(diǎn)構(gòu)成的三角形面片¢01 的交點(diǎn)(B034);創(chuàng)建一條 起始于交點(diǎn)(B034),終止于光源位置的線段(B035);測(cè)試3D虛擬場(chǎng)景(A001)中是否有不透明的三角形面片(B015)與線段(B035)相交,如果無(wú)交則轉(zhuǎn)(S022-8),否則三角形面片 (B012)相對(duì)于光源被部分遮擋,其產(chǎn)生的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn) 為0,結(jié)束元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算;(S022-8)如果交點(diǎn)(B026)、交點(diǎn)(B027)和交點(diǎn)(B028)構(gòu)成一個(gè)三角形(B036), 則計(jì)算三角形(B036)在由元素(B003)的交點(diǎn)S1、交點(diǎn)&、交點(diǎn)&等三個(gè)成員變量表示的 交點(diǎn)所確定的平面上的投影面積(B037),再計(jì)算投影面積(B037)在三角形面片(B012)所 在平面上的投影面積(B038),最后計(jì)算投影面積(B038)與三角形面片¢01 的面積之比 (B039),將面積之比(B039)賦值給變量β ;如果交點(diǎn)(Β(^6)、交點(diǎn)(Β027)和交點(diǎn)(Β028) 構(gòu)成一條直線段,則將變量β設(shè)置為一個(gè)固定值;創(chuàng)建從交點(diǎn)(Β034)指向光源位置的向量 (Β040),對(duì)向量(Β040)進(jìn)行歸一化計(jì)算;根據(jù)三角形面片¢01 的三個(gè)頂點(diǎn)位置,計(jì)算三 角形面片(B012)的表面法向量(B020);根據(jù)光源到交點(diǎn)(B034)的距離、向量(B040)與表 面法向量(B020)的夾角以及光源的輻射亮度,計(jì)算三角形面片(B012)的照明度(B041),將 照明度(B041)乘以變量β并賦值給變量J(B04》;根據(jù)變量J(B04》的值、待繪制場(chǎng)景點(diǎn) (B001)的材質(zhì)屬性以及待繪制場(chǎng)景點(diǎn)(B001)的法向量與二次折射光線方向向量(B029)的 反向向量的夾角,按照光照反射模型計(jì)算元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn) (B001)的光照貢獻(xiàn)值,并將其加到待繪制場(chǎng)景點(diǎn)(B001)的總光照值之中,結(jié)束元素(B003) 表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算。有益效果本發(fā)明提供了一種由光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景面焦散效果的繪制方法。 本發(fā)明方法與光子映射方法相比,避免了對(duì)大量的從光源發(fā)射的光子的跟蹤運(yùn)算,提高了 面焦散效果的繪制效率。另外,本發(fā)明方法能夠很容易地集成到光線跟蹤等全局光照繪制 算法框架之中,可顯著地提高3D虛擬場(chǎng)景畫(huà)面繪制的真實(shí)感。
圖1是由光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景面焦散效果繪制流程; 圖2是光滑表面折射產(chǎn)生的焦散照明體的數(shù)據(jù)結(jié)構(gòu)。
具體實(shí)施例方式為了使本發(fā)明的特征和優(yōu)點(diǎn)更加清楚明白,下面參照附圖結(jié)合具體實(shí)施例對(duì)本發(fā) 明作進(jìn)一步的描述。在本實(shí)施例中,使用光線跟蹤算法繪制3D虛擬場(chǎng)景。由于光線跟蹤算法只對(duì)鏡面 反射光線或者折射光線進(jìn)行遞歸跟蹤,因此無(wú)法繪制出漫反射表面上的面焦散效果。為此, 針對(duì)光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景面焦散效果的繪制問(wèn)題,需要在場(chǎng)景點(diǎn)的光照值計(jì) 算中增加一個(gè)新過(guò)程,以便獲得場(chǎng)景點(diǎn)的焦散光照值。計(jì)算出所有待繪制場(chǎng)景點(diǎn)的焦散光 照值,就實(shí)現(xiàn)了對(duì)3D虛擬場(chǎng)景面焦散效果的繪制。將焦散光照值加到標(biāo)準(zhǔn)光線跟蹤算法計(jì) 算出的場(chǎng)景點(diǎn)光照值之中,可進(jìn)一步地把面焦散效果合成到最終的3D虛擬場(chǎng)景繪制結(jié)果 之中。下面將講述這個(gè)新增加過(guò)程的具體實(shí)施方式
。本發(fā)明首先提供一種存儲(chǔ)由光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景中的焦散照明體的 數(shù)據(jù)結(jié)構(gòu)(100),如圖2所示,其包括光滑透明三角形面片的頂點(diǎn)位置P1、頂點(diǎn)位置P2、頂點(diǎn)位置P3、頂點(diǎn)法向量N1、頂點(diǎn)法向量隊(duì)、頂點(diǎn)法向量隊(duì)、折射標(biāo)識(shí)F1、折射標(biāo)識(shí)F2、折射標(biāo)識(shí) F3、折射光線方向向量隊(duì)、折射光線方向向量&、折射光線方向向量R3、相交標(biāo)識(shí)T1、相交標(biāo) 識(shí)T2、相交標(biāo)識(shí)T3、交點(diǎn)S1、交點(diǎn)&、交點(diǎn)&、二次折射標(biāo)識(shí)G1、二次折射標(biāo)識(shí)( 、二次折射標(biāo) 識(shí)( 、二次折射光線方向向量RS1、二次折射光線方向向量RS2、二次折射光線方向向量RS3 等18個(gè)成員變量。本發(fā)明的方法(010)部分創(chuàng)建由光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景(A001)中的所 有焦散照明體,具體步驟如下步驟(SOll)將3D虛擬場(chǎng)景(A001)中所有面向光源的光滑透明三角形面片存 入三角形面片列表KAOO》中;將3D虛擬場(chǎng)景(AOO》中所有背向光源的光滑透明三角 形面片存入三角形面片列表2(A003)中;對(duì)三角形面片列表1(A002)中的每個(gè)三角形面 片(A004),創(chuàng)建一個(gè)數(shù)據(jù)結(jié)構(gòu)(100)類(lèi)型的變量(A005),并將變量(A005)與三角形面片 (A004)相關(guān)聯(lián);步驟(S012)將三角形面片列表1 (A002)中所有三角形面片的頂點(diǎn)存入頂點(diǎn)列表 1 (A006)中,并且刪除重復(fù)的頂點(diǎn);對(duì)頂點(diǎn)列表1(A006)中的每個(gè)頂點(diǎn)(A007),創(chuàng)建一個(gè)從 頂點(diǎn)(A007)指向光源位置的向量(A008),如果頂點(diǎn)(A007)的法向量與向量(A008)的夾角 大于90度,則將頂點(diǎn)(A007)從頂點(diǎn)列表1(A006)中刪除;步驟(S013)對(duì)頂點(diǎn)列表1 (A006)中的每個(gè)頂點(diǎn)(A009),做如下計(jì)算(S013-1)根據(jù)頂點(diǎn)(A009)的位置及法向量、光源位置、頂點(diǎn)(A009)對(duì)應(yīng)的光滑 透明三角形面片的折射率,判斷從光源入射的光線在頂點(diǎn)(A009)位置處是否能發(fā)生折射, 如果能發(fā)生折射,則計(jì)算頂點(diǎn)(A009)位置處的折射光線方向向量(A010)并置FlagO = 1, 否則置FlagO = 0并轉(zhuǎn)步驟(S014);(S013-2)根據(jù)頂點(diǎn)(A009)的位置及折射光線方向向量(A010)創(chuàng)建折射光線射 線(A011),判斷三角形面片列表1(A002)和三角形面片列表2(A003)中是否有三角形面片 (A012)與折射光線射線(A011)相交,如果沒(méi)有,則置Flagl = 0并轉(zhuǎn)步驟(S014),否則置 Flagl = 1,并計(jì)算出離頂點(diǎn)(A009)最近的交點(diǎn)(A013),將交點(diǎn)(A013)位置處的三角形面 片(A014)與頂點(diǎn)(A009)相關(guān)聯(lián),再根據(jù)折射定律判斷在交點(diǎn)(A013)位置處能否發(fā)生折 射,如果發(fā)生折射則置Flag2 = 1并計(jì)算折射光線方向向量(A015),否則置Flag2 = 0并轉(zhuǎn) 步驟(S014);(S013-3)在三角形面片列表1(A002)中,找出包含頂點(diǎn)(A009)的所有三角形面 片(A016),計(jì)算頂點(diǎn)(A009)在各三角形面片(A016)的頂點(diǎn)序列中的編號(hào)i (i = 1,2,3);將 頂點(diǎn)(A009)的位置及法向量分別賦值給與各三角形面片(A016)相關(guān)聯(lián)的變量(A005)的 頂點(diǎn)位置Pi及頂點(diǎn)法向量Ni成員變量;將FlagO賦值給與各三角形面片(A016)相關(guān)聯(lián)的 變量(A0(^)的折射標(biāo)識(shí)Fi成員變量;將折射光線方向向量(A010)賦值給與各三角形面片 (A016)相關(guān)聯(lián)的變量(A0(^)的折射光線方向向量氏成員變量;將Flagl賦值給與各三角 形面片(A016)相關(guān)聯(lián)的變量(A0(^)的相交標(biāo)識(shí)Ti成員變量;將交點(diǎn)(AOU)賦值給與各三 角形面片(A016)相關(guān)聯(lián)的變量(A0(^)的交點(diǎn)Si成員變量;將Flag2賦值給與各三角形面 片(A016)相關(guān)聯(lián)的變量(A005)的二次折射標(biāo)識(shí)Gi成員變量;將折射光線方向向量(A015) 賦值給與各三角形面片(A016)相關(guān)聯(lián)的變量(A0(^)的二次折射光線方向向量RSi成員變 量;
11
步驟(S014)對(duì)于三角形面片列表1(A002)中的每個(gè)三角形面片(A017),做如下 計(jì)算(S014-1)如果與三角形面片(A017)相關(guān)聯(lián)的變量(A005)的第i個(gè)折射標(biāo)識(shí)Fi 成員變量的值為0(i = 1,2,3),則將三角形面片(A017)從三角形面片列表1(A002)中刪 除,否則轉(zhuǎn)步驟(S015);(S014-2)如果與三角形面片(A017)相關(guān)聯(lián)的變量(A005)的第i個(gè)二次折射標(biāo) 識(shí)&成員變量的值為0(i = 1,2,3),則將三角形面片(A017)從三角形面片列表1(A002) 中刪除,否則轉(zhuǎn)步驟(S015);步驟(S015)將三角形面片列表1(A002)中的各個(gè)三角形面片(A018)所關(guān)聯(lián)的 變量(A0(^)存入一個(gè)列表(A019)中,列表(A019)定義了由光滑表面折射產(chǎn)生的3D虛擬 場(chǎng)景中的所有焦散照明體。本發(fā)明的方法(020)部分實(shí)現(xiàn)待繪制場(chǎng)景點(diǎn)(B001)的焦散光照值的計(jì)算,具體步 驟如下步驟(S021)創(chuàng)建一個(gè)包含待繪制場(chǎng)景點(diǎn)(B001)的平面(B002),且平面(B002) 的法向量平行于待繪制場(chǎng)景點(diǎn)(B001)的法向量;步驟(S022)對(duì)于列表(A019)中的每個(gè)元素(B003),做如下計(jì)算(S022-1)如果元素(BOO; )的相交標(biāo)識(shí)T1、相交標(biāo)識(shí)T2、相交標(biāo)識(shí)T3等三個(gè)成 員變量都為1,則轉(zhuǎn)(S022-5),否則,創(chuàng)建一條起始于元素(B003)的頂點(diǎn)位置P1成員變量 表示的頂點(diǎn),方向平行于元素(B003)的折射光線方向向量R1成員變量表示的方向的射線 (B004),創(chuàng)建一條起始于元素(BOO; )的頂點(diǎn)位置P2成員變量表示的頂點(diǎn),方向平行于元素 (B003)的折射光線方向向量&成員變量表示的方向的射線(B005),創(chuàng)建一條起始于元素 (B003)的頂點(diǎn)位置P3成員變量表示的頂點(diǎn),方向平行于元素(BOO; )的折射光線方向向量 R3成員變量表示的方向的射線(B006);(S022-2)計(jì)算射線(B004)與平面(B002)的交點(diǎn)(B007);計(jì)算射線(B005)與平 面(B002)的交點(diǎn)(B008);計(jì)算射線(B006)與平面(B002)的交點(diǎn)(B009);如果待繪制場(chǎng)景 點(diǎn)(B001)處于由交點(diǎn)(B007)、交點(diǎn)(B008)和交點(diǎn)(B009)確定的三角形之外或者待繪制場(chǎng) 景點(diǎn)(B001)不在由交點(diǎn)(B007)、交點(diǎn)(B008)和交點(diǎn)(B009)確定的直線段之上,則結(jié)束元 素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算,否則根據(jù)待繪制場(chǎng) 景點(diǎn)(B001)到交點(diǎn)(B007)、交點(diǎn)(B008)和交點(diǎn)(B009)的距離以及元素(B003)的折射光 線方向向量札、折射光線方向向量&、折射光線方向向量R3等三個(gè)成員變量,通過(guò)插值計(jì)算 出待繪制場(chǎng)景點(diǎn)(B001)處的折射光線方向向量(B010);(S022-3)創(chuàng)建一條起始于待繪制場(chǎng)景點(diǎn)(B001),方向平行于折射光線方向向量 (B010)的反向向量的射線(BOll);計(jì)算射線(BOll)與由元素(B003)的頂點(diǎn)位置P1、頂點(diǎn) 位置P2、頂點(diǎn)位置P3等三個(gè)成員變量表示的頂點(diǎn)構(gòu)成的三角形面片(B012)的交點(diǎn)(B013); 創(chuàng)建一條起始于交點(diǎn)(B013),終止于光源位置的線段(B014);測(cè)試3D虛擬場(chǎng)景(A001)中 是否有不透明的三角形面片(B015)與線段(B014)相交,如果無(wú)交則轉(zhuǎn)(S022-4),否則三角 形面片¢01 相對(duì)于光源被部分遮擋,其產(chǎn)生的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光 照貢獻(xiàn)為0,結(jié)束元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算;(S022-4)如果交點(diǎn)(B007)、交點(diǎn)(B008)和交點(diǎn)(B009)構(gòu)成一個(gè)三角形(B016),則計(jì)算三角形(B016)在三角形面片(B012)所在平面上的投影面積(B017),再計(jì)算投影面 積(B017)與三角形面片(B012)的面積之比(B018),將面積之比(B018)賦值給變量α ; 如果交點(diǎn)(Β007)、交點(diǎn)(Β008)和交點(diǎn)(Β009)構(gòu)成一條直線段,則將變量α設(shè)置為一個(gè)固 定值;創(chuàng)建從交點(diǎn)(BOU)指向光源位置的向量(Β019),對(duì)向量(Β019)進(jìn)行歸一化計(jì)算; 根據(jù)三角形面片¢01 的三個(gè)頂點(diǎn)位置,計(jì)算三角形面片¢01 的表面法向量(B020); 根據(jù)光源到交點(diǎn)(B013)的距離、向量(B019)與表面法向量(B020)的夾角以及光源的輻 射亮度,計(jì)算三角形面片(B012)的照明度(B021),將照明度(B021)乘以變量α并賦值 給變量I ¢02 ;根據(jù)變量I ¢02 的值、待繪制場(chǎng)景點(diǎn)(B001)的材質(zhì)屬性以及待繪制場(chǎng) 景點(diǎn)(B001)的法向量與折射光線方向向量(B010)的反向向量的夾角,按照光照反射模型 計(jì)算元素(BOO; )表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)值,并將其加到待 繪制場(chǎng)景點(diǎn)(B001)的總光照值之中,結(jié)束元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn) (B001)的光照貢獻(xiàn)計(jì)算;(S022-5)創(chuàng)建一條起始于元素(BOO; )的交點(diǎn)S1成員變量表示的交點(diǎn)位置,方向 平行于元素(B003)的二次折射光線方向向量RS1成員變量表示的方向的射線(B023);創(chuàng)建 一條起始于元素(BOO; )的交點(diǎn)&成員變量表示的交點(diǎn)位置,方向平行于元素(BOO; )的二 次折射光線方向向量成員變量表示的方向的射線(B024);創(chuàng)建一條起始于元素(B003) 的交點(diǎn)&成員變量表示的交點(diǎn)位置,方向平行于元素(BOO; )的二次折射光線方向向量RS3 成員變量表示的方向的射線(B025);計(jì)算射線(B023)與平面(B002)的交點(diǎn)(B026);計(jì)算 射線(B024)與平面(B002)的交點(diǎn)(B027);計(jì)算射線(B025)與平面(B002)的交點(diǎn)(B028); 如果待繪制場(chǎng)景點(diǎn)(B001)處于由交點(diǎn)(B(^6)、交點(diǎn)(B027)和交點(diǎn)(B028)確定的三角形之 外或者待繪制場(chǎng)景點(diǎn)(B001)不在由交點(diǎn)¢0 )、交點(diǎn)(B027)和交點(diǎn)(B028)確定的直線段 之上,則結(jié)束元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算,否則根 據(jù)待繪制場(chǎng)景點(diǎn)(B001)到交點(diǎn)(B026)、交點(diǎn)(B027)和交點(diǎn)(B028)的距離以及元素(B003) 的二次折射光線方向向量RS1、二次折射光線方向向量RS2、二次折射光線方向向量RS3等三個(gè) 成員變量,通過(guò)插值計(jì)算出待繪制場(chǎng)景點(diǎn)(B001)處的二次折射光線方向向量(B029);(S022-6)創(chuàng)建一條起始于待繪制場(chǎng)景點(diǎn)(B001),方向平行于二次折射光線方向 向量(B029)的反向向量的射線(B030);計(jì)算射線(B030)與由元素(B003)的交點(diǎn)S1、交點(diǎn) &、交點(diǎn)&等三個(gè)成員變量表示的交點(diǎn)構(gòu)成的三角形的交點(diǎn)(B031);根據(jù)交點(diǎn)(B031)與元 素(B003)的交點(diǎn)S1、交點(diǎn)&、交點(diǎn)&等三個(gè)成員變量表示的交點(diǎn)的距離以及元素(B003)的 折射光線方向向量R1、折射光線方向向量&、折射光線方向向量R3等三個(gè)成員變量,通過(guò)插 值計(jì)算出交點(diǎn)(B031)處的折射光線方向向量(B032);(S022-7)創(chuàng)建一條起始于交點(diǎn)(B031),方向平行于折射光線方向向量(B032)的 反向向量的射線(B033);計(jì)算射線(B033)與由元素(B003)的頂點(diǎn)位置P1、頂點(diǎn)位置P2、頂 點(diǎn)位置P3等三個(gè)成員變量表示的頂點(diǎn)構(gòu)成的三角形面片¢01 的交點(diǎn)(B034);創(chuàng)建一條 起始于交點(diǎn)(B034),終止于光源位置的線段(B035);測(cè)試3D虛擬場(chǎng)景(A001)中是否有不 透明的三角形面片(B015)與線段(B035)相交,如果無(wú)交則轉(zhuǎn)(S022-8),否則三角形面片 (B012)相對(duì)于光源被部分遮擋,其產(chǎn)生的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn) 為0,結(jié)束元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算;(S022-8)如果交點(diǎn)(B026)、交點(diǎn)(B027)和交點(diǎn)(B028)構(gòu)成一個(gè)三角形(B036),則計(jì)算三角形(B036)在由元素(B003)的交點(diǎn)S1、交點(diǎn)&、交點(diǎn)&等三個(gè)成員變量表示的 交點(diǎn)所確定的平面上的投影面積(B037),再計(jì)算投影面積(B037)在三角形面片(B012)所 在平面上的投影面積(B038),最后計(jì)算投影面積(B038)與三角形面片¢01 的面積之比 (B039),將面積之比(B039)賦值給變量β ;如果交點(diǎn)(Β(^6)、交點(diǎn)(Β027)和交點(diǎn)(Β028) 構(gòu)成一條直線段,則將變量β設(shè)置為一個(gè)固定值;創(chuàng)建從交點(diǎn)(Β034)指向光源位置的向量 (Β040),對(duì)向量(Β040)進(jìn)行歸一化計(jì)算;根據(jù)三角形面片¢01 的三個(gè)頂點(diǎn)位置,計(jì)算三 角形面片(B012)的表面法向量(B020);根據(jù)光源到交點(diǎn)(B034)的距離、向量(B040)與表 面法向量(B020)的夾角以及光源的輻射亮度,計(jì)算三角形面片(B012)的照明度(B041),將 照明度(B041)乘以變量β并賦值給變量J(B04》;根據(jù)變量J(B04》的值、待繪制場(chǎng)景點(diǎn) (B001)的材質(zhì)屬性以及待繪制場(chǎng)景點(diǎn)(B001)的法向量與二次折射光線方向向量(B029)的 反向向量的夾角,按照光照反射模型計(jì)算元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn) (B001)的光照貢獻(xiàn)值,并將其加到待繪制場(chǎng)景點(diǎn)(B001)的總光照值之中,結(jié)束元素(B003) 表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算。
權(quán)利要求
1. 一種由光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景面焦散效果的繪制方法,其特征在于,所需 的數(shù)據(jù)結(jié)構(gòu)及實(shí)現(xiàn)步驟如下所需的數(shù)據(jù)結(jié)構(gòu)本發(fā)明提供一種存儲(chǔ)由光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景中的焦散 照明體的數(shù)據(jù)結(jié)構(gòu)(100),其包括光滑透明三角形面片的頂點(diǎn)位置P1、頂點(diǎn)位置P2、頂點(diǎn)位 置P3、頂點(diǎn)法向量N1、頂點(diǎn)法向量N2、頂點(diǎn)法向量N3、折射標(biāo)識(shí)F1、折射標(biāo)識(shí)F2、折射標(biāo)識(shí)F3、 折射光線方向向量R1、折射光線方向向量&、折射光線方向向量R3、相交標(biāo)識(shí)T1、相交標(biāo)識(shí) T2、相交標(biāo)識(shí)T3、交點(diǎn)S1、交點(diǎn)&、交點(diǎn)&、二次折射標(biāo)識(shí)G1、二次折射標(biāo)識(shí)(;2、二次折射標(biāo)識(shí) G3、二次折射光線方向向量RS1、二次折射光線方向向量RS2、二次折射光線方向向量等 18個(gè)成員變量; 實(shí)現(xiàn)步驟本發(fā)明的方法(010)部分創(chuàng)建由光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景(A001)中的所有焦 散照明體,具體步驟如下步驟(SOll)將3D虛擬場(chǎng)景(A001)中所有面向光源的光滑透明三角形面片存入三角 形面片列表KAOO》中;將3D虛擬場(chǎng)景(A002)中所有背向光源的光滑透明三角形面片存 入三角形面片列表2(A003)中;對(duì)三角形面片列表1(A002)中的每個(gè)三角形面片(A004), 創(chuàng)建一個(gè)數(shù)據(jù)結(jié)構(gòu)(100)類(lèi)型的變量(A005),并將變量(A005)與三角形面片(A004)相關(guān) 聯(lián);步驟(S012)將三角形面片列表1(A002)中所有三角形面片的頂點(diǎn)存入頂點(diǎn)列表 1 (A006)中,并且刪除重復(fù)的頂點(diǎn);對(duì)頂點(diǎn)列表1(A006)中的每個(gè)頂點(diǎn)(A007),創(chuàng)建一個(gè)從 頂點(diǎn)(A007)指向光源位置的向量(A008),如果頂點(diǎn)(A007)的法向量與向量(A008)的夾角 大于90度,則將頂點(diǎn)(A007)從頂點(diǎn)列表1(A006)中刪除;步驟(S013)對(duì)頂點(diǎn)列表1(A006)中的每個(gè)頂點(diǎn)(A009),做如下計(jì)算: (S013-1)根據(jù)頂點(diǎn)(A009)的位置及法向量、光源位置、頂點(diǎn)(A009)對(duì)應(yīng)的光滑透明 三角形面片的折射率,判斷從光源入射的光線在頂點(diǎn)(A009)位置處是否能發(fā)生折射,如果 能發(fā)生折射,則計(jì)算頂點(diǎn)(A009)位置處的折射光線方向向量(A010)并置FlagO = 1,否則 置FlagO = 0并轉(zhuǎn)步驟(S014);(S013-2)根據(jù)頂點(diǎn)(A009)的位置及折射光線方向向量(A010)創(chuàng)建折射光線射線 (AOll),判斷三角形面片列表1(A002)和三角形面片列表2(A003)中是否有三角形面片 (A012)與折射光線射線(AOll)相交,如果沒(méi)有,則置Flagl = 0并轉(zhuǎn)步驟(S014),否則置 Flagl = 1,并計(jì)算出離頂點(diǎn)(A009)最近的交點(diǎn)(A013),將交點(diǎn)(A013)位置處的三角形面 片(A014)與頂點(diǎn)(A009)相關(guān)聯(lián),再根據(jù)折射定律判斷在交點(diǎn)(A013)位置處能否發(fā)生折 射,如果發(fā)生折射則置Flag2 = 1并計(jì)算折射光線方向向量(A015),否則置Flag2 = 0并轉(zhuǎn) 步驟(SO 14);(S013-3)在三角形面片列表1(A002)中,找出包含頂點(diǎn)(A009)的所有三角形面片 (A016),計(jì)算頂點(diǎn)(A009)在各三角形面片(A016)的頂點(diǎn)序列中的編號(hào)i(i = 1,2,3);將 頂點(diǎn)(A009)的位置及法向量分別賦值給與各三角形面片(A016)相關(guān)聯(lián)的變量(A005)的 頂點(diǎn)位置Pi及頂點(diǎn)法向量Ni成員變量;將FlagO賦值給與各三角形面片(A016)相關(guān)聯(lián)的 變量(A0(^)的折射標(biāo)識(shí)Fi成員變量;將折射光線方向向量(A010)賦值給與各三角形面片 (A016)相關(guān)聯(lián)的變量(A0(^)的折射光線方向向量氏成員變量;將Flagl賦值給與各三角形面片(A016)相關(guān)聯(lián)的變量(A0(^)的相交標(biāo)識(shí)Ti成員變量;將交點(diǎn)(AOU)賦值給與各三 角形面片(A016)相關(guān)聯(lián)的變量(A0(^)的交點(diǎn)Si成員變量;將Flag2賦值給與各三角形面 片(A016)相關(guān)聯(lián)的變量(A005)的二次折射標(biāo)識(shí)Gi成員變量;將折射光線方向向量(A015) 賦值給與各三角形面片(A016)相關(guān)聯(lián)的變量(A0(^)的二次折射光線方向向量RSi成員變 量;步驟(S014):對(duì)于三角形面片列表1(A002)中的每個(gè)三角形面片(A017),做如下計(jì)算(S014-1)如果與三角形面片(A017)相關(guān)聯(lián)的變量(A005)的第i個(gè)折射標(biāo)識(shí)Fi成員 變量的值為0(i = 1,2,3),則將三角形面片(A017)從三角形面片列表1(A002)中刪除,否 則轉(zhuǎn)步驟(S015);(S014-2)如果與三角形面片(A017)相關(guān)聯(lián)的變量(A005)的第i個(gè)二次折射標(biāo)識(shí)Gi 成員變量的值為0(i = 1,2,3),則將三角形面片(A017)從三角形面片列表1(A002)中刪 除,否則轉(zhuǎn)步驟(S015);步驟(S015)將三角形面片列表1(A002)中的各個(gè)三角形面片(A018)所關(guān)聯(lián)的變量 (A005)存入一個(gè)列表(A019)中,列表(A019)定義了由光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景中 的所有焦散照明體;本發(fā)明的方法(020)部分實(shí)現(xiàn)待繪制場(chǎng)景點(diǎn)(B001)的焦散光照值的計(jì)算,具體步驟如下步驟(S021)創(chuàng)建一個(gè)包含待繪制場(chǎng)景點(diǎn)(B001)的平面(B002),且平面¢00 的法 向量平行于待繪制場(chǎng)景點(diǎn)(B001)的法向量;步驟(S022)對(duì)于列表(A019)中的每個(gè)元素(B003),做如下計(jì)算 (S022-1)如果元素(BOO; )的相交標(biāo)識(shí)T1、相交標(biāo)識(shí)T2、相交標(biāo)識(shí)T3等三個(gè)成員變量 都為1,則轉(zhuǎn)(S022-5),否則,創(chuàng)建一條起始于元素(B003)的頂點(diǎn)位置P1成員變量表示的頂 點(diǎn),方向平行于元素(B003)的折射光線方向向量隊(duì)成員變量表示的方向的射線(B004),創(chuàng) 建一條起始于元素(BOO; )的頂點(diǎn)位置P2成員變量表示的頂點(diǎn),方向平行于元素(B003)的 折射光線方向向量&成員變量表示的方向的射線(B005),創(chuàng)建一條起始于元素(B003)的 頂點(diǎn)位置P3成員變量表示的頂點(diǎn),方向平行于元素(BOO; )的折射光線方向向量&成員變 量表示的方向的射線(B006);(S022-2)計(jì)算射線(B004)與平面(B002)的交點(diǎn)(B007);計(jì)算射線(B005)與平面 (B002)的交點(diǎn)(B008);計(jì)算射線(B006)與平面(B002)的交點(diǎn)(B009);如果待繪制場(chǎng)景點(diǎn) (B001)處于由交點(diǎn)(B007)、交點(diǎn)(B008)和交點(diǎn)(B009)確定的三角形之外或者待繪制場(chǎng)景 點(diǎn)(B001)不在由交點(diǎn)(B007)、交點(diǎn)(B008)和交點(diǎn)(B009)確定的直線段之上,則結(jié)束元素 (B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算,否則根據(jù)待繪制場(chǎng)景 點(diǎn)(B001)到交點(diǎn)(B007)、交點(diǎn)(B008)和交點(diǎn)(B009)的距離以及元素(B003)的折射光線 方向向量札、折射光線方向向量&、折射光線方向向量民等三個(gè)成員變量,通過(guò)插值計(jì)算出 待繪制場(chǎng)景點(diǎn)(B001)處的折射光線方向向量(B010);(S022-3)創(chuàng)建一條起始于待繪制場(chǎng)景點(diǎn)(B001),方向平行于折射光線方向向量 (B010)的反向向量的射線(BOll);計(jì)算射線(BOll)與由元素(B003)的頂點(diǎn)位置P1、頂點(diǎn) 位置P2、頂點(diǎn)位置P3等三個(gè)成員變量表示的頂點(diǎn)構(gòu)成的三角形面片(B012)的交點(diǎn)(B013);創(chuàng)建一條起始于交點(diǎn)(B013),終止于光源位置的線段(B014);測(cè)試3D虛擬場(chǎng)景(A001)中 是否有不透明的三角形面片(B015)與線段(B014)相交,如果無(wú)交則轉(zhuǎn)(S022-4),否則三角 形面片¢01 相對(duì)于光源被部分遮擋,其產(chǎn)生的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光 照貢獻(xiàn)為0,結(jié)束元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算; (S022-4)如果交點(diǎn)(B007)、交點(diǎn)(B008)和交點(diǎn)(B009)構(gòu)成一個(gè)三角形(B016),貝丨J 計(jì)算三角形(B016)在三角形面片¢01 所在平面上的投影面積(B017),再計(jì)算投影面 積(B017)與三角形面片(B012)的面積之比(B018),將面積之比(B018)賦值給變量α ; 如果交點(diǎn)(Β007)、交點(diǎn)(Β008)和交點(diǎn)(Β009)構(gòu)成一條直線段,則將變量α設(shè)置為一個(gè)固 定值;創(chuàng)建從交點(diǎn)(BOU)指向光源位置的向量(Β019),對(duì)向量(Β019)進(jìn)行歸一化計(jì)算; 根據(jù)三角形面片¢01 的三個(gè)頂點(diǎn)位置,計(jì)算三角形面片¢01 的表面法向量(B020); 根據(jù)光源到交點(diǎn)(B013)的距離、向量(B019)與表面法向量(B020)的夾角以及光源的輻 射亮度,計(jì)算三角形面片(B012)的照明度(B021),將照明度(B021)乘以變量α并賦值 給變量I ¢02 ;根據(jù)變量I ¢02 的值、待繪制場(chǎng)景點(diǎn)(B001)的材質(zhì)屬性以及待繪制場(chǎng) 景點(diǎn)(B001)的法向量與折射光線方向向量(B010)的反向向量的夾角,按照光照反射模型 計(jì)算元素(BOO; )表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)值,并將其加到待 繪制場(chǎng)景點(diǎn)(B001)的總光照值之中,結(jié)束元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn) (B001)的光照貢獻(xiàn)計(jì)算;(S022-5)創(chuàng)建一條起始于元素(BOO; )的交點(diǎn)S1成員變量表示的交點(diǎn)位置,方向平行 于元素(B003)的二次折射光線方向向量RS1成員變量表示的方向的射線(B023);創(chuàng)建一條 起始于元素(BOO; )的交點(diǎn)&成員變量表示的交點(diǎn)位置,方向平行于元素(BOO; )的二次折 射光線方向向量舊2成員變量表示的方向的射線(B024);創(chuàng)建一條起始于元素(B003)的交 點(diǎn)&成員變量表示的交點(diǎn)位置,方向平行于元素(BOO; )的二次折射光線方向向量成員 變量表示的方向的射線(B025);計(jì)算射線(B023)與平面(B002)的交點(diǎn)(B026);計(jì)算射線 (B024)與平面(B002)的交點(diǎn)(B027);計(jì)算射線(B025)與平面(B002)的交點(diǎn)(B028);如 果待繪制場(chǎng)景點(diǎn)(B001)處于由交點(diǎn)(B(^6)、交點(diǎn)(B027)和交點(diǎn)(B028)確定的三角形之外 或者待繪制場(chǎng)景點(diǎn)(B001)不在由交點(diǎn)(B(^6)、交點(diǎn)(B027)和交點(diǎn)(B028)確定的直線段之 上,則結(jié)束元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算,否則根 據(jù)待繪制場(chǎng)景點(diǎn)(B001)到交點(diǎn)(B(^6)、交點(diǎn)(B027)和交點(diǎn)(B028)的距離以及元素(B003) 的二次折射光線方向向量RS1、二次折射光線方向向量RS2、二次折射光線方向向量等三 個(gè)成員變量,通過(guò)插值計(jì)算出待繪制場(chǎng)景點(diǎn)(B001)處的二次折射光線方向向量(B029);(S022-6)創(chuàng)建一條起始于待繪制場(chǎng)景點(diǎn)(B001),方向平行于二次折射光線方向向量 (B029)的反向向量的射線(B030);計(jì)算射線(B030)與由元素(B003)的交點(diǎn)S1、交點(diǎn)&、 交點(diǎn)&等三個(gè)成員變量表示的交點(diǎn)構(gòu)成的三角形的交點(diǎn)(B031);根據(jù)交點(diǎn)(B031)與元素 (B003)的交點(diǎn)S1、交點(diǎn)S2、交點(diǎn)&等三個(gè)成員變量表示的交點(diǎn)的距離以及元素(B003)的折 射光線方向向量R1、折射光線方向向量&、折射光線方向向量R3等三個(gè)成員變量,通過(guò)插值 計(jì)算出交點(diǎn)(B031)處的折射光線方向向量(B032);(S022-7)創(chuàng)建一條起始于交點(diǎn)(B031),方向平行于折射光線方向向量(B032)的反 向向量的射線(B033);計(jì)算射線(B033)與由元素(B003)的頂點(diǎn)位置P1、頂點(diǎn)位置P2、頂 點(diǎn)位置P3等三個(gè)成員變量表示的頂點(diǎn)構(gòu)成的三角形面片¢01 的交點(diǎn)(B034);創(chuàng)建一條起始于交點(diǎn)(B034),終止于光源位置的線段(B035);測(cè)試3D虛擬場(chǎng)景(A001)中是否有不 透明的三角形面片(B015)與線段(B035)相交,如果無(wú)交則轉(zhuǎn)(S022-8),否則三角形面片 (B012)相對(duì)于光源被部分遮擋,其產(chǎn)生的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn) 為0,結(jié)束元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算;(S022-8)如果交點(diǎn)(B(^6)、交點(diǎn)(B027)和交點(diǎn)(B028)構(gòu)成一個(gè)三角形(B036),貝丨J 計(jì)算三角形(B036)在由元素(BOO; )的交點(diǎn)S1、交點(diǎn)&、交點(diǎn)&等三個(gè)成員變量表示的交 點(diǎn)所確定的平面上的投影面積(B037),再計(jì)算投影面積(B037)在三角形面片(B012)所 在平面上的投影面積(B038),最后計(jì)算投影面積(B038)與三角形面片¢01 的面積之比 (B039),將面積之比(B039)賦值給變量β ;如果交點(diǎn)(Β(^6)、交點(diǎn)(Β027)和交點(diǎn)(Β028) 構(gòu)成一條直線段,則將變量β設(shè)置為一個(gè)固定值;創(chuàng)建從交點(diǎn)(Β034)指向光源位置的向量 (Β040),對(duì)向量(Β040)進(jìn)行歸一化計(jì)算;根據(jù)三角形面片¢01 的三個(gè)頂點(diǎn)位置,計(jì)算三 角形面片(B012)的表面法向量(B020);根據(jù)光源到交點(diǎn)(B034)的距離、向量(B040)與表 面法向量(B020)的夾角以及光源的輻射亮度,計(jì)算三角形面片¢01 的照明度(B041),將 照明度(B041)乘以變量β并賦值給變量J(B04》;根據(jù)變量J(B04》的值、待繪制場(chǎng)景點(diǎn) (B001)的材質(zhì)屬性以及待繪制場(chǎng)景點(diǎn)(B001)的法向量與二次折射光線方向向量(B029)的 反向向量的夾角,按照光照反射模型計(jì)算元素(B003)表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn) (B001)的光照貢獻(xiàn)值,并將其加到待繪制場(chǎng)景點(diǎn)(B001)的總光照值之中,結(jié)束元素(B003) 表示的焦散照明體對(duì)待繪制場(chǎng)景點(diǎn)(B001)的光照貢獻(xiàn)計(jì)算。
全文摘要
本發(fā)明公開(kāi)一種由光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景面焦散效果的繪制方法,屬于真實(shí)感3D虛擬場(chǎng)景繪制技術(shù)領(lǐng)域。當(dāng)前,常用光子映射算法繪制3D虛擬場(chǎng)景的面焦散效果。光子映射算法要求對(duì)光源發(fā)射的大量光子進(jìn)行跟蹤計(jì)算,這會(huì)嚴(yán)重降低3D虛擬場(chǎng)景面焦散效果的繪制效率。本發(fā)明首先創(chuàng)建由光滑表面折射產(chǎn)生的3D虛擬場(chǎng)景中的所有焦散照明體,并將其存入相應(yīng)的數(shù)據(jù)結(jié)構(gòu)之中;在繪制3D虛擬場(chǎng)景時(shí),通過(guò)計(jì)算待繪制場(chǎng)景點(diǎn)與焦散照明體之間的位置關(guān)系來(lái)判斷是否需要在該待繪制場(chǎng)景點(diǎn)的光照值中加入此焦散照明體的貢獻(xiàn),最終實(shí)現(xiàn)對(duì)面焦散效果的繪制。本發(fā)明方法可以很容易地集成到光線跟蹤算法框架之中,能顯著地提高3D虛擬場(chǎng)景繪制的真實(shí)感。
文檔編號(hào)G06T15/50GK102074038SQ20101060861
公開(kāi)日2011年5月25日 申請(qǐng)日期2010年12月28日 優(yōu)先權(quán)日2010年12月28日
發(fā)明者丁瑩, 馮欣, 底曉強(qiáng), 李奇, 楊華民, 范靜濤, 蔣振剛, 陳占芳, 陳純毅, 韓成 申請(qǐng)人:長(zhǎng)春理工大學(xué)