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


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

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

    • Samplers:这个是可选的,一种特殊的uniforms,表示顶点着色器使用的纹理。

    • Shader program:顶点着色器的源码或可执行文件,描述了将对顶点执行的操作。

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

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

    顶点着色器可用于传统的基于顶点的操作,例如:基于矩阵变换位置,进行光照计算来生成每个顶点的颜色,生成或者变换纹理坐标。
    另外因为顶点着色器是由应用程序指定的,所以你可以用来进行任意自定义的顶点变换。
    下面是一个用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变量,不需要声明,顶点着色器必须把变换后的位置赋值给它。
  • 相关阅读:
    SDN2017 第四次作业
    SDN2017 第三次实验作业
    软件工程实践2017 个人作业——软件工程实践总结作业
    sdn2017 第三次作业
    Golang 探索对Goroutine的控制方法
    SDN2017 第二次实验作业
    SDN2017 第二次作业
    Redis在游戏服务器中的应用
    手机游戏开发
    手机游戏开发
  • 原文地址:https://www.cnblogs.com/panshengneng/p/8492397.html
Copyright © 2020-2023  润新知