專利名稱:一種實現透明三維物體渲染的方法
技術領域:
本發明涉及廣電領域的電視節目制作領域,尤其涉及一種實現透明三維物體渲染的方法。
背景技術:
隨著視頻技術越來越快的發展,人們對于視頻顯示內容的要求也越來越高,尤其是希望視頻畫面的立體顯示效果越來越好。現有技術中對三維圖形的渲染的主要采用去除隱藏面的方法。從觀察點來看,離觀察者稍近的表面遮檔了后面的部分。通常的方法是,有一個深度緩沖區來記錄已經渲染的像素的深度值,當渲染當前的像素時,判斷此像素的深度值是否大于緩沖區中對應的深度值(左手坐標系中),如是表示此像素在已經渲染的像素之前,可以將此像素顏色寫入相應的顏色緩沖區,并替換深度緩沖區中的相應值。對于一個三維物體而言,物體的背面永遠不會顯示,觀察者只能看到朝向他的那部分物體。但如果這個物體時透明物體的時候,我們觀察者是希望透過物體的正面能看到物體的背面。這個時候就不能單純的通過深度值來做像素的剔除。發明人在實施本發明的過程中,發現現有技術中不能顯示透明的三維物體。
發明內容
為了解決上述現有技術的缺點,本發明的主要目的是提供一種實現透明三維物體渲染的方法,以解決現有技術三維物體不能透明顯示的問題。為了達到上述目的,本發明提供了一種實現透明三維物體渲染的方法,具體包括根據三角片的三個頂點值、法向量和觀察矩陣判斷三角片是正對著觀察者還是背對著觀察者;計算背對著觀察者的頂點的光照顏色和深度值;對背對著觀察者的每個三角片進行光柵化,并存儲三角片背面顏色值;計算正對著觀察者的頂點的光照顏色和深度值;對正對著觀察者的每個三角片進行光柵化,并存儲三角片正面顏色值;對存儲的三角片的背面顏色值與正面顏色值進行混合,完成透明三維物體的渲染。本發明的一種實現透明三維物體渲染的方法通過首先計算正對著與背對著觀察者的每個三角片的光照顏色并存儲在相應的正面與背面顏色緩沖區內,并將存儲的正面顏色值與背面顏色值進行混合的方式可以實現透明三維物體的渲染,并且采用本申請的技術方法可以減少大量系統資源的占用,并能很好的將三維物體透明顯示,填補了透明三維物體渲染的空白。
為了更清楚的說明本發明實施例的技術方案,下面將對實施例描述中所需要使用的附圖作簡單的介紹,顯而易見的,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。圖I為本發明的一種實現透明三維物體的渲染方法。
具體實施例方式下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完 整的描述,顯然所描述的實施例僅是本發明的一部分實施例,不是全部的實施例,基于本發明中的實施例,本領域普通技術人員在沒有付出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。本發明實施例一方面提供了一種實現透明三維物體渲染的方法,如圖I所示,具體為在進行下述計算之前需要先準備兩個顏色緩沖區正面顏色緩沖區bufferFront,背面顏色緩沖區bufferBack并初始化。這兩個顏色緩沖區分別用來存儲正面和背面顏色的渲染結果。準備兩個深度緩沖區正面深度緩沖區depthBufferF,背面深度緩沖區depthBufferB,用來在正面和背面分別渲染的時候進行深度判斷。步驟SI :根據三角片的三個頂點值、法向量及觀察矩陣,計算判斷此三角片是正對著觀察者還是背對著觀察者。步驟S2 :根據步驟SI判斷的結果將構成物體的三角片分為兩類。步驟S3 :計算背對著觀察者的頂點的光照顏色和深度值。因為光照透過正面照在背對著觀察者三角片的背面,所以在計算背對著觀察者的頂點的光照顏色時候需要將法向量反向。步驟S4:對背對著觀察者的每個三角片進行光柵化得到背面的渲染結果,根據步驟SI的信息插值計算三角片中每個像素的顏色值及深度值,將此像素的深度值與深度緩沖區depthBufferB中的值做比較,如果大于depthBufferB中的值,貝U用此深度值替換depthBufferB中的相應值。將這個像素的顏色值與顏色緩沖區bufferBack中的相應顏色值混合,并且將這個像素的顏色值作為前景色而緩沖區中的顏色作為背景色,存儲在顏色緩沖區bufferBack中。如果像素的深度值小于cbpthBufferB中的值,將這個像素的顏色值與顏色緩沖區bufferBack中的相應顏色值混合,將這個像素的顏色值作為背景色而緩沖區中的顏色作為前景色,存儲在顏色緩沖區bufferBack中。步驟S5 :計算正對著觀察者的頂點的光照顏色和深度值。步驟S6 :對正對著觀察者的每個三角片進行光柵化得到正面的渲染結果,根據SI信息插值計算三角片中每個像素的顏色值及深度值,將此像素的深度值與深度緩沖區depthBufferF中的值做比較,如果大于depthBufferF中的值,則用此深度值替換depthBufferF中的相應值。將這個像素的顏色值與顏色緩沖區bufferFront中的相應顏色值混合,同時將這個像素的顏色值作為前景色而緩沖區中的顏色作為背景色,存儲在顏色緩沖區bufferFront中。如果像素的深度值小于cbpthBufferF中的值,將這個像素的顏色值與顏色緩沖區bufferFront中的相應顏色值混合,同時將這個像素的顏色值作為背景色而緩沖區中的顏色作為前景色,存儲在顏色緩沖區bufferFront中。步驟S7 :對存儲在bufferBack和bufferFront中的三角片的背面顏色值與正面顏色值進行混合,得到透明三維物體的渲染效果。本發明的一種實現透明三維物體渲染的方法通過首先計算正對著與背對著觀察者的每個三角片的光照顏色,并將存儲的正面顏色值與背面顏色值進行混合的方式可以實現透明三維物體的渲染,并且采用本申請的技術方法可以,并能很好的將三維物體完全顯示,填補了透明三維物體渲染的空白。通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到本發明可以通過軟件實現,也可以借助軟件加必要的通用硬件平臺的方式來實現。基于這樣的理解,本發明的技術方案可以以軟件產品的形式體現出來,該軟件產品可以存儲在一個非易失性存儲介質(可以是⑶-ROM,U盤,移動硬盤等)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行本發明各個實施例所述的方法。 以上所述,僅為本發明的一個最佳具體實施例,但本發明的特征并不局限于此,任何熟悉該項技術的人在本發明領域內,可輕易想到的變化或修飾,都應涵蓋在以下本發明的申請專利范圍中。
權利要求
1.一種實現透明三維物體渲染的方法,其特征在于,包括 根據三角片的三個頂點值、法向量和觀察矩陣判斷三角片是正對著觀察者還是背對著觀察者; 計算背對著觀察者的頂點的光照顏色和深度值; 對背對著觀察者的每個三角片進行光柵化,并存儲三角片背面顏色值; 計算正對著觀察者的頂點的光照顏色和深度值; 對正對著觀察者的每個三角片進行光柵化,并存儲三角片正面顏色值; 對存儲的三角片的背面顏色值與正面顏色值進行混合,完成透明三維物體的渲染。
2.如權利要求I所述的實現透明三維物體渲染的方法,其特征在于,在進行計算之前需要預先準備兩個顏色緩沖區,正面顏色緩沖區bufferFront和背面顏色緩沖區bufferBack并初始化;準備兩個深度緩沖區,正面深度緩沖區depthBufferF和背面深度緩沖區 depthBufferB。
3.如權利要求I所述的實現透明三維物體渲染的方法,其特征在于,所述bufferFront與bufferBack分別用于存儲正面顏色和背面顏色的渲染結果。
4.如權利要求I所述的實現透明三維物體渲染的方法,其特征在于,所述depthBufferF和epthBufferB分別用于在渲染正面和背面三維物體時候進行深度判斷。
5.如權利要求I所述的實現透明三維物體渲染的方法,其特征在于,所述計算背對著觀察者的頂點的光照顏色時候將法向量反向。
6.如權利要求I所述的實現透明三維物體渲染的方法,其特征在于,所述對背對著觀察者的每個三角片進行光柵化具體為 計算三角片中每個像素的顏色值及深度值并將所述像素的深度值與深度緩沖區depthBufferB中的值做比較; 如果所述像素的深度值大于CbpthBufTerB中的值,則用所述像素的深度值替換depthBufferB中的相應值并將這個像素的顏色值與顏色緩沖區bufferBack中的相應顏色值混合,同時將這個像素的顏色值作為前景色而緩沖區中的顏色作為背景色,存儲在顏色緩沖區bufferBack中; 如果所述像素的深度值小于CbpthBufTerB中的值,將這個像素的顏色值與顏色緩沖區bufferBack中的相應顏色值混合,將這個像素的顏色值作為背景色而緩沖區中的顏色作為前景色,存儲在顏色緩沖區bufferBack中。
7.如權利要求I所述的實現透明三維物體渲染的方法,其特征在于,所述對正對著觀察者的每個三角片進行光柵化具體為 計算三角片中每個像素的顏色值及深度值,將所述像素的深度值與深度緩沖區depthBufferF中的值做比較,如果大于depthBufferF中的值,貝U用所述像素的深度值替換depthBufferF中的相應值并將所述像素的顏色值與顏色緩沖區bufferFront中的相應顏色值混合,同時將所述像素的顏色值作為前景色而緩沖區中的顏色作為背景色,存儲在顏色緩沖區bufferFront中; 如果所述像素的深度值小于CbpthBufTerF中的值,將所述像素的顏色值與顏色緩沖區bufferFront中的相應顏色值混合,同時將這個像素的顏色值作為背景色而緩沖區中的顏色作為前景色,存儲在顏色緩沖區bufferFront中。
全文摘要
本發明公開了一種實現透明三維物體渲染的方法,包括根據三角片的三個頂點值、法向量和觀察矩陣判斷三角片是正對著觀察者還是背對著觀察者;計算背對著觀察者的頂點的光照顏色和深度值;對背對著觀察者的每個三角片進行光柵化,并存儲三角片背面顏色值;計算正對著觀察者的頂點的光照顏色和深度值;對正對著觀察者的每個三角片進行光柵化,并存儲三角片正面顏色值;對存儲的三角片的背面顏色值與正面顏色值進行混合,完成透明三維物體的渲染。采用本申請的技術方法能很好的將三維物體透明顯示,填補了透明三維物體渲染的空白。
文檔編號G06T15/20GK102737404SQ20111011636
公開日2012年10月17日 申請日期2011年5月6日 優先權日2011年5月6日
發明者張君琦, 李濤, 蔡歡, 鄭培楓 申請人:新奧特(北京)視頻技術有限公司