專利名稱:一種產(chǎn)生體積陰影的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種產(chǎn)生體積陰影的方法及其系統(tǒng)。
背景技術(shù):
當(dāng)在一個(gè)物體和光源之間存在障礙物時(shí),該物體將會(huì)處在陰影中。障礙物 產(chǎn)生的陰影區(qū)域稱為體積陰影。體積陰影可以由輪廓邊擴(kuò)展到 一 定距離以外或 者無窮遠(yuǎn)處得到。輪廓邊的確定方法有很多種,基本方法為確定出被朝向相反 (一個(gè)面向光源,另一個(gè)背向光源)的兩個(gè)三角形所共享的邊,因?yàn)橹挥羞@樣的 邊會(huì)最終成為輪廓邊,其他的邊在光源看來都在物體投影的內(nèi)部而不是邊緣。圖1A所示為輪廓邊示意圖,該圖中ab邊為面V0和面VI的^^共邊,n0和nl 分別為V0和V1的法線,V0面向光源,而V1背向光源,則ab邊為輪廓邊。 圖1B所示為非輪廓邊示意圖,該圖中的ab邊為面VO和面VI的公共邊,n0 和nl分別為VO和VI的法線,V0和V1都面向光源,則ab邊為非輪廓邊。 圖2所示為體積陰影的示意圖,點(diǎn)L為光源,ABCD為產(chǎn)生陰影的物體,在底 板上形成的陰影為EFGH,體積陰影指AEFB, BFGC, CGHD, DHEA所組成 的一個(gè)區(qū)域。只要獲得AEFB, BFGC, CGHD, DHEA,并將它們繪制出來, 即可繪制出陰影EFGH?,F(xiàn)有技術(shù)中,產(chǎn)生體積陰影時(shí)需要在中央處理器CPU中對(duì)物體三維模型 的各頂點(diǎn)添加輔助的頂點(diǎn),判斷出該物體三維模型的輪廓邊頂點(diǎn),根據(jù)光源的 方向,將輪廓邊頂點(diǎn)對(duì)應(yīng)的輔助頂點(diǎn)在反向光源的方向進(jìn)行偏移,產(chǎn)生體積陰 影,然后CPU將該體積陰影的數(shù)據(jù)傳送給圖像處理器(GPU, Graph Processing Unit),由GPU對(duì)體積陰影進(jìn)行渲染,繪制出體積陰影。參閱圖3所示,CPU
中的預(yù)處理過程如下步驟301、用三角形網(wǎng)格建立物體的三維模型,對(duì)該才莫型中的每個(gè)面的每 個(gè)邊的兩個(gè)頂點(diǎn)A和B添加上共用該邊的兩個(gè)面的法線,添加兩個(gè)輔助頂點(diǎn) Al和B1分別與原本兩個(gè)頂點(diǎn)數(shù)據(jù)A和B相同(頂點(diǎn)位置,兩個(gè)法線均相同), 并在A和B添加上一項(xiàng)為1的數(shù)據(jù),在Al和B1添加上一項(xiàng)為0的數(shù)據(jù)以示 區(qū)別。步驟302、遍歷三維^f莫型的所有三角形,根據(jù)各三角形的法線方向和光源 的方向計(jì)算函數(shù)dot3 (light_direction, triangle—normal)的取4直,用該函數(shù)4直判 斷各三角形是面向光源還是背向光源,當(dāng)函數(shù)dot3 ( light_direction , triangle_normal )的取值大于零時(shí),三角形為面向光源;當(dāng)函數(shù)dot3<0 (light_direction, triangle—normal)的取值小于零時(shí),三角形為背向光源。對(duì)于 面向光源的三角形,將該三角形的三條邊壓入棧內(nèi)并與該棧中的其他邊進(jìn)行比 較,如果存在重復(fù)的邊,則將該邊刪除;對(duì)三維模型的所有三角形的所有邊進(jìn) 行處理后,棧中的邊則為輪廓邊。步驟303、根據(jù)光源的方向,將輪廓邊上的各頂點(diǎn)對(duì)應(yīng)的輔助頂點(diǎn)分別在 反向光源的方向進(jìn)行偏移,獲得體積陰影。進(jìn)行完上述預(yù)處理,CPU將處理得到的體積陰影數(shù)據(jù)傳送給GPU, GPU 對(duì)體積陰影進(jìn)行渲染,繪制出體積陰影。采用上述方法,若輪廓邊數(shù)目為n,在CPU中獲得體積陰影時(shí),需要?jiǎng)討B(tài) 生產(chǎn)2n個(gè)三角形,當(dāng)光源產(chǎn)生運(yùn)動(dòng)時(shí),輪廓邊需要?jiǎng)討B(tài)重新生成,而這些都 需要由CPU進(jìn)行預(yù)處理后獲得體積陰影的數(shù)據(jù),然后將體積陰影的數(shù)據(jù)傳送 給GPU,不僅耗時(shí),同時(shí)增大了系統(tǒng)的開銷。并且,采用該方法,當(dāng)三維模 型有n個(gè)頂點(diǎn),平均每個(gè)頂點(diǎn)有m個(gè)面共有時(shí),則該三維模型一共有mn/3個(gè) 面需要進(jìn)行處理,在預(yù)處理時(shí)會(huì)產(chǎn)生4mn個(gè)頂點(diǎn),渲染體積陰影時(shí)需要處理 4mn個(gè)頂點(diǎn),通常m大于等于3,使得渲染時(shí)GPU資源開銷進(jìn)一步增大。發(fā)明內(nèi)容本發(fā)明提供一種體積陰影的實(shí)現(xiàn)方法及系統(tǒng),用以解決現(xiàn)有技術(shù)中存在的產(chǎn)生體積陰影時(shí)cpu進(jìn)行預(yù)處理后獲得的頂點(diǎn)數(shù)量較大,cpu和gpu間傳輸 體積陰影數(shù)據(jù)時(shí)存在大量的數(shù)據(jù)交互,不僅耗時(shí),也增大了系統(tǒng)開銷的問題。本發(fā)明提供以下技術(shù)方案一種產(chǎn)生體積陰影的方法,包括如下步驟為物體的三維模型的每個(gè)頂點(diǎn)添加一個(gè)輔助頂點(diǎn);利用與背景顏色不同的顏色渲染所述物體的三維模型,并將渲染后的物體 的三維模型的頂點(diǎn)轉(zhuǎn)換到屏幕空間得到各頂點(diǎn)的屏幕位置;分別在各頂點(diǎn)的屏幕位置所對(duì)應(yīng)的像素點(diǎn)周圍的多個(gè)像素位置對(duì)渲染后 得到的紋理進(jìn)行采樣,并依據(jù)采樣的紋理的顏色值確定屬于物體輪廓邊的頂 點(diǎn);將屬于物體輪廓邊的頂點(diǎn)的輔助頂點(diǎn)進(jìn)行偏移產(chǎn)生體積陰影。 其中,在中央處理器中為頂點(diǎn)的凄t據(jù)項(xiàng)中添加標(biāo)識(shí)區(qū)分輔助頂點(diǎn),并將添 加了輔助頂點(diǎn)的物體的三維模型數(shù)據(jù)傳送給圖形處理器gpu,由gpu完成后續(xù)的步驟。較佳的,將紋理中背景顏色值取值為第一值,渲染所述物體的三維模型的 顏色值取值為第二值,判斷采樣的多個(gè)像素的顏色值中是否包含第一值;若 是,則確定頂點(diǎn)不是輪廓邊頂點(diǎn),若否,則確定頂點(diǎn)為輪廓邊頂點(diǎn)。其中,對(duì)所述物體的三維模型的各頂點(diǎn)的屏幕位置所對(duì)應(yīng)的像素點(diǎn)的周圍 8個(gè)像素位置對(duì)紋理進(jìn)行采樣。進(jìn)一步,還包括在像素著色器中輸入標(biāo)識(shí)各頂點(diǎn)是否為輪廓邊頂點(diǎn)的項(xiàng), 并根據(jù)該項(xiàng)顯示輪廓邊頂點(diǎn)所產(chǎn)生的像素。 一種體積陰影發(fā)生裝置,包括接收單元,用于接收添加了輔助頂點(diǎn)的物體的三維模型的數(shù)據(jù); 紋理生產(chǎn)單元,用于利用與背景顏色不同的顏色渲染物體的三維模型,獲
得該物體的三維模型的紋理,并將該紋理傳送給處理單元;處理單元,用于將渲染后的物體的三維模型的頂點(diǎn)轉(zhuǎn)換到屏幕空間,并分 別在各頂點(diǎn)的屏幕位置所對(duì)應(yīng)的像素點(diǎn)周圍的多個(gè)像素位置對(duì)渲染后得到的 紋理進(jìn)行采樣,并依據(jù)采樣的紋理的顏色值確定屬于物體輪廓邊的頂點(diǎn),以及 將屬于物體輪廓邊的頂點(diǎn)的輔助頂點(diǎn)進(jìn)行偏移產(chǎn)生體積陰影。較佳的,所述裝置還包括像素著色器,用于根據(jù)標(biāo)識(shí)各頂點(diǎn)是否為輪廓邊頂點(diǎn)的項(xiàng)顯示輪廓邊頂點(diǎn) 所產(chǎn)生的像素。一種產(chǎn)生體積陰影的系統(tǒng),包括中央處理器CPU,用于對(duì)物體的三維模型的每個(gè)頂點(diǎn)添加輔助頂點(diǎn),并輸 出添加了輔助頂點(diǎn)的物體的三維模型數(shù)據(jù);圖形處理器GPU,用于接收添加了輔助頂點(diǎn)的物體的三維模型數(shù)據(jù),并利 用與背景顏色不同的顏色渲染該物體的三維模型,通過采樣渲染后得到的紋 理確定屬于物體輪廓邊的頂點(diǎn),以及將屬于物體輪廓邊頂點(diǎn)的輔助頂點(diǎn)進(jìn)行 偏移產(chǎn)生體積陰影。較佳的,所述中央處理器CPU包括頂點(diǎn)添加單元,用于對(duì)物體的三維模型的各頂點(diǎn)添加輔助頂點(diǎn)J 輸出單元,用于輸出添加了輔助頂點(diǎn)的物體的三維模型數(shù)據(jù)。 所述圖形處理器GPU包括接收單元,用于接收添加了輔助頂點(diǎn)的物體的三維模型數(shù)據(jù); 紋理生產(chǎn)單元,用于利用與背景顏色不同的顏色渲染物體的三維模型,獲 得該物體三維模型的紋理;處理單元,用于將渲染后的物體的三維模型的頂點(diǎn)轉(zhuǎn)換到屏幕空間,并分 別在各頂點(diǎn)的屏幕位置所對(duì)應(yīng)的像素點(diǎn)周圍的多個(gè)像素位置對(duì)渲染后得到的 紋理進(jìn)行采樣,并依據(jù)采樣的紋理的顏色值確定屬于物體輪廓邊的頂點(diǎn),以 及將屬于物體輪廓邊的頂點(diǎn)的輔助頂點(diǎn)進(jìn)行偏移產(chǎn)生體積陰影;像素著色器,用于根據(jù)標(biāo)識(shí)各頂點(diǎn)是否為輪廓邊頂點(diǎn)的項(xiàng)顯示輪廓邊頂點(diǎn) 所產(chǎn)生的像素。本發(fā)明有益效果如下采用本發(fā)明實(shí)現(xiàn)體積陰影時(shí),在CPU中進(jìn)行預(yù)處理時(shí),只需要對(duì)物體的 三維模型的各頂點(diǎn)分別添加一個(gè)輔助頂點(diǎn),不需要添加三維模型中各面的法 線,減少了 CPU的資源開銷;同時(shí),產(chǎn)生體積陰影在GPU中進(jìn)行,減少了 GPU與CPU之間的數(shù)據(jù)交互,同時(shí)降低了CPU的開銷;而且,采用本發(fā)明進(jìn) 行預(yù)處理后生產(chǎn)的頂點(diǎn)數(shù)量較少,進(jìn)一步降低了 GPU的資源開銷。
圖1A、圖1B分別為現(xiàn)有技術(shù)中輪廓邊和非輪廓邊的示意圖; 圖2為現(xiàn)有技術(shù)中的體積陰影示意圖; 圖3為現(xiàn)有技術(shù)中產(chǎn)生體積陰影的預(yù)處理流程圖; 圖4為本發(fā)明實(shí)施例中的系統(tǒng)結(jié)構(gòu)示意圖; 圖5為本發(fā)明實(shí)施例中產(chǎn)生體積陰影的處理流程圖; 圖6為本發(fā)明實(shí)施例中輪廓邊頂點(diǎn)上的輔助頂點(diǎn)進(jìn)行偏移產(chǎn)生體積陰影的 示意圖;圖7A為本發(fā)明實(shí)施例中圓球物體的示意圖;圖7B為本發(fā)明實(shí)施例中圓球物體的空間模型示意圖;圖8為本發(fā)明實(shí)施例中圓珎一莫型的紋理示意圖;圖9為本發(fā)明實(shí)施例中對(duì)紋理采樣后獲得的輪廓邊的示意圖。
具體實(shí)施方式
本實(shí)施例中CPU對(duì)物體的三維模型的每個(gè)頂點(diǎn)添加輔助頂點(diǎn),并將添加 了輔助頂點(diǎn)的物體的三維模型數(shù)據(jù)傳送給GPU; GPU利用與背景顏色不同的 顏色渲染所述物體的三維模型,并將渲染后的物體的三維模型的頂點(diǎn)轉(zhuǎn)換到
屏幕空間得到各頂點(diǎn)的屏幕位置,然后在各頂點(diǎn)的屏幕位置所對(duì)應(yīng)的像素點(diǎn) 周圍的多個(gè)像素位置對(duì)渲染后得到的紋理進(jìn)行采樣,并依據(jù)采樣的紋理的顏色值確定屬于物體輪廓邊的頂點(diǎn);將屬于物體輪廓邊的頂點(diǎn)的輔助頂點(diǎn)進(jìn)行 偏移產(chǎn)生體積陰影。進(jìn)一步,在像素著色器中添加標(biāo)識(shí)各頂點(diǎn)是否為輪廓邊 頂點(diǎn)的項(xiàng),根據(jù)該項(xiàng)顯示輪廓邊頂點(diǎn)所產(chǎn)生的像素。參閱圖4所示,產(chǎn)生體積陰影的系統(tǒng)包括CPU410和GPU420。其中 CPU410包括頂點(diǎn)添加單元4101和輸出單元4102; GPU420包括接收單元4201、 紋理生產(chǎn)單元4202、處理單元4203和像素著色器4204。頂點(diǎn)添加單元4101用于對(duì)物體的三維模型的各頂點(diǎn)添加輔助頂點(diǎn);輸出 單元4102用于將添加了輔助頂點(diǎn)的物體的三維模型數(shù)據(jù)傳送給GPU420中的 接收單元4201。接收單元4201用于接收添加了輔助頂點(diǎn)的物體的三維模型數(shù)據(jù),并將該 數(shù)據(jù)傳送給紋理生產(chǎn)單元4202;紋理生產(chǎn)單元4202用于利用與背景顏色不同 的顏色渲染物體的三維模型,獲得該物體的三維模型的紋理,并將該紋理傳送 給處理單元4203;處理單元4203用于將渲染后的物體的三維模型的頂點(diǎn)轉(zhuǎn)換 到屏幕空間得到各頂點(diǎn)的屏幕位置,分別在各頂點(diǎn)的屏幕位置所對(duì)應(yīng)的像素點(diǎn) 周圍的多個(gè)像素位置對(duì)渲染后得到的紋理進(jìn)行采樣,并依據(jù)采樣的紋理的顏色 值確定屬于物體輪廓邊的頂點(diǎn),以及將屬于物體輪廓邊的頂點(diǎn)的輔助頂點(diǎn)進(jìn)行 偏移產(chǎn)生體積陰影,并在像素著色器4204中輸入標(biāo)識(shí)各頂點(diǎn)是否為輪廓邊頂 點(diǎn)的項(xiàng);像素著色器4204用于根據(jù)所述項(xiàng)顯示輪廓邊頂點(diǎn)的像素,繪制出體 積陰影。利用與背景顏色不同的顏色渲染物體的三維模型,獲得該物體的三維模 型的紋理時(shí),將紋理中背景顏色值取值為第一值,渲染所述物體的三維模型 的顏色值取值為第二值,判斷采樣的多個(gè)像素的顏色值中是否包含第 一值; 如果包含第一值,則確定頂點(diǎn)不是輪廓邊頂點(diǎn),若否,則確定頂點(diǎn)為輪廓邊 頂點(diǎn)。本實(shí)施例以第一值取為1,第二值取為O進(jìn)行說明。
參閱圖5所示,產(chǎn)生體積陰影的處理過程包括如下步驟步驟501、 CPU對(duì)物體的三維模型的每個(gè)頂點(diǎn)添加一個(gè)輔助頂點(diǎn),并將添 加了輔助頂點(diǎn)的物體的三維模型數(shù)據(jù)傳送給GPU。步驟502、 GPU獲得物體的三維模型數(shù)據(jù)后,渲染所述物體的三維;f莫型時(shí), 以白色為背景,黑色為顏色渲染該物體,得到該物體模型的紋理,該紋理中 白色取值為1,黑色取值為0。步驟503、將渲染后的物體的三維模型的頂點(diǎn)轉(zhuǎn)換到屏幕空間得到頂點(diǎn)的 屏幕位置,以頂點(diǎn)屏幕位置所對(duì)應(yīng)的像素點(diǎn)的周圍8個(gè)像素位置對(duì)紋理進(jìn)行 采樣,并對(duì)采樣值求和。步驟504、判斷采樣值是否為O,如果為O,執(zhí)行步驟506,否則,繼續(xù)步 驟505。步驟505、當(dāng)采樣值不為零時(shí),將該像素對(duì)應(yīng)的輔助頂點(diǎn)在反向光源的方 向進(jìn)行偏移,產(chǎn)生體積陰影,并在像素著色器中輸入一個(gè)為O的項(xiàng),標(biāo)識(shí)該像 素為輪廓邊頂點(diǎn)對(duì)應(yīng)的像素,然后執(zhí)行步驟507。步驟506、在像素著色器中輸入一個(gè)-1的項(xiàng),標(biāo)識(shí)像素為非輪廓邊對(duì)應(yīng) 的像素,然后繼續(xù)步驟507。步驟507、像素著色器根據(jù)各像素的標(biāo)識(shí)項(xiàng)繪制出體積陰影。圖6所示為與輪廓邊頂點(diǎn)數(shù)據(jù)相同的輔助頂點(diǎn)進(jìn)^f亍偏移產(chǎn)生體積陰影的示 意圖。在CPU中進(jìn)行預(yù)處理時(shí),對(duì)應(yīng)于每個(gè)頂點(diǎn)分別添加了數(shù)據(jù)相同的輔助 頂點(diǎn),并添加不同的項(xiàng)用于區(qū)分原頂點(diǎn)和添加的頂點(diǎn)。在圖中輪廓邊AB的頂 點(diǎn)A和B對(duì)應(yīng)的輔助頂點(diǎn)分別為Al和B1, Al和B1分別從原頂點(diǎn)A和B位 置出發(fā),反向光源的方向進(jìn)行偏移,得到A-Al-Bl, A-B1-B的順序三角 形;對(duì)輪廓邊BC、 CD和DA的頂點(diǎn)對(duì)應(yīng)的輔助頂點(diǎn)進(jìn)行類似的處理,即可獲 得體積陰影。本實(shí)施例中利用物體三維模型的頂點(diǎn)紋理,直接探測(cè)輪廓邊頂點(diǎn),并使用 像素剔除非輪廓邊頂點(diǎn)像素,以一個(gè)很小的消耗獲得了體積陰影。以下以 一個(gè)圓J求物體為例子進(jìn)一步進(jìn)行說明。圖7A所示為一個(gè)圓球物體;圖7B所示為采用三角形網(wǎng)格建立的圓球物 體的三維模型。在CPU中進(jìn)行預(yù)處理時(shí),對(duì)圓球的三維模型的每個(gè)頂點(diǎn)添加上輔助頂點(diǎn), 為了便于進(jìn)行區(qū)分,對(duì)原頂點(diǎn)添加一項(xiàng)為1的數(shù)據(jù),對(duì)添加的頂點(diǎn)添加一項(xiàng)為 0的數(shù)據(jù)。將添加完輔助頂點(diǎn)的圓球的三維模型數(shù)據(jù)傳送給GPU。在GPU中,以白色為背景,黑色為顏色渲染圓球的三維模型,得到紋理1。 圖8所示為該紋理的示意圖。獲得圓球三維模型的紋理后,將圓球三維模型各頂點(diǎn)轉(zhuǎn)換到屏幕空間得到 各頂點(diǎn)的屏幕位置,并以各頂點(diǎn)屏幕位置所對(duì)應(yīng)的像素點(diǎn)的周圍8個(gè)像素位置 對(duì)紋理1進(jìn)行采樣,紋理1中黑色的采樣值為0,白色的采樣值為1,將8個(gè) 采樣值累加得到sum。判斷sum的取值,如果sumX),說明該頂點(diǎn)的屏幕空間 周圍8個(gè)像素中有白色的像素,該頂點(diǎn)在邊緣上,該頂點(diǎn)為輪廓邊頂點(diǎn),則將 該頂點(diǎn)對(duì)應(yīng)的新增頂點(diǎn)在反向光源的方向進(jìn)行偏移,產(chǎn)生體積陰影,并向像素 著色器輸入一個(gè)為0的項(xiàng)。如果sum = 0,則向像素著色器輸入一個(gè)為-1的項(xiàng)。 像素著色器根據(jù)這個(gè)項(xiàng)對(duì)像素進(jìn)行刪除,以剔除不是輪廓邊頂點(diǎn)所產(chǎn)生的像 素,然后根據(jù)輪廓邊頂點(diǎn)繪制出體積陰影。采樣處理后獲得的輪廓邊如圖9所 示。本實(shí)施例中對(duì)物體的三維模型進(jìn)行預(yù)處理時(shí),只需要添加輔助頂點(diǎn),不需 要添加各面的法線,而且如果原模型有n個(gè)頂點(diǎn),平均每個(gè)頂點(diǎn)由m個(gè)面共有, 則共有mn/3個(gè)面,預(yù)處理后得到的頂點(diǎn)為2n個(gè),頂點(diǎn)數(shù)據(jù)輸入減少了很多倍, 降低了CPU的資源開銷,同時(shí),在GPU中生產(chǎn)體積陰影,對(duì)紋理的像素處理 時(shí)不渲染非輪廓邊頂點(diǎn)產(chǎn)生的像素,處理效率進(jìn)一步提升。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā) 明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及 其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1、 一種產(chǎn)生體積陰影的方法,其特征在于,包括如下步驟 為物體的三維模型的每個(gè)頂點(diǎn)添加 一個(gè)輔助頂點(diǎn);利用與背景顏色不同的顏色渲染所述物體的三維模型,并將渲染后的物體 的三維才莫型的頂點(diǎn)轉(zhuǎn)換到屏幕空間得到各頂點(diǎn)的屏幕位置;分別在各頂點(diǎn)的屏幕位置所對(duì)應(yīng)的像素點(diǎn)周圍的多個(gè)像素位置對(duì)渲染后 得到的紋理進(jìn)行采樣,并依據(jù)采樣的紋理的顏色值確定屬于物體輪廓邊的頂 點(diǎn);將屬于物體輪廓邊的頂點(diǎn)的輔助頂點(diǎn)進(jìn)行偏移產(chǎn)生體積陰影。
2、 如權(quán)利要求1所述的方法,其特征在于,在中央處理器中為頂點(diǎn)的數(shù) 據(jù)項(xiàng)中添加標(biāo)識(shí)區(qū)分輔助頂點(diǎn),并將添加了輔助頂點(diǎn)的物體的三維模型數(shù)據(jù)傳 送給圖形處理器GPU,由GPU完成后續(xù)的步驟。
3、 如權(quán)利要求1所述的方法,其特征在于,將紋理中背景顏色值取值為 第一值,渲染所述物體的三維模型的顏色值取值為第二值,判斷采樣的多個(gè) 像素的顏色值中是否包含第一值;若是,則確定頂點(diǎn)不是輪廓邊頂點(diǎn),若否, 則確定頂點(diǎn)為輪廓邊頂點(diǎn)。
4、 如權(quán)利要求3所述的方法,其特征在于,對(duì)所述物體的三維模型的各 頂點(diǎn)的屏幕位置所對(duì)應(yīng)的像素點(diǎn)的周圍8個(gè)像素位置對(duì)紋理進(jìn)行采樣。
5、 如權(quán)利要求4所述的方法,其特征在于,還包括在像素著色器中輸 入標(biāo)識(shí)各頂點(diǎn)是否為輪廓邊頂點(diǎn)的項(xiàng),并根據(jù)該項(xiàng)顯示輪廓邊頂點(diǎn)所產(chǎn)生的像 素。
6、 一種體積陰影發(fā)生裝置,其特征在于,包括接收單元,用于接收添加了輔助頂點(diǎn)的物體的三維模型的數(shù)據(jù); 紋理生產(chǎn)單元,用于利用與背景顏色不同的顏色渲染物體的三維模型,獲 得該物體的三維模型的紋理,并將該紋理傳送給處理單元;處理單元,用于將渲染后的物體的三維模型的頂點(diǎn)轉(zhuǎn)換到屏幕空間,并分別在各頂點(diǎn)的屏幕位置所對(duì)應(yīng)的像素點(diǎn)周圍的多個(gè)像素位置對(duì)渲染后得到的 紋理進(jìn)行采樣,并依據(jù)采樣的紋理的顏色值確定屬于物體輪廓邊的頂點(diǎn),以及 將屬于物體輪廓邊的頂點(diǎn)的輔助頂點(diǎn)進(jìn)行偏移產(chǎn)生體積陰影。
7、 如權(quán)利要求6所述的裝置,其特征在于,還包括像素著色器,用于根據(jù)標(biāo)識(shí)各頂點(diǎn)是否為輪廓邊頂點(diǎn)的項(xiàng)顯示輪廓邊頂點(diǎn) 所產(chǎn)生的像素。
8、 一種產(chǎn)生體積陰影的系統(tǒng),其特征在于,包括中央處理器CPU,用于對(duì)物體的三維模型的每個(gè)頂點(diǎn)添加輔助頂點(diǎn),并輸 出添加了輔助頂點(diǎn)的物體的三維模型數(shù)據(jù);圖形處理器GPU,用于接收添加了輔助頂點(diǎn)的物體的三維模型數(shù)據(jù),并利 用與背景顏色不同的顏色渲染該物體的三維^^莫型,通過采樣渲染后得到的紋 理確定屬于物體輪廓邊的頂點(diǎn),以及將屬于物體輪廓邊頂點(diǎn)的輔助頂點(diǎn)進(jìn)行 偏移產(chǎn)生體積陰影。
9、 如權(quán)利要求8所述的系統(tǒng),其特征在于,所述中央處理器CPU包括 頂點(diǎn)添加單元,用于對(duì)物體的三維模型的各頂點(diǎn)添加輔助頂點(diǎn); 輸出單元,用于輸出添加了輔助頂點(diǎn)的物體的三維模型數(shù)據(jù)。
10、 如權(quán)利要求9所述的系統(tǒng),其特征在于,所述圖形處理器GPU包括: 接收單元,用于接收添加了輔助頂點(diǎn)的物體的三維模型數(shù)據(jù); 紋理生產(chǎn)單元,用于利用與背景顏色不同的顏色渲染物體的三維模型,獲得該物體三維^^莫型的紋理;處理單元,用于將渲染后的物體的三維模型的頂點(diǎn)轉(zhuǎn)換到屏幕空間,并分 別在各頂點(diǎn)的屏幕位置所對(duì)應(yīng)的像素點(diǎn)周圍的多個(gè)像素位置對(duì)渲染后得到的 紋理進(jìn)行采樣,并依據(jù)采樣的紋理的顏色值確定屬于物體輪廓邊的頂點(diǎn),以 及將屬于物體輪廓邊的頂點(diǎn)的輔助頂點(diǎn)進(jìn)行偏移產(chǎn)生體積陰影;像素著色器,用于根據(jù)標(biāo)識(shí)各頂點(diǎn)是否為輪廓邊頂點(diǎn)的項(xiàng)顯示輪廓邊頂點(diǎn) 所產(chǎn)生的像素。
全文摘要
本發(fā)明公開了一種產(chǎn)生體積陰影的方法,該方法包括為物體三維模型的每個(gè)頂點(diǎn)添加一個(gè)輔助頂點(diǎn);利用與背景顏色不同的顏色渲染所述物體三維模型,并將渲染后的物體三維模型的頂點(diǎn)轉(zhuǎn)換到屏幕空間得到各頂點(diǎn)的屏幕位置;分別在各頂點(diǎn)的屏幕位置所對(duì)應(yīng)的像素點(diǎn)周圍的多個(gè)像素位置對(duì)渲染后得到的紋理進(jìn)行采樣,并依據(jù)采樣的紋理的顏色值確定屬于物體輪廓邊的頂點(diǎn);將屬于物體輪廓邊的頂點(diǎn)的輔助頂點(diǎn)進(jìn)行偏移產(chǎn)生體積陰影。采用該方法,不僅降低了對(duì)物體三維模型的頂點(diǎn)數(shù)據(jù)的處理量,提高了產(chǎn)生體積陰影的效率,而且降低了系統(tǒng)開銷。本發(fā)明同時(shí)公開了一種產(chǎn)生體積陰影的系統(tǒng)。
文檔編號(hào)G06T15/60GK101145246SQ20061012757
公開日2008年3月19日 申請(qǐng)日期2006年9月14日 優(yōu)先權(quán)日2006年9月14日
發(fā)明者皓 劉 申請(qǐng)人:騰訊科技(深圳)有限公司