shader之uniform


着色器統一值

屬性是每個頂點位置,表面法線和紋理坐標等都需要的,而統一值則用於為整個圖元批次向保持不變的着色器傳遞數據。對於頂點着色器來說,可能最普遍的統一值就是變換矩陣。

一個統一值在一個圖元的繪制過程中是不變的,所以其值不能在glBegin和glEnd之間設置的

uniform限定了表示一個變量的值將由應用程序在着色器執行之前指定,並且在圖元的處理過程中不會發生變化。

uniform變量是由頂點着色器和片段着色器共享的,他們必須聲明為全局變量。

1.尋找統一值

當GLSL編譯器鏈接到着色器程序后,它會創建一個表格,其中包含了所有的uniform變量,通過此函數能獲取到該變量在表中的索引值

GLint glGetUniformLocation (GLuint program, const GLchar* name)

2.設置標量和向量統一值

void glUniform{1234}f (GLint location, TYPE value)

void glUniform{1234}i (GLint location, TYPE value)

 3.設置統一數組

void glUniform{1234}fv (GLint location, GLsizei count, const GLfloat* v)

void glUniform{1234}iv (GLint location, GLsizei count, const GLfloat* v)

4.設置統一矩陣

void glUniformMatrix{234}fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)

如果transpose是GL_TRUE,那么value是按行主序指定的(就像C語言的數組一樣)

如果是GL_FALSE,那么value是按列主序指定的(和glLoadMatrix()使用的順序相同)

 

參考

1.OpenGL超級寶典(第五版)

2.OpenGL編程指南(原書第七版)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM