OpenGL学习随笔(四)-- 顶点着色器(VertexShader)

顶点着色器对顶点实现了一种通用的可编程方法。
顶点着色器的输入数据由下面组成:
  • Attributes:使用顶点数组封装每个顶点的数据,一般用于每个顶点都各不相同的变量,如顶点位置、颜色等。

  • Uniforms:顶点着色器使用的常量数据,不能被着色器修改,一般用于对同一组顶点组成的单个3D物体中所有顶点都相同的变量,如当前光源的位置。

  • Samplers:这个是可选的,一种特殊的uniforms,表示顶点着色器使用的纹理。
  • Shader program:顶点着色器的源码或可执行文件,描述了将对顶点执行的操作。

顶点着色器的输出数据是varying(易变)变量,在图元光栅化阶段,这些varying值为每个生成的片元进行计算,并将结果作为片元着色器的输入数据。从分配给每个顶点的原始varying值来为每个片元生成一个varying值的机制叫做插值。

顶点着色器数据的输入和输出可以参考下图:

669331-20180302113903143-870412752.png

顶点着色器可用于传统的基于顶点的操作,例如:基于矩阵变换位置,进行光照计算来生成每个顶点的颜色,生成或者变换纹理坐标。
另外因为顶点着色器是由应用程序指定的,所以你可以用来进行任意自定义的顶点变换。
下面是一个用OpenGL ES着色器语言编写的顶点着色器源码,这个顶点着色器使用一个position和跟它相关联的color数据作为输入数据,通过一个4×4矩阵变换位置,然后输出变换后的位置和颜色数据。
1.  // uniforms used by the vertex shader
2.  uniform mat4 u_mvpMatrix; // matrix to convert P from model
3.  // space to normalized device space.
4.
5.  // attributes input to the vertex shader
6.  attribute vec4 a_position; // position value
7.  attribute vec4 a_color; // input vertex color
8.
9.  // varying variables – input to the fragment shader
10. varying vec4 v_color; // output vertex color
11.
12. void main()
13. {
14.     v_color = a_color;
15.     gl_Position = u_mvpMatrix * a_position;
16. }
第2行代码定义了一个uniform变量u_mvpMatrix,mat4表示4×4浮点数矩阵,该变量存储了组合模型视图和投影矩阵。
第6和7行代码定义了顶点着色器的输入数据:Attributes,vec4表示包含了4个浮点数的向量,a_position是顶点位置属性,a_color是顶点颜色属性。
第10行代码定义了varying类型的变量v_color,varying是用于从顶点着色器传递到片元着色器的变量,v_color是顶点着色器的输出数据,存储了每个顶点的颜色。
第12-16行的main函数是顶点着色器和片元着色器的入口。
第14行读取了顶点着色器输入属性中a_color的值,并把它赋值给输出数据v_color。
第15行的gl_Position 是内置的varying变量,不需要声明,顶点着色器必须把变换后的位置赋值给它。

转载于:https://www.cnblogs.com/panshengneng/p/8492397.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值