幀緩存(FrameBuffer)與Kanzi Render Pass
來源: | 作者:pmo9ca4dc | 發布時間: 2019-04-12 | 1488 次瀏覽 | 分享到:

今天要和大家分享的內容是在Kanzi中使用Render Pass的部分功能實現Render To Texture(貼圖烘焙)的效果。在介紹此項技術之前,首先對其用到的幾個概念做一個簡單的描述。

1、什么是紋理(Texture)

凡是接觸過HMI項目的人,無論是3D建模師還是動效設計師或者是具體編寫代碼的程序員,一定對Texture(紋理)這個概念不陌生。通常來講,計算機圖形學的目標之一就是計算出屏幕上所要顯示的每一個像素點的顏色值。雖然我們可以通過著色器來計算這些像素點的顏色,但是很多情況下,僅使用著色器去計算這些像素點復雜性較高,且不易操作。(例如,我們如果想渲染一個森林的場景,僅僅通過數學計算來得出每一個像素點的顏色幾乎是不可能完成的任務)。這時候,我們就可以求助于Texture。使用一張提前準備好的圖像,提取其中像素點的顏色,用于實際渲染。所謂Texture,其實就是一塊圖像數據,從計算機的角度來講,也可以說是一塊存儲了數據的內存區域。  

2、什么是幀緩存(FrameBuffer)

在了解了Texture的概念后,接下來介紹一下FrameBuffer(幀緩存對象)的概念。OpenGL中,如何在控制窗口顯示各種顏色,主要是通過向緩存區(默認緩存區)寫入數值來實現的。通常,在我們不做其他操作的情況下,渲染的效果都會被寫入到默認緩存區之中,直接反映在窗口的顯示之上。同時,OpenGL也允許我們自己開辟新的幀緩存空間。創建好自定義的幀緩存空間之后,我們就可以將部分渲染效果,綁定到自定義的空間中。

3、在Kanzi中使用Render To Texture

我們常說的Render To Texture,就是基于上述原理來實現的。例如,將一些場景Kanzi中的Scene節點呈現出的效果,渲染到幀緩存之中,之后將幀緩存作為Texture,貼到其他的物體之上;抑或是對幀緩存中的像素進行二次處理,如模糊、泛光等效果的顯示。在Kanzi中,這部分的功能被集成在了Render Pass之中。

接下來,我們使用Kanzi的Render Pass,來實現一個簡單的Render To Texture的操作。我們將會創建一個Scene場景,并將場景的效果,作為一張貼圖,貼在另一個平面之上。


首先在Kanzi中創建兩個Viewport2D的場景:



左邊的平面用于接收右面場景渲染出來的貼圖,右邊的Viewport里是實際的場景(一個球和一個貼了森林圖片的正方體)。

相關文章
三分彩在线计划数据