美文网首页
OpenGL(三) OpenGL渲染架构

OpenGL(三) OpenGL渲染架构

作者: 探索者的旅途 | 来源:发表于2020-07-08 18:14 被阅读0次

    一、OpenGL渲染流程

    image.png
    渲染流程
    • 设置顶点数据和其他参数。
    • 在顶点着色器中进行运算得到裁剪坐标。
    • 细分着色器、几何着色器,这两个不可自定义,跳过。
    • 图元设置,根据设置构成点、线、三角形。
    • 裁剪,裁剪掉超出显示区域的部分。
    • 光栅化, 将图源栅格化为一个个的像素点。
    • 片元着色器,将对应的栅格(像素)填充为具体的颜色。
    • 渲染图像

    二、OpenGL渲染架构

    图片来源于网络
    Attributes

    Attributes属性只能传入顶点着色器,不能直接传递到片元着色器,只能通过GLSL代码间接传递

    • 顶点数据
    • 纹理坐标
    • 光照法线
    • 颜色数据
    Uniforms

    Uniforms是一个比较统一的,不会经常发生改变,比如旋转矩阵,这个时候就可以通过Uniform值传进来,可以直接传到顶点着色器片元着色器中

    投影

    投影分为正投影(Orthographic Projection)透视投影(Perspective Projection)

    正投影(Orthographic Projection)

    物体在屏幕上的大小和实际大小相同,不管是远还是近。如果指定了视景体之外的图形将会被裁剪,可以通过GLFrustum方法完成上述工作。


    image.png
    图片来源于网络
    透视投影

    远处的物体看上去比近处的物体更小一些,在模拟和3D动画中,这种投影能够获得最大程度的逼真感。

    // fFov:垂直⽅方向上的视场⻆角度 
    // fAspect:窗⼝口的宽度与⾼高度的纵横⽐比(纵横⽐比 = 宽(w)/⾼高(h))
    // fNear:近裁剪⾯面距离
    //  fFar:远裁剪⾯面距离
    CLFrustum::SetPerspective(float fFov , float fAspect ,float fNear ,float fFar);
    
    图片来源于网络

    固定存储着色器

    初始化
    // GLShaderManager 的初始化 
    GLShaderManager shaderManager;
    shaderManager.InitializeStockShaders();
    
    单元着色器
    单位着色器:只是简单地使用默认笛卡尔坐标系(范围-1.0~1.0)。所有的片段都应用同一种颜色,几何图形为实心和未渲染的。
    参数1:存储着色器种类 - 单元着色器
    参数2:颜色
    GLShaderManager::UseStockShader(GLT_SHADER_IDENTITY, GLfloat vColor[4]);
    
    平面着色器
    平面着色器:将统一着色器进行了扩展,允许为几何图形变换指定一个4x4变换矩阵。在绘制时,可以应用变换(模型/投影变化)。
    参数1:存储着色器种类 - 平面着色器
    参数2:允许变化的4x4矩阵
    参数3:颜色
    GLShaderManager::UseStockShader(GLT_SHADER_FLAT, FLfloat mvp[16], GLfloat vColor[4]);
    
    上色着色器
    上色着色器:这种着色器唯一的uniform值就是在几何图形种应用的变换矩阵。GLT_ATTRIBUTE_VERTEX(顶点分量)和GLT_ATTRIBUTE_COLOR(颜色分量)在这种着色器中都会使用。颜色值将被平滑地插入顶点之间(称为平滑着色)。
    参数1:存储着色器种类 - 上色着色器
    参数2:允许变化的4x4矩阵
    GLShaderManager::UseStockShader(GLT_SHADER_SHADED, GLfloat mvp[16]);
    
    默认光源着色器
    默认光源着色器:使对象产生阴影和光照的效果。需要设置存储着色器的GLT_ATTRIBUTE_VERTEX(顶点分量)和GLT_ATTRIBUTE_NORMAL(表面法线)。
    参数1:存储着色器种类 - 默认光源着色器
    参数2:模型4x4矩阵
    参数3:投影4x4矩阵
    参数4:颜色
    GLShaderManager::UseStockShader(GLT_SHADER_DEFAULT_LIGHT, FLfloat mvMatrix[16],GLfloat pMatrix[16], GLfloat vColor[4]);
    
    点光源着色器
    点光源着色器:点光源着色器和默认光源着色器很相似,但是光源位置可能是特定的。同样需要设置存储着色器的GLT_ATTRIBUTE_VERTEX(顶点分量)和GLT_ATTRIBUTE_NORMAL(表面法线)。
    参数1:存储着色器种类 - 点光源着色器
    参数2:模型4x4矩阵
    参数3:投影4x4矩阵
    参数4:点光源的位置
    参数5:颜色
    GLShaderManager::UseStockShader(GLT_SHADER_POINT_LIGHT_DIFF, FLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3], GLfloat vColor[4]);
    
    纹理替换着色器
    纹理替换矩阵着色器:通过给定的模型视图投影矩阵,使绑定到nTextureUnit指定的纹理单元的纹理对几何图形进行变换。片段颜色时直接从纹理样本中直接获取的。所需的属性有GLT_ATTRIBUTE_VERTEX(顶点分量)和GLT_ATTRIBUTE_NORMAL(表面法线)。
    参数1:存储着色器种类 - 纹理替换矩阵着色器
    参数2:模型4x4矩阵
    参数3:纹理单元。
    GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_REPLACE, GLfloat mvpMatrix[16], GLint nTextureUnit);
    
    纹理调整着色器
    纹理调整着色器:将一个基本色乘以一个取自纹理单元nTextureUnit的纹理。所需的属性有GLT_ATTRIBUTE_VERTEX(顶点分量)和GLT_ATTRIBUTE_TEXTURE0(纹理坐标)。
    参数1:存储着色器种类 - 纹理调整着色器
    参数2:模型4x4矩阵
    参数3:颜色值
    参数4:纹理单元
    GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_MODULATE, GLfloat mvpMatrix[16], GLfloat vColor, GLint nTextureUnit);
    
    纹理光源着色器
    纹理光源着色器:将一个纹理通过漫反射照明计算进行调整(相乘),广西在视觉空间中的位置是给定的,这种着色器接受5个Uniform值,即模型视图矩阵、投影矩阵、视觉空间中的光源位置、几何图形的基本色和将要使用的纹理单元。
    所需的属性有GLT_ATTRIBUTE_VERTEX(顶点分量)、GLT_ATTRIBUTE_TEXTURE0(纹理坐标)和GLT_ATTRIBUTE_NORMAL(表面法线)。
    参数1:存储着色器种类 - 纹理光源着色器
    参数2:模型4x4矩阵
    参数3:投影4x4矩阵
    参数4:点光源位置
    参数5:颜色值(几何图形的基本色)
    参数6:纹理单元
    GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF, GLfloat mvMatrix, GLfloat pMatrix[16], GLfloat vLightPos[3], GLfloat vBaseColor[4], GLint nTextureUnit);
    

    相关文章

      网友评论

          本文标题:OpenGL(三) OpenGL渲染架构

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