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 中的一个简单容器

原文地址:https://www.cnblogs.com/zhangzhang-y/p/13275314.html