前言
期待您移步上篇: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筆記四:正背面剔除、深度測試、顏色混合
