在OpenGL核心框架中奶赔,并沒有提供任何內(nèi)建渲染管線,在提交一個幾何圖形進行渲染之前瘸彤,必須制定一個著色器笛钝。目前這些存儲著色器由GLTools的C++類GLShaderManager進行管理愕宋,這些能夠滿足通常的渲染的基本要求结榄。而更高級的自定義著色器不在本章討論的范疇之內(nèi),后續(xù)會探討
GLShaderManager的使用
- 在使用前必須進行初始化
GLShaderManager shaderManager
shaderManager.InitializeStockShaders();
Uniform值
- 要對幾何圖形渲染邻寿,需要為對象遞交屬性矩陣
- 想要得到我們期望的結果视哑,必須提供程序的Uniform值綁定到想要使用的著色器程序上
- GLShaderManager類可以幫我們完成以上工作
- UseStockShader函數(shù)會選擇一個存儲著色器并提供這個著色器的Uniform值,通過一次函數(shù)調(diào)用就能完成
GLShaderManager::UseStockShader(GLT_STOCK_SHADER nShaderID, ...);
注意:在C語言(或者C++語言)中蒜撮,...表示函數(shù)接受一個可變的參數(shù)數(shù)量
固定著色器
單位著色器
GLShaderManager::UseStockShader(GLT_SHADER_IDENTITY, GLfloat vColor[4]);
注意:
- OpenGL坐標系范圍(-1.0~1.0)跪呈,所有片段都應用同一種顏色
平面著色器
GLShaderManager::UseStockShader(GLT_SHADER_FLAT, GLfloat mvp[16],GLfloat vColor[4]);
注意:
- 適合模型視圖矩陣,投影矩陣(4 x 4變換矩陣苹支,顏色)
上色著色器
GLShaderManager::UseStockShader(GLT_SHADER_SHADED, GLfloat mvp[16]);
注意:
- 應用在變換矩陣误阻,顏色值被平滑的插入頂點之間(稱為平滑著色)(4 x 4變換矩陣,顏色)
默認光源著色器
GLShaderManager::UseStockShader(GLT_SHADER_DEFAULT_LIGHT, GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);
注意:
- 應用模型視圖矩陣策幼,投影矩陣奴紧。這種著色器使對象產(chǎn)生陰影和光照的效果(模型4 x 4矩陣晶丘,投影4 x 4矩陣,顏色)
點光源著色器
GLShaderManager::UseStockShader(GLT_SHADER_POINT_LIGHT_DIFF, GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vColor[4]);
注意:
- 跟默認光源著色器類似沫浆。模型視圖矩陣滚秩,投影矩陣,視點坐標系中的光源位置和對象的基本漫反射顏色
紋理替換矩陣著色器
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_REPLACE, GLfloat mvMatrix[16],GLint nTextureUnit);
注意:
- 模型視圖投影矩陣本股,使用綁定到nTextureUnit指定的紋理單元的紋理對幾何圖形進行變換(模型4 x 4矩陣,紋理單元)
紋理調(diào)整著色器
GLShaderManager::UseStockShader(GLT_SHADER_c_MODULATE, GLfloat mvMatrix[16],GLfloat vColor,GLint nTextureUnit);
注意:
- 將一個基本色乘以一個取自紋理單元nTextureUnit的紋理(模型4 x 4矩陣苟径,顏色躬审,紋理單元)
紋理光源著色器
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF, GLfloat mvMatrix,GLfloat pMatrix[16],GLfloat vLightPos[3],GLFloat vBaseColor[4],GLint nTextureUnit);
注意:
- 應用變換矩陣(模型,投影)遭殉,這種著色器將一個通過慢反射照明計算進行調(diào)整(相乘)博助,光線在視覺空間中的位置給定的(模型視圖矩陣,投影矩陣翔始,視覺空間中的光源位置,幾何圖形的基本色和將要使用的紋理單元)