OpenGL 三 - 002、OpenGL 渲染流程圖解


一、OpenGL的渲染流程架構

三種渲染管線的傳遞方式:attribute(屬性)、texture(紋理) 、uniform(統一)

圖元裝配(primitive assembly):下圖 "OpenGL 基本圖元" 的9中圖元鏈接方式。

片元着色器 --> 逐個片元(片段)操作 --> 幀緩沖區 --> render 顯示器

 二、簡單使用 

1)正投影 2D

  GLFrumstum::SetOrthographic(GLFloat xMin,GLFloat xMax,GLFloat yMin,GLFloat yMax,GLFloat zMin,GLFloat zMax);// 大小 只要能把要看到的視圖裝進去就可以,具體大小並不影響。

2)透視投影 3D

  CLFrustum::SetPerspective(float fFov , float fAspect ,float fNear ,float fFar); 

  /*  GLFrustum類通過setPerspective ⽅方法為我們構建⼀一個平截頭體。 參數:

  fFov:垂直⽅方向上的視場⻆角度

  fAspect:窗⼝口的寬度與⾼高度的縱橫⽐比

  fNear:近裁剪⾯面距離 fFar:遠裁剪⾯面距離 

  縱橫⽐比 = (w)/⾼高(h)  */

3)存儲着色器初始化 - 了解  

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

1、單元着色器 GLT_SHADER_IDENTITY

  GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY,GLfloat vColor[4]);

  // 參數1:存儲着色器種類 - 單元着色器 GLT_SHADER_IDENTITY  參數2:顏色

  // 使用場景:繪制默認OpenGL 坐標系(-1,1)下的圖形,圖形所有片段都會以一種顏色填充

2、平面着色器 GLT_SHADER_FLAT

  GLShaderManager::UserStockShader(GLT_SHADER_FLAT,GLFloat mvp[16],GLfloat vColor[4]);

  // 參數1:存儲着色器種類 - 平面着色器 GLT_SHADER_FLAT 參數2:允許變化的4*4矩陣 參數3:顏色

  // 使用場景:繪制圖形,可以變換(模型/投影變換)

3、上色着色器 GLT_SHADER_SHADER  

  GLShaderManager::UserStockShader(GLT_SHADER_SHADER,GLFloat mvp[16]);

  // 參數1:存儲着色器種類 - 上色着色器 GLT_SHADER_SHADER 參數2:允許變化的4*4矩陣

  //  使用場景:在繪制圖形時,可以應用變換(模型/投影變換) 顏色將會平滑的插入到頂點之間,稱為平滑着色。

4、默認光源着色器 GLT_SHADER_DEFAULT_LIGHT

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

使⽤用場景: 在繪制圖形時, 可以應⽤用變換(模型/投影變化) 這種着色器會使繪制的圖形產生陰影和光照的效果。

5、點光源着色器 GLT_SHADER_POINT_LIGHT_DIEF

  GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIEF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vColor[4]);
  /* 參數1: 存儲着⾊色器器種類-點光源着⾊色器器
    參數2: 模型4*4矩陣  
      參數3: 投影4*4矩陣  
      參數4: 點光源的位置  
    參數5: 顏⾊色值  */

  // 使⽤用場景: 在繪制圖形時, 可以應⽤變換(模型/投影變化) 這種着色器會使繪制的圖形產生

陰影和光照的效果,它與默認光源着色器⾮常類似,區別只是光源位置可能是特定的。

6、紋理替換矩陣着色器 GLT_SHADER_TEXTURE_REPLACE

  GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE,GLfloat mvMatrix[16],GLint nTextureUnit);

  /* 參數1: 存儲着⾊器種類-紋理理替換矩陣着⾊器 GLT_SHADER_TEXTURE_REPLACE

  參數2: 模型4*4矩陣

  參數3: 紋理單元

  // 使⽤用場景: 在繪制圖形時, 可以應⽤變換(模型/投影變化)這種着⾊器通過給定的模型視圖投影矩陣。使⽤紋理單元來進⾏顏⾊填充,其中每個像素點的顏⾊是從紋理中獲取。

7、紋理調整着色器 GLT_SHADER_TEXTURE_MODULATE

  GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE,GLfloat mvMatrix[16],GLfloat vColor[4],GLint nTextureUnit);

  /* 參數1:  存儲着⾊色器器種類-紋理理調整着⾊器 GLT_SHADER_TEXTURE_MODULATE

  參數2:  模型4*4矩陣

  參數3:  顏⾊色值  

  參數4:  紋理理單元 *?

  // 使⽤場景: 在繪制圖形時, 可以應⽤變換(模型/投影變化)這種着⾊器通過給定的模型視圖投影矩陣. 着⾊器將⼀個基本⾊乘以⼀個取⾃紋理單元 nTextureUnit 的紋理.將顏⾊與紋理進行顏⾊混合后才填充到⽚段中。

8、紋理光源着色器 GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF

  GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF,G Lfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vBaseColor[4],GLint nTextureUnit);

  /* 參數1: 存儲着⾊器種類-紋理光源着⾊器

  參數2: 模型4*4矩陣

  參數3: 投影4*4矩陣
  參數4: 點光源位置

  參數5: 顏⾊值(⼏何圖形的基本色)

  參數6: 紋理單元 */

  // 使⽤場景: 在繪制圖形時, 可以應用變換(模型/投影變化)這種着⾊器通過給定的模型視圖投影矩陣. 着⾊器將一個紋理通過漫反射照明計算進⾏調整(相乘)。

 

三、OpenGL基本圖元連接方式

1)OpenGL 基本圖元

OpenGL 基本圖元連接方式:

2)簡單使用 - 了解

1、OpenGL 點/線

2、OpenGL 三角形

對於OpenGL 光柵化最歡迎的是三⻆形。3個頂點就能構成一個三⻆形,三⻆形類型來⾃於頂點,並不是所有的三角形都是正三⻆形 

3、OpenGL 三角形環繞方式

OpenGL 默認為 逆時針方向環繞的多邊形為正面。這就意味着圖中左邊是正面,右邊是反面。

  glFrontFace(GL_CW);

  GL_CW: 告訴 OpenGL 順時針環繞的多邊形為正面;
  GL_CCW: 告訴 OpenGL 逆時針環繞的多邊形為正⾯

4、 OpenGL 三角形帶

對於很多表⾯或者形狀⽽言,我們會需要繪制⼏個相連的三⻆形. 這是我們可以使⽤GL_TRIANGLE_STRIP 圖元繪制⼀串相連三⻆形,從⽽節省⼤量的時間 

  a、⽤前3個頂點指定第1個三⻆形之后,對於接下來的每⼀個三⻆形,只需要再指定1個頂點。需要繪制⼤量的三⻆形時,采用這種方法可以節省⼤量的程序代碼和數據存儲空間
  b、提供運算性能和節省帶寬。更少的頂點意味着數據從內存傳輸到圖形卡的速度更快,並且頂點着⾊器需要處理的次數也更少了

5、OpenGL三角形扇

對於很多表⾯或者形狀⽽言,我們會需要繪制⼏個相連的三⻆形。我們可以使⽤ GL_TRIANGLE_FAN 圖元繪制一組圍繞一個中⼼點相連的三⻆形 

6、OpenGL 工具類 GLBatch - 

 GLBatch - GLTool 中的一個簡單容器


免責聲明!

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



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