当前位置: 首页 > news >正文

[3]Opengl ES着色器

    术语:
    VertexShader:顶点着色器,用来描述图形图像位置的顶点坐标;
    FragmentShader:片元着色器,用来给顶点指定的区域进行着色;
    Vertex:顶点
    Texture:纹理,给顶点区域进行渲染的材质,比如图像等,其实就是一块内存空间,里面的像素按一定规则排列;

   Opengl ES2.0对渲染管线中的两个阶段增加可编程支持:顶点着色器和片元着色器,分别用于顶点数据和图元着色编程控制,其使用的编程语言叫GLSL,类似C语言,下面对着色器使用的类型、修饰符进行介绍。
   
   1. 数据类型:
   float  bool  int    基本数据类型

   vec2                包含了2个浮点数的向量

   vec3                包含了3个浮点数的向量

   vec4                包含了4个浮点数的向量

   ivec2               包含了2个整数的向量

   ivec3               包含了3个整数的向量

  ivec4               包含了4个整数的向量

  bvec2               包含了2个布尔数的向量

  bvec3               包含了3个布尔数的向量

  bvec4               包含了4个布尔数的向量

  mat2                2*2维矩阵

  mat3                3*3维矩阵

  mat4                4*4维矩阵

  sampler1D           1D纹理采样器

  sampler2D           2D纹理采样器

  sampler3D           3D纹理采样器

  2.着色器修饰符

       属性(Attribute):由 vertext array 提供的顶点数据,如空间位置,法向量,纹理坐标以及顶点颜色,属性可以理解为针对每一个顶点的输入数据。属性只在顶点着色器中才有,片元着色器中没有属性。OpenGL ES 2.0 规定了所有实现应该支持的最大属性个数不能少于 8 个。

       常量(Uniforms): Uniforms保存由应用程序传递给着色器的只读常量数据。在顶点着色器中,这些数据通常是变换矩阵,光照参数,颜色等。由 uniform 修饰符修饰的变量属于全局变量,该全局性对顶点着色器与片元着色器均可见,也就是说,这两个着色器如果被连接到同一个应用程序中,它们共享同一份 uniform 全局变量集。因此如果在这两个着色器中都声明了同名的 uniform 变量,要保证这对同名变量完全相同:同名称+同类型,因为它们实际是同一个变量。此外,uniform 变量存储在常量存储区,因此限制了 uniform 变量的个数,OpenGL ES 2.0 也规定了所有实现应该支持的最大顶点着色器 uniform 变量个数不能少于 128 个,最大的片元着色器 uniform 变量个数不能少于 16 个。
   
      采样器(Samplers): 一种特殊的 uniform,用于呈现纹理。sampler 可用于顶点着色器和片元着色器。
   
      可变变量(Varying):varying 变量用于存储顶点着色器的输出数据,也存储片元着色器的输入数据。varying 变量会在光栅化处理阶段被线性插值。顶点着色器如果声明了 varying 变量,它必须被传递到片元着色器中才能进一步传递到下一阶段,因此顶点着色器中声明的 varying 变量都应在片元着色器中重新声明为同名同类型的 varying 变量。OpenGL ES 2.0 也规定了所有实现应该支持的最大 varying 变量个数不能少于 8 个。
   
    3.着色器坐标系统

      在Opengl ES开发中,我们会碰到如下的坐标系统:

      物体坐标系、视界坐标系、摄像机坐标、规范化坐标、屏幕坐标。

      下面我们简单介绍下这几种坐标系的关系,详细的介绍后续会做介绍,下面我们先来看看在Opengl ES中,一个画面从开始到显示到屏幕上经过的转换。

       

      物体坐标系:此坐标系针对场景中的单个物体而言,就是说场景中每个物体都有自己独立的坐标,其中某个物体做了旋转,并不会影响到其它物体的坐标。

       世界坐标系:世界坐标系是一个比较特殊的坐标系,其一般来说是固定的,用来标定物体和物体之间的相对位置关系(同在世界坐标系之中的物体),形象点说,一个房间相当于一个世界坐标,房间中的桌子、椅子、人各种拥有自己的物体坐标系,但是其在房间中的位置标定物体在房间中和其它物体的相对位置关系。

       摄像机坐标:摄像机坐标是相对于视点来说的,是从摄像机的角度来描述的,比如房间中已经有很多物体,那么我们调整摄像机的位置,所观察到的物体的视角是不一样的,这就是上图说的视变换,这里其实包含两个方面,摄像机调整其观察位置和被观察物体进行变换,两者的结果是等价的,因为最终的结果就是我们从不同角度看到的物体是不一样的。

       规范化坐标系:此坐标系也叫归一化,是Opengl ES的空间计算坐标系,取值范围到-1~1之间。

       屏幕坐标系:此坐标系就是我们显示屏幕的实际坐标系,其通常是左上角为原点,X轴向右,Y轴向下,在归一化坐标下的物体最终都会通过视口变换转为屏幕坐标,然后显示在屏幕上。

      


http://www.mrgr.cn/news/35305.html

相关文章:

  • 【CICD】CICD 持续集成与持续交付在测试中的应用
  • 数据结构——快速排序
  • MySQL LOAD DATA INFILE导入数据报错
  • 前端垂直居中的多种实现方式及应用分析
  • Spring框架之策略模式 (Strategy Pattern)
  • Linux软件包管理与Vim编辑器使用指南
  • 物理学基础精解【14】
  • AI写论文哪个平台好用?吐血总结10个AI论文写作工具
  • 【python篇】python pickle模块一篇就能明白,快速理解
  • C语言练习:通讯录
  • 电脑共享同屏的几种方法分享
  • windows桌面管理软件推荐:一键整理桌面!美化电脑桌面小助手!
  • 【MySQL】regexp_replace在MySQL以及regexp extract all在MySQL的用法
  • 如何修改音频的音量增益
  • 力扣 中等 92.反转链表 II
  • std::make_unique小结
  • 【Qt】背景介绍
  • 【代码笔记】
  • Java解决同构字符串问题
  • file zilla server安装以后,client连接,账号登录成功,但是读取目录失败的处理
  • 建筑工程系列专业职称评审条件大全
  • 误删系统引导如何恢复?如何创建系统引导?
  • C++: unordered系列关联式容器
  • MQ的简单梳理
  • 【动态规划】(五)动态规划——子序列问题
  • 前端报错401 【已解决】