zoukankan      html  css  js  c++  java
  • OpenGL Shader Key Points (1)


    1.  Shader起步

    1.1.  可编程管线

    仅考虑Vertex shader和fragment shader:


    1.2.  Shader Object

    在编译阶段生成,把shader源代码编译成Shader 对象。

    Shader对象分类

    • Vertex Shader
    • Fragment Shader
    • Geometry Shader
    • Tess EvaluationShader
    • Tess ControlShader

    API:

    glCreateShader
    glCompileShader
    glDeleteShader
    glGetShaderiv
    glGetShaderInfoLog


    1.3.  Shader Program

    在链接阶段,创建shader程序,链接shader对象。

     

    API:

    glCreateProgram
    glAttachShader
    glLinkProgram
    glUseProgram
    glDeleteProgram
    glGetProgramiv
    glGetProgramInfoLog


    2.  Shader编程入门

     

    2.1.  编写Shader

     

    Vertex Shader:

     
    #version 400
    in vec3 VertexPosition;
    in vec3 VertexColor;
    out vec3 Color; void main()
    {
    Color = VertexColor;
    gl_Position = vec4(VertexPosition,1.0); 
    }


    // Color: 输出变量,在fragment shader中使用

    // gl_position: 内建的输出变量

    Fragment Shader:

    #version 400
    in vec3 Color;
    out vec4 FragColor;
    void main()
     {
    FragColor = vec4(Color, 1.0);
    }
     


    2.2.  绑定参数

    定义顶点属性索引与vertex shader输入变量之间的映射关系

    glBindAttribLocation(programHandle,0, "VertexPosition");

    glBindAttribLocation(programHandle,1, "VertexColor");

    glBindFragDataLocation(programHandle,0, "FragColor");

    2.3.  创建几何对象

    Buffer对象 (VBO)

    glGenBuffers  // 创建buffer对象

    glBindBuffer // 指定当前要绑定的VBO

    glBufferData// 设置Buffer对象数据

    VertexArray对象(VAO):把VBO组装成VAO

    glGenVertexArrays

    glBindVertexArray //指定当前要绑定的VAO

    glEnableVertexAttribArray //启用渲染使用的Buffer

    glBindBuffer// 指定当前要绑定的VBO

    glVertexAttribPointer//设置VAO如何使用的VBO数据

    2.4.  绘制几何对象

    glBindVertexArray//指定当前要绑定的VAO

    glDrawArrays//绘制图元格式

    2.5.  技巧

    2.5.1.  layout qualifiers

    在shader中指定输入参数对应的vertex buffer index

    layout (location = 0) in vec3 VertexPosition;

    layout (location = 1) in vec3 VertexColor;

    layout (location = 0) out vec4 FragColor;

    2.5.2.  element arrays

    使用index buffer

    2.5.3.  Interleaved arrays

    用一个buffer object存放vertex的多个属性。

    不建议使用。


  • 相关阅读:
    Vue SSR 配合Java的Javascript引擎j2v8实现服务端渲染4支持构建bundle
    Vue SSR 配合Java的Javascript引擎j2v8实现服务端渲染3配置webpack支持ssr
    使用graalvm.js调用promise
    backup
    使用babel与@babel/node
    Vue SSR 配合Java的Javascript引擎j2v8实现服务端渲染2创建Vue2+webpack4项目
    Vue SSR配合Java的Javascript引擎j2v8实现服务端渲染1概述
    CSS图片垂直居中
    Yarn && npm设置镜像源
    Spring 使用介绍(八)—— 零配置(一)
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333114.html
Copyright © 2011-2022 走看看