OpenGL(三)——OpenGL着色器基础

上一篇我们介绍了OpenGL基础相关的知识:OpenGL图形绘制OpenGL入门,今天介绍一下OpenGL另一重要的成员----OpenGL着色器。

什么是OpenGL着色器?

Open GL ES 着色器语言是一种高级的图形编辑语言,主要特性有一下几点:

  1. OpenGL ES着色器语言是一种高级的过程语言
  2. 对顶点着色器,片元着色器使用的是同样的语言,不做区分
  3. 基于C/C++的语法及流程控制
  4. 完美支持向量与矩阵的各种操作
  5. 拥有大量的内置函数来提供丰富的功能

OpenGL关键技术点

  1. 着色器是使用一种叫GLSL的类C语言写成的

  2. 着色器的结构:

    1. 版本声明:#version version_number
    2. 变量:in type xxx; out type xxx; uniform type xxx;
    3. main函数
  3. 顶点差色器的输入为顶点属性(Vertex Attribute):

    1. 一般情况的上线为16个包含4分量的顶点属性
    2. 与硬件有关,通过GL_MAX_VERTEX_ATTRIBS查询:glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes);
  4. 着色器语言除C的基本数据类型外,还包含向量(Vector)和矩阵(Matrix)

    1. Vector相关的api:
      1. 访问4个属性:vec.x, vec.y, vec.z, vec.w
      2. 重组:vec2, vec3, vec4
  5. GLSL输入与输出:

    1. 两个着色器之间,输入和输出的类型和名称一样,就会自动匹配 —- 与顺序无关
    2. 顶点着色器的输入:通过layout来指定输入变量
    3. 片段着色器的输出:vec4颜色输出变量,指定片段最终的颜色
  6. GLSL的uniform:

    1. 作用:CPU直接向GPU的着色器发送数据的方式
    2. uniform是全局唯一
    3. 着色器里的定义:uniform type xxx;
    4. opengl代码设置uniform的值:
      1. 获取地址:glGetUniformLocation(shaderProgram, “uniform名称”)
      2. 使用着色器程序后,设置值:
        1. glUseProgram(shaderProgram);
        2. glUniform4f(location, 0.0f, greenValue, 0.0f, 1.0f);
  7. 改变三角形颜色的方法:

    1. 通过uniform传值给片段着色器
    2. 顶点数据里,添加颜色数据,再通过顶点着色器传给片段着色器
  8. 注意:片段着色器每次处理一个顶点,而不是一个图形

好了,至此,有关OpenGL着色器的基本概念和常用方法基本介绍完毕,在下一篇,我会详细的介绍OpenGL着色器更加高深的知识。如果你对作色器还是不够了解,可以参考我下面的地址,官网有很详细的介绍。

参考

在线学习OpenGL资料一
OpenGL在线学习api文档

创作不易,如果觉得我的博客对你有帮助,不防给我一颗小红心吧。

发布了49 篇原创文章 · 获赞 66 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/ljx1400052550/article/details/103896699
今日推荐