OpenGL實例教程05:uniform變量
什么是uniform變量?
uniform變量是shader中使用的一種變量類型。用于應用程序?qū)?shù)據(jù)傳送給著色器。
屬性變量和uniform變量有什么區(qū)別?
屬性變量包含的數(shù)據(jù)專用于某一個頂點,每一次著色器調(diào)用都會從頂點緩沖區(qū)中加載一個新的值,而uniform變量在一次繪制過程中是常量,不可以被修改。
屬性變量存儲的是按頂點變化的值。例如:頂點坐標,頂點顏色,頂點法線值等等。
uniform變量適合用于存儲按幀變化,或不變化的值。例如:光照參數(shù)(光照位置和方向等)、變換矩陣等等。
uniform變量于動畫
uniform變量的值是按幀變化的。因此,可以用于動畫效果制作。例如,我們可以對頂點著色器的所有頂點都乘以一個縮放值,而該縮放值為uniform變量,這樣就可以在OpenGL應用程序中按動畫的需要設(shè)置這個值。可以寫一個大循環(huán),或是定時器程序,或是利用其他技術(shù)手段改變uniform變量并要求顯卡重新繪制。
shader代碼
每一個頂點會執(zhí)行一次頂點著色器,但在單次繪制過程中uniform變量保持不變:
應用程序代碼
通過改變Scale變量的值改變?nèi)切蔚捻旤c位置,通過sinf的使用確保值在-1到+1之間變化。為了產(chǎn)生動畫,我們在回調(diào)函數(shù)中加入了一條語句:glutPostRedisplay();
因為目前我們的回調(diào)函數(shù)只在窗口發(fā)生變化時被執(zhí)行,因此需要通過該語句發(fā)送一個重新繪制的請求。當然也可以采用循環(huán),或定時器的方式產(chǎn)生動畫。

標簽: