着色器

作者: 大鹏鸟 | 来源:发表于2018-04-23 18:22 被阅读7次

一、着色器语言GLSL

由类C语言写成。
着色器的开头总是要声明版本,接着是输入和输出变量、uniform和main函数,main函数是每个着色器的入口。简单的结构如下:

#version version_number

in type in_variable_name;
in type in_variable_name;

out type out_variable_name;

uniform type uniform_name;

int main()
{
  // 处理输入并进行一些图形操作
  ...
  // 输出处理过的结果到输出变量
  out_variable_name = weird_stuff_we_processed;
}

对于顶点着色器,其输入变量也被称为顶点属性。

1、数据类型

它保留了C语言的基础类型,如int、double等,同时也扩展了两个容器类型:向量(Vector)和矩阵(Matrix)。

1.1、向量

是一个包含1、2、3或者4个分量的容器,这四个分量分别为:x、y、z、w,其格式为:

向量容器类型+vec+n

其中向量类型为b、i、d、u,n可以取1、2、3和4中的一个。具体解释见下表: image.png

可以通过点语法获取相应的分量,如vec2 someVec;someVec.x。但是不允许访问和获取不存在的分量。

1.2、输入与输出

输入与输出的定义解决了着色器之间的交流问题。使用in和out关键字来定义期输入与输出,两个着色器之间的数据交流,除了in和out关键字外,最重要的是着色器之间交流的变量的类型和变量名要相同,只有类型和变量名想同乐才可以交流。

1.3、Uniform

是一种从CPU数据向GPU着色器发送数据的方式。和顶点属性的区别为:
1、Uniform是全局的
2、其全局性保证了其独一无二
3、其全局性保证了在任意着色器阶段都可以访问
4、无论你把uniform值设置成什么,uniform会一直保存它们的数据,直到它们被重置或更新

相关文章

  • OpenGL学习--着色器使用

    单元着色器 平面着色器 上色着色器 默认光源着色器 点光源着色器 纹理替换矩阵着色器 纹理调整着色器 纹理光源着色器

  • OpenGL ES 自定义着色器

    着色器 创建着色器 删除着色器 编译着色器 将着色器的源代码附着到着色器对象上。 开始编译着色器源代码。 创建与链...

  • OpenGL存储着色器

    1、初始化 2、存储着色器种类 单元着色器 平面着色器 上色着色器 默认光源着色器 点光源着色器 纹理替换矩阵着色...

  • OpenGL 固定管线下的着色器

    OpenGL 固定管线下为开发者提供了几种着色器:单元着色器、平面着色器、上色着色器、默认光源着色器、点光源着色器...

  • Unity3Dshader中的RenderType

    Opaque: 用于大多数着色器(法线着色器、自发光着色器、反射着色器以及地形的着色器)。Transparent:...

  • OpenGL的一些学习

    资料来源:逻辑教育 OpenGL 固定管线中常见的几种着色器 单元着色器 平面着色器 上色着色器 默认光源着色器 ...

  • 《WebGL 编程指南》笔记 —— 第九章 层次模型

    着色器对象与程序对象着色器对象:着色器对象管理一个顶点着色器或一个片元着色器。每一个着色器都有一个着色器对象。程序...

  • WebGL 3D概念讲解(着色器)

    着色器 1、顶点着色器 2、片元着色器

  • [OpenGL] - 图元

    1.存储着色器 GLShaderMananger 1.1 单位着色器 1.2 平面着色器 1.3 上色着色器 1....

  • OpenGL基本图元和固定管线

    OpenGL的7种基本图元 创建投影的方式 固定管线着色器 单元着色器 平面着色器 上色着色器 默认光源着色器 点...

网友评论

      本文标题:着色器

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