美文网首页
OpenGL渲染架构以及8种存储着色器

OpenGL渲染架构以及8种存储着色器

作者: 爱你因为泰勒 | 来源:发表于2020-07-07 16:33 被阅读0次
OpenGL渲染架构图

ios代码如何把数据传到顶点着色器和片元着色器中?
从上图中可以看到有三个通道可以传数据到顶点、片元着色器中(Attributes、Uniforms、TextureData)

  • 属性(Attributes)只能传数据到顶点着色器(有以下三种)
    1.顶点数据x,y,z,w
    2.投影矩阵、模型矩阵
    3.纹理坐标(图片映射坐标)
  • Uniforms(统一批次的)可以传数据(如变换矩阵 通道 颜色值)到顶点着色器以及片元着色器
  • 纹理(TextureData)可以传纹理数据到顶点着色器以及片元着色器,但是纹理数据传到顶点着色器是没有意义(顶点着色器是处理顶点的)
顶点着色器部分
attribute vec4 Position; //顶点坐标
attribute vec2 TextureCoords; //纹理坐标
varying vec2 TextureCoordsVarying; //顶点着色器桥接到片元着色器

void main (void) {
    gl_Position = Position;
    TextureCoordsVarying = TextureCoods;
}

正投影
使用的API:

GLFrumstum::SetOrthographic(GLfloat xMax,GLfloat yMin,GLfloat yMax,GLfloat zMin,GLfloat zMax);

透视投影
GLFrustum类通过setPerspective 方法为我们构建一个平截头体,API如下:

GLFrustum::SetPerspective(float fFov,float fAspect,float fNear,float fFar);
参数:
fFov:垂直方向上的视场角度
fAspect:窗口的宽度与高度的纵横比
fNear:近裁剪面距离
fFar:远裁剪面距离

纵横比 = 宽(w)/高(h)

对于正投影与透视投影:

  • 正投影 -> 显示2D(一样大的)
  • 透视投影 -> 3D图形 (远小近大)

固定管线下的8种存储着色器:
固定着色器: 里面封装了顶点着色器和片元着色器

//GLShaderManager 的初始化
GLShaderManger shaderManager
shaderManager.InitializeStockShaders();
  1. 单元着色器:它是一种最简单的着色器
//着色器所有的方法名字都是用 UserStockShader
GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY,GLfloat vColor[4]);
参数1: 存储着色种类-单元着色器
参数2: 颜色

使用场景:绘制默认OpenGL坐标系(-1,1)下图形,图形所有片段都会以一种颜色填充
  1. 平面着色器: 它是用的最多的一种
GLShaderManager::UserStockShader(GLT_SHADER_FLAT,GLfloat mvp[16],GLfloat vColor[4]);
参数1:存储着色器种类-平面着色器
参数2:允许变化的4*4矩阵
参数3:颜色

使用场景:在绘制图形时,可以应用变换(模型/投影变化).
  1. 上色着色器
GLShaderManager::UserStockShader(GLT_SHADER_SHADED,GLfloat mvp[16]);
参数1:存储着色器种类-上色着色器
参数2:允许变化的4*4矩阵

使用场景:在绘制图形时,可以应用变换(模型/投影变化) 颜色将会平滑地插入到顶点之间称为平滑着色.
  1. 默认光源着色器
GLShaderManager::UserStockShader(GLT_SHADER_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);
参数1:存储着色器种类-默认光源着色器
参数2:模型4*4矩阵
参数3:投影4*4矩阵
参数4:颜色值

使用场景:在绘制图形时,可以应用变换(模型/投影变化) 这种着色器会使绘制的图形产生阴影和光照的效果.
  1. 点光源着色器
GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vColor[4]);
参数1:存储着色器种类-点光源着色器
参数2:模型4*4矩阵
参数3:投影4*4矩阵
参数4:点光源的位置
参数5:颜色值

使用场景:在绘制图形时,可以应用变换(模型/投影变化) 这种着色器会使绘制的图形产生阴影和光照的效果.它与默认光源着色器非常相似,区别只是光源位置可能是特定的。
  1. 纹理替换矩阵着色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE,GLfloat mvMatrix[16],GLint nTextureUnit);
参数1:存储着色器种类-点光源着色器
参数2:模型4*4矩阵
参数3:纹理单元

使用场景:在绘制图形时,可以应用变换(模型/投影变化) 这种着色器通过给定的模型试图投影矩阵。使用纹理单元来进行颜色填充,其中每个像素点的颜色是从纹理中获取的。
  1. 纹理调整着色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE,GLfloat mvMatrix[16],GLfloat vColor[4],GLint nTextureUnit);
参数1:存储着色器种类-点光源着色器
参数2:模型4*4矩阵
参数3:颜色值
参数4:纹理单元

使用场景:在绘制图形时,可以应用变换(模型/投影变化) 这种着色器通过给定的模型试图投影矩阵。着色器将一个基本色乘以一个取自纹理单元nTextureUnit的纹理。将颜色与纹理进行混合后才填充到片段中。

8.纹理光源着色器

GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFE,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vBaseColor[4],GLint nTextureUnit);
参数1:存储着色器种类-纹理光源着色器
参数2:模型4*4矩阵
参数3:投影4*4矩阵
参数4:点光源位置
参数5:颜色值(几何图形的基本色)
参数6:纹理单元

使用场景:在绘制图形时,可以应用变换(模型/投影变化) 这种着色器通过给定的模型试图投影矩阵。着色器将一个纹理通过漫反射照明计算进行调整(相乘)。

相关文章

  • OpenGL基础渲染

    第三章 基础渲染 本章内容 OpenGL渲染基础架构 如何使用7种OpenGL几何图元 如何使用存储着色器 如何使...

  • OpenGL基础渲染

    第三章 基础渲染 本章内容 OpenGL渲染基础架构 如何使用7种OpenGL几何图元 如何使用存储着色器 如何使...

  • 04-OpenGL渲染基础

    目标: 掌握OpenGL渲染架构图 理解OpenGL数据传递的三种方式 掌握OpenGL提供的存储着色器 正投影 ...

  • OpenGL ES 入门 — 2.GLSL基础

    在OpenGL 3.0之前,OpenGL 使用的是固定渲染管线,使用存储着色器完成渲染,存储着色器就是写好了着色程...

  • OpenGL渲染架构

    OpenGL渲染架构 OpenGL的渲染架构image.png 渲染流程:设置顶点数据和其他参数。在顶点着色器中进...

  • 简述OpenGL渲染架构流程、固定着色器、图元

    开场白 本文介绍内容 OpenGL渲染架构流程 OpenGL固定着色器 OpenGL基本图元连接方式 OpenGL...

  • 视频特效学习02- OpenGL渲染基础

    学习目标: 1.OpenGL渲染架构(掌握) OpenGL数据传递的3种方式(理解) OpenGL提供的着色器(掌...

  • OpenGL渲染架构以及8种存储着色器

    ios代码如何把数据传到顶点着色器和片元着色器中?从上图中可以看到有三个通道可以传数据到顶点、片元着色器中(Att...

  • OpenGL 渲染流程解析

    OpenGL 渲染架构 Attributes 属性只能传入顶点着色器,不能直接传递到片元着色器,只能通过GLSL代...

  • OpenGL 2 渲染流程图解析

    OpenGL 图元绘制 渲染架构 分为客户端,服务端 Attributes属性(顶点着色器,不能直接传到片元着色器...

网友评论

      本文标题:OpenGL渲染架构以及8种存储着色器

      本文链接:https://www.haomeiwen.com/subject/myiaqktx.html