OpenGL筆記三:固定管線著色器和基本圖元

前言

期待您移步上篇:OpenGL筆記二:OpenGL 渲染流程及投影

存儲著?器初始化

// GLShaderManager 的初始化
GLShaderManager shaderManager; 
shaderManager.InitializeStockShaders();

單元著?器

GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY,GL?oat vColor[4]);
/*
/參數(shù)1: 存儲著?器種類-單元著?器 
參數(shù)2: 顏?
*/

使?場景: 繪制默認OpenGL 坐標(biāo)系(-1,1)下圖形。 圖形所有?段都會以?種顏?填充。只是簡單地使用默認笛卡爾坐標(biāo)系(坐標(biāo)范圍(-1.0,1.0))。所有的片段都應(yīng)用同一種顏色,幾何圖形為 實心和未渲染的。

平?著?器

GLShaderManager::UserStockShader(GLT_SHADER_FLAT,GL?oat mvp[16],GL?oat vColor[4]);
/*
參數(shù)1: 存儲著?器種類-平?著?器 
參數(shù)2: 允許變化的4*4矩陣 
參數(shù)3: 顏?
*/

使?場景:在繪制圖形時,可以應(yīng)?變換(模型/投影變化)。
它將統(tǒng)一著色器進行了拓展。允許為幾何圖形變換指定一個 4 * 4 變換矩陣。經(jīng)常被稱為“模型視圖投影矩陣”。

上?著?器

GLShaderManager::UserStockShader(GLT_SHADER_SHADED,GL?oat mvp[16]);
/*
參數(shù)1: 存儲著?器種類-上?著?器 
參數(shù)2: 允許變化的4*4矩陣
*/

使?場景:在繪制圖形時,可以應(yīng)?變換(模型/投影變化)顏?將會平滑地插?到頂點之間 稱為平滑著?
在幾何圖形中應(yīng)用的變換矩陣。需要設(shè)置存儲著色器的GLT_ATTRIBUTE_VERTEX(頂點分量) 和 GLT_ATTRIBUTE_COLOR(顏色分量) 2個屬性。

默認光源著?器

GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT,GL?oat mvMatrix[16],GL?oat pMatrix[16],GL?oat vColor[4]);
/*
參數(shù)1: 存儲著?器種類-默認光源著?器 
參數(shù)2: 模型4*4矩陣 
參數(shù)3: 投影4*4矩陣 
參數(shù)4: 顏?值
*/

使?場景::在繪制圖形時,可以應(yīng)?變換(模型/投影變化) 這種著?器會使繪制的圖形產(chǎn)?陰影和光照的效果。
是對象產(chǎn)生陰影和關(guān)照的效果。需要設(shè)置存儲著色器的GLT_ATTRIBUTE_VERTEX(頂點分量) 和 GLT_ATTRIBUTE_NORMAL(表面法線)。

點光源著?器

GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIEF,GL?oat mvMatrix[16],GL?oat pMatrix[16],GL?oat vLightPos[3],GL?oat vColor[4]);
/*
參數(shù)1:點光源著色器
參數(shù)2:模型視圖矩陣
參數(shù)3:投影矩陣
參數(shù)4:點光源位置坐標(biāo)(x,y,z)沒有w
參數(shù)5:顏色值
*/

使?場景:在繪制圖形時,可以應(yīng)?變換(模型/投影變化)這種著?器會使繪制的圖形產(chǎn)? 陰影和光照的效果。它與默認光源著?器?常類似,區(qū)別只是光源位置可能是特定的。
點光源著色器和默認光源著色器很相似,區(qū)別在于:光源位置是特定的。同樣需要設(shè)置存儲著色器的GLT_ATTRIBUTE_VERTEX(頂點分量) 和GLT_ATTRIBUTE_NORMAL(表面法線)。

紋理替換矩陣著?器

GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE,GL?oat mvMatrix[16],GLint nTextureUnit);
/*
參數(shù)1: 存儲著?器種類-紋理替換矩陣著?器 
參數(shù)2: 模型4*4矩陣 
參數(shù)3: 紋理單元(紋理層一般為:0)
*/

使?場景:在繪制圖形時,可以應(yīng)?變換(模型/投影變化)這種著?器通過給定的模 型視圖投影矩陣。使?紋理單元來進?顏?填充。其中每個像素點的顏?是從紋理中 獲取。
著色器通過給定的模型視圖投影矩陣,使用綁定到nTextureUnit(紋理單元) 指定紋理單元的紋理對幾何圖形進行變化。
片段顏色:是直接從紋理樣本中直接獲取的。需要設(shè)置存儲著色器的GLT_ATTRIBUTE_VERTEX(頂點分量) 和GLT_ATTRIBUTE_NORMAL(表面法線)。

紋理調(diào)整著?器

GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE,GL?oat mvMatrix[16],GL?oat vColor[4],GLint nTextureUnit);
/*
參數(shù)1: 存儲著?器種類-紋理調(diào)整著?器 
參數(shù)2: 模型4*4矩陣 
參數(shù)3: 顏?值 
參數(shù)4: 紋理單元(紋理層一般為:0)
*/

使?場景:在繪制圖形時,可以應(yīng)?變換(模型/投影變化)這種著?器通過給定的模 型視圖投影矩陣.。著?器將?個基本?乘以?個取?紋理單元nTextureUnit 的紋理。將顏?與紋理進?顏?混合后才填充到?段中。
將一個基本色 乘 一個取自紋理單元 nTextureUnit的紋理。需要設(shè)置存儲著色器的GLT_ATTRIBUTE_VERTEX(頂點分量) 和 GLT_ATTRIBUTE_TEXTURE0(紋理坐標(biāo))。

紋理光源著?器

GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF,G L?oat mvMatrix[16],GL?oat pMatrix[16],GL?oat vLightPos[3],GL?oat vBaseColor[4],GLint nTextureUnit);
/*
參數(shù)1: 存儲著?器種類-紋理光源著?器 
參數(shù)2: 模型4*4矩陣 
參數(shù)3: 投影4*4矩陣 
參數(shù)4: 點光源位置 
參數(shù)5: 顏?值(?何圖形的基本?) 
參數(shù)6: 紋理單元(紋理層一般為:0)
*/

使?場景:在繪制圖形時,可以應(yīng)?變換(模型/投影變化)這種著?器通過給定的模 型視圖投影矩陣。著?器將?個紋理通過漫反射照明計算進?調(diào)整(相乘)。
將一個紋理通過漫反射照明計算機進行調(diào)整(相乘)。光線在視覺空間中的位置是給定的。需要設(shè)置存儲著色器的GLT_ATTRIBUTE_VERTEX(頂點分量) 和 GLT_ATTRIBUTE_TEXTURE0(紋理坐標(biāo))、GLT_ATTRIBUTE_NORMAL(表面法線)。

OpenGL 基本圖元(7種)

  • OpenGL在計算機屏幕上進行繪圖,我們關(guān)心的不是物理屏幕坐標(biāo)和像素,而是視景體中的位置坐標(biāo)。將這些點、線和三角形從創(chuàng)建的3D空間投影到計算機屏幕上的2D圖形則是著色器程序和光柵化硬件所要完成的工作。
  • OpenGL 定義了7種圖元來繪制幾何圖形,這些圖元將在一個包含給定圖元的所有頂點和相關(guān)屬性的單個批次中進行渲染。實質(zhì)上,在一個給定的批次中的所有頂點都會用于組成這些圖元中的一個。
圖元 描述
GL_POINTS 每個頂點在屏幕上都是單獨點
GL_LINES 每一對頂點定義一個線段
GL_LINE_STRIP 一個從第一個頂點依次經(jīng)過每個后續(xù)頂點而繪制的線條
GL_LINE_LOOP 和GL_LINE_STRIP相同,但是最后一個頂點和第一個頂點連接成閉合線圈
GL_TRIANGLES 每三個頂點定義一個新的三角形
GL_TRIANGLE_STRIP 共用一個條帶(strip)上的頂點的一組三角形
GL_TRIANGLE_FAN 以一個圓點為中心呈扇形排列,共用相鄰頂點的一組三角形
  • 上表中的圖元類型 等同于 下圖中展示的圖元類型 下圖中更能直觀的表達圖元特性


    OpenGL基本圖元.png
  • 為了繪制實體表面,我們需要的不僅僅是點和線——還需要多邊形。一個多邊形就是一個封閉的圖形,它可能用顏色或紋理數(shù)據(jù)進行填充,也可能不進行填充,在OpenGL中,多邊形是所有實體對象構(gòu)建的基礎(chǔ),而存在的最簡單的實體多邊形就是三角形。 所以光柵化硬件最歡迎三角形。而三角形也是目前OpenGL 中支持的唯一的一種多邊形。

期待您移步下篇:OpenGL筆記四:正背面剔除、深度測試、顏色混合

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 注意:本文列舉了常見幾種常見固定管線著色器的使用和傳參講解.捎帶講解管線. 關(guān)于名詞解釋和概念立即請參考本系列前幾...
    lb_閱讀 1,917評論 4 2
  • 管線: 在OpenGL 下渲染圖形,就會有經(jīng)歷一個一個節(jié)點.?這樣的操作可以理解為管線.大家可以想象成流?線.每個...
    zhongxiaoyue閱讀 783評論 0 0
  • 原文: CC老師著作所屬權(quán)歸該作者所有,任何形式轉(zhuǎn)載請聯(lián)系作者并注明原文出處. 使用存儲著色器最方便之處是,你不要...
    CC老師_HelloCoder閱讀 1,873評論 0 5
  • OpenGL ES _ 入門_01OpenGL ES _ 入門_02OpenGL ES _ 入門_03OpenGL...
    酷走天涯閱讀 3,405評論 7 7
  • 搖曳的樹 孤獨的晚燈 清朗的天空 撕開云被的月亮 云朵從東南向西北飄著 他也從東南向西北走著 左手拿著炸雞,右手拿...
    男人就得多吃肉閱讀 111評論 0 2

友情鏈接更多精彩內(nèi)容