Introduction

我們現(xiàn)在可以將任意屬性傳遞給每個頂點的頂點著色器使用。但是全局變量呢?我們將會從本章開始介紹3D圖形相關(guān)的內(nèi)容,并需要一個模型視圖投影矩陣。我們確實可以將它一頂點的方式包含,但是這非常浪費帶寬、內(nèi)存,并且需要我們在變換的時候更新頂點緩沖區(qū)的數(shù)據(jù)。這種變換通常發(fā)生在每一幀。

 

在Vulkan中正確處理此問題的途徑是使用資源描述符。描述符是著色器資源訪問諸如緩沖區(qū)和圖像這樣資源的一種方式。我們需要設(shè)置一個包含轉(zhuǎn)換矩陣的緩沖區(qū),并使頂點著色器通過描述符訪問它們。描述符的使用由三部分組成:

  • 在管線創(chuàng)建時指定描述符的布局結(jié)構(gòu)

  • 從描述符對象池中分配描述符集合

  • 在渲染階段綁定描述符集合

描述符布局指定了管線訪問的資源的類型,就像渲染通道指定附件的類型一樣。描述符集合指定將綁定到描述符的實際緩沖區(qū)或映射資源。就像幀緩沖區(qū)為綁定渲染通道的附件而指定實際的圖像視圖一樣。描述符集合就像頂點緩沖區(qū)和幀緩沖區(qū)一樣被綁定到繪制命令。

 

有許多類型的描述符,但在本章中,我們將使用統(tǒng)一的緩沖區(qū)對象uniform buffer objects(UBO)。我們將會在后面的章節(jié)中討論其他類型的描述符,但基本過程是一樣的。假設(shè)我們有一個數(shù)據(jù),我們希望頂點著色器擁有一個這樣的C結(jié)構(gòu)體:

struct UniformBufferObject {
    glm::mat4 model;
    glm::mat4 view;
    glm::mat4 proj;
};

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式