• 图形学-着色频率与渲染管线


    1.着色频率

    根据不同的着色方式,有不同的着色频率,主要的着色频率分为三种——面着色,顶点着色和像素着色。主要的不同之处在于法线的选择方式不同。

    • 面着色 Flat Shading指的是计算每一个三角形平面的法线后对一个平面整体进行着色;
    • 顶点着色 Gouraud Shading 指的是计算每一个三角形三个顶点的法线后进行着色,最后在三角形内部插值得到颜色。顶点法线的计算是通过顶点相邻面的法线的(加权)平均值求出;
    • 像素着色 Phong Shading指的是计算出每一个像素的法线进行着色。三角形内部点法线的计算需要依靠重心坐标计算。

    当几何体相对复杂,构造精细的时候,三种着色效果产生的结果不相上下。

    2.渲染管线

    管线 Pipeline是从模型到图片生成的过程。管线分为以下过程:
    在这里插入图片描述
    首先将顶点的三位向量作为输入,进行几何变换(mvpMatrix)后划分三角形区域。通过光栅化获得一个个小的碎片(或者是一个个小像素)后进行着色,得到我们的输出。

    我们可以定义顶点或者像素的着色方式来提供不同的着色要求,这被称为 Shader。硬件中会提供这样的编程方式定制不同的着色方式,以 OpenGL 为例,我们可以定义以下的着色函数:

    uniform sampler2D myTexture ;
     uniform vec3 lightDir ;
     varying vec2 uv ;
     varying vec3 norm ;
    
     void diffuseShader () {
     vec3 kd ;
     kd = texture2d ( myTexture , uv );
     kd *= clamp ( dot (- lightDir , norm ) , 0.0 , 1.0) ;
     gl_FragColor = (kd , 1.0) ;
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    这里我们定义了一个简单的漫反射着色器。同时,着色器会自动应用到每一个顶点或者是像素上,不需要我们使用显式的 for 循环进行遍历。逐顶点,逐片元就是这个意思。逐个执行上面代码,每个顶点或片元执行的程序都一样。

    3.纹理映射

    对于任何一个三角形,我们在内部填充一个图形作为纹理。纹理(Texture)也就是我们在不同的位置所定义的漫反射系数。有点初始化片元状态的意思

  • 相关阅读:
    ConcurrentModificationException的解决,让你明白阅读源码的重要性!
    CMake基本使用
    mysql常见错误
    第五章《类的继承》第6节:instanceof运算符
    嵌入式开发和后端开发如何选择?
    POE 供电iP网络音箱2*15W 教学广播音箱 办公室背景音乐广播音箱SV-7041
    运维日志排序(JavaScript)
    基于PSO算法的功率角摆动曲线优化研究(Matlab代码实现)
    剑指offer 45. 数字序列中某一位的数字
    Spring和Spring Boot常用注解介绍及使用
  • 原文地址:https://blog.csdn.net/weixin_46773434/article/details/127637029