使用固定存儲著色器的好處是,你不需要知道渲染過程中到底是頂點著色器還是片元著色器打掘,因此绊率,你不需要考慮在傳遞數據時,該用哪種方式傳遞數據媳荒,你只需要傳遞存儲著色器所需要的的數據到參數列表就可以了抗悍,都是OpenGL底層已經封裝好的API。接下來钳枕,我們來說說存儲著色器缴渊。
--
單元著色器(Identity)
GLShaderManager::UserStockShader(GLT_ATTRIBUTE_VERTEX,GLfloat vColor[4]);
單元著色器:
- 只是簡單地使用默認笛卡爾坐標系(坐標范圍(-1.0,1.0))鱼炒。所有的片段都應用同一種顏色衔沼,幾何圖形為 實心和未渲染的。
- 需要設置存儲著色器一個屬性:GLT_ATTRIBUTE_VERTEX(頂點分量)
- 參數2:vColor[4],你需要的顏色
使用場景:繪制默認OpenGL坐標系(-1,1)下圖形指蚁,圖形所有片段都會以一種顏色填充菩佑。
--
平面著色器
GLShaderManager::UserStockShader(GLT_SHADER_FLAT,GLfloat mvp[16],GLfloat vColor[4]);
- 參數1:平面著色器
- 參數2:允許變化的44矩陣
- 參數3:顏色*
它將統(tǒng)一著色器進行了拓展。允許為幾何圖形變換指定一個 4 * 4 變換矩陣凝化。經常被稱為“模型視圖投影矩陣”
使用場景:在繪制圖形時稍坯,可以應用變換(模型變換/投影變換)
--
上色著色器
GLShaderManager::UserStockShader(GLT_SHADER_SHADED,GLfloat mvp[16]);
- 在幾何圖形中應用的變換矩陣。
- 需要設置存儲著色器的GLT_ATTRIBUTE_VERTEX(頂點分量) 和 GLT_ATTRIBUTE_COLOR(顏色分量) 2個屬性搓劫。顏色值將被平滑地插入頂點之間(平滑著色)
使用場景:在繪制圖形時劣光,可以應用變換(模型變換/投影變換),顏色將會平滑的插入到頂點之間稱為平滑著色
--
默認光源著色器
GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);
- 參數1:默認光源著色器
- 參數2:模型視圖矩陣
- 參數3:投影矩陣
- 參數4:顏色值
這種著色器,是對象產生陰影和關照的效果糟把。
需要設置存儲著色器的GLT_ATTRIBUTE_VERTEX(頂點分量) 和 GLT_ATTRIBUTE_NORMAL(表面法線)使用場景:在繪制圖形時绢涡,可以應用變換(模型變換/投影變換),這種著色器會使繪制的圖形產生陰影和光照的效果
--
點光源著色器
GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIEF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vColor[4]);
- 參數1:點光源著色器
- 參數2:模型視圖矩陣
- 參數3:投影矩陣
- 參數4:視點坐標光源位置
- 參數5:顏色值
點光源著色器和默認光源著色器很相似遣疯,區(qū)別在于:光源位置是特定的雄可。同樣需要設置存儲著色器的GLT_ATTRIBUTE_VERTEX(頂點分量)
和GLT_ATTRIBUTE_NORMAL(表面法線)
使用場景:在繪制圖形時,可以應用變換(模型變換/投影變換)缠犀,這種著色器會使繪制的圖形產生陰影和光照的效果数苫,它與默認的光源著色器非常類似,區(qū)別只是光源位置可能是特定的
--
紋理替換矩陣著色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE,GLfloat mvMatrix[16],GLint nTextureUnit);
- 參數1:存儲著色器種類-紋理替換矩陣著色器
- 參數2:顏色值
- 參數3:紋理單元
- 著色器通過給定的模型視圖投影矩陣辨液,使用綁定到nTextureUnit(紋理單元) 指定紋理單元的紋理對幾何圖形進行變化虐急。
- 片段顏色:是直接從紋理樣本中直接獲取的。
- 需要設置存儲著色器的
GLT_ATTRIBUTE_VERTEX(頂點分量)
和GLT_ATTRIBUTE_NORMAL(表面法線)
使用場景:在繪制圖形時滔迈,可以應用變換(模型變換/投影變換)止吁,這種著色器通過給定的模型視圖投影矩陣,使用紋理單元來進行顏色填充燎悍,其中每個像素點的顏色是從紋理中獲取敬惦。
--
紋理調整著色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE,GLfloat mvMatrix[16],GLfloat vColor[4],GLint nTextureUnit);
- 參數1:存儲著色器種類-紋理調整著色器
- 參數2:模型4*4矩陣
- 參數3:顏色值
- 參數4:紋理單元
- 將一個基本色 乘以 一個取自紋理單元
nTextureUnit
的紋理。- 需要設置存儲著色器的
GLT_ATTRIBUTE_VERTEX(頂點分量)
和GLT_ATTRIBUTE_TEXTURE0(紋理坐標)
使用場景:在繪制圖形時谈山,可以應用變換(模型變換/投影變換)俄删,這種著色器通過給定的模型視圖投影矩陣,著色器講一個基本色乘以一個取自紋理單元
nTextureUnit
的紋理奏路,將顏色與紋理進行顏色混合后才填充到片段中畴椰。
--
紋理光源著色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vBaseColor[4],GLint nTextureUnit);
- 參數1:紋理光源著色器
- 參數2:投影矩陣
- 參數3:視覺空間中的光源位置
- 參數4:幾何圖形的基本色
- 參數5:將要使用的紋理單元
- 將一個紋理通過漫反射照明計算機進行調整(相乘)。光線在視覺空間中的位置是給定的鸽粉。
- 需要設置存儲著色器的
GLT_ATTRIBUTE_VERTEX(頂點分量)
和GLT_ATTRIBUTE_TEXTURE0(紋理坐標)
斜脂、GLT_ATTRIBUTE_NORMAL(表面法線)
使用場景:在繪制圖形時,可以應用變換(模型變換/投影變換)潜叛,這種著色器通過給定的模型視圖投影矩陣秽褒,著色器將一個紋理通過漫反射照明計算進行調整(相乘)壶硅。
--
系列連載
OpenGL入門(一)-- 圖形API簡介與作用
OpenGL入門(二)-- 快速了解OpenGL下的專業(yè)名詞
OpenGL入門(三)-- OpenGL坐標系解析與坐標變換
OpenGL入門(四)-- OpenGL坐標系與坐標變換
OpenGL入門(五)-- OpenGL渲染流程圖解析
OpenGL入門(六)-- OpenGL 固定存儲著色器的理解使用
OpenGL入門(七)-- 圖形圖像渲染中的深度緩沖區(qū)
OpenGL入門(八)-- OpenGL向量和矩陣簡介
OpenGL入門(九)-- OpenGL 紋理簡單介紹