OpenGL Shader Key Points

Posted 力为

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL Shader Key Points相关的知识,希望对你有一定的参考价值。


 

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的多个属性。

不建议使用。

 


以上是关于OpenGL Shader Key Points的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL ES 2.0 shader开发

GLSL 在OpenGL中向shader传递信息

OpenGL学习——Shader

OpenGL 各个shader的作用和区别

试图理解 OpenGL 中的像素和 GL_POINTS

OpenGL中的Shader