2.openGL着色器(笔记)

可编程管线

4.5版本的图形管线有4个处理阶段,还有1个通用计算阶段,每个阶段都需要由一个专门的着色器进行控制。

  1. 顶点着色阶段(vertex shading stage)
  2. 细分着色阶段(tessellation shading stage)
  3. 几何着色阶段(geometry shading stage)
  4. 片元着色阶段(fragment shading stage)
  5. 计算着色阶段(compute shading stage)

着色阶段之间,输入和输出的所有数据,都是通过着色器中的特殊全局变量传递。

着色语言

1. 概述

# version 450 core

void
main()
{
    // 在这里编写代码
}
  • 在程序起始位置,总是要使用#version来声明所使用的版本
  • 输入点事main()函数,没有参数,没有返回值
  • //和/**/,为注释符号
  • 结尾必有分号

2. 变量

  • 初始化

    所有变量尽可能声明即初始化。

  • 构造函数

    GLSL比c++更注重类型安全,因此支持的数值隐式转换更少。

    所需的类型 可以从这些类型隐式转换
    uint int
    float int、uint
    double int、uint、float

    上述类型转换可以应用于标量、向量以及矩阵,不能应用于数组和结构体。

    其他数值的转换,需要使用显式的转换构造函数。

    float f = 10.0;
    int ten = int(f);
    
  • 聚合类型

    基本类型 2D向量 3D向量 4D向量 矩阵类型
    float vec2 vec3 vec4 mat2 mat3 mat4
    mat2×2 mat2×3 mat2×4
    mat3×2 mat3×3 mat3×4
    mat4×2 mat4×3 mat4×4
    double dvec2 dvec3 dvec4 dmat2 dmat3 dmat4
    dmat2×2 dmat2×3 dmat2×4
    dmat3×2 dmat3×3 dmat3×4
    dmat4×2 dmat4×3 dmat4×4
    int ivec2 ivec3 ivec4 ——
    uint uvec2 uvec3 uvec4 ——
    bool bvec2 bvec3 bvec4 ——
    • 初始化过程,与它们标量部分类似:

      vec3 velocity = vec3(0.0,2.0,3.0);

    • 类型转换

      ivec3 steps = ivec3(velocity);

    • 较长向量传递给较短向量的构造函数,向量自动取短

      vec4 color;
      vec3 RGB = vec3(color);		//现在RGB只有三个分量了
      
    • 向量加长

      vec3 white = vec3(1.0);		//white = (1.0,1.0,1.0)
      vec4 translucent = vec4(white,0.5);
      
    • 矩阵初始化,可以用少量的参数,进行对角矩阵或完全填充的矩阵初始化。
      m = m a t 3 ( 4.0 ) = ( 4.0 0.0 0.0 0.0 4.0 0.0 0.0 0.0 4.0 ) m=mat3(4.0)= \begin{pmatrix} 4.0 & 0.0 & 0.0 \\ 0.0 & 4.0 & 0.0 \\ 0.0 & 0.0 & 4.0 \end{pmatrix} m=mat3(4.0)= 4.00.00.00.04.00.00.00.04.0

    • 矩阵初始化,可以是指定每一个元素,也可以标量和向

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值