OpenGL

LearnOpenGL

OpenGL是什么?

API

  • glAttachShader()
    把编译的着色器附加到程序对象上
  • glGenBuffers()
    生成VBO对象
  • glGenVertexArrays()
    生成VAO对象
  • glBindBuffer()
    把创建的缓冲绑定到目标
    GL_ARRAY_BUFFER
    GL_ELEMENT_ARRAY_BUFFER
  • glBindVertexArray()
    绑定VAO
  • glBufferData()
    把用户定义数据复制到当前绑定缓冲的内存中
    GL_STATIC_DRAW
    GL_DYNAMIC_DRAW
    GL_STREAM_DRAW
  • glClearColor
  • glClear
  • glCreateShader()
    创建着色器
    GL_VERTEX_SHADER
    GL_FRAGMENT_SHADER
  • glCompileShader()
  • glCreateProgram()
    创建程序
  • glDrawArrays()
    绘制图元
    GL_TRIANGLES
  • glDrawElements()
    绘制,指明从索引缓冲渲染
    从当前绑定到GL_ELEMENT_ARRAY_BUFFER目标中的EBO中获取索引
    GL_TRIANGLES
  • glDeleteShader()
  • glDisableVertexAttribArray()
  • glEnableVertexAttribArray
  • glGetShaderiv
    检查编译是否成功
    GL_COMPILE_STATUS
  • glGetProgramiv
    检查链接着色器程序是否失败
    GL_LINK_STATUS
  • glGetShaderInfoLog()
    编译失败,获取错误消息
  • glLinkProgram()
    链接程序对象中的着色器
  • glShaderSource()
    把着色器源码附加到着色器对象上
  • glUseProgram()
  • glVertexAttribPointer
    告诉OpenGL该如何解析顶点数据
  • glEnableVertexAttribArray
    启用顶点属性
  • glGetUniformLocation
    查询uniform的位置
  • glUniform
    设置uniform值
    OpenGL核心是C写的,不支持重载
    glUniform3f
  • glfwGetTime
  • glfwWindowShouldClose

glm::ortho()
glm::mat4
glm::perspective
glm::radians

渲染三角形

  1. 定义顶点数据
  2. 顶点着色器
    • 在GPU上创建内存用于储存顶点数据
    • 配置OPENGL如何解释这些内存
    • 指定如何发送给显卡
    • VBO管理顶点着色器创建的内存(显存中存储大量顶点)
  3. 创建着色器并编译
    每个输入变量也叫顶点属性(Vertex Attribute)
    现代OPENGL需要至少设置一个顶点和片段着色器
    着色器语言 GLSL(OpenGL Shading Language)
    顶点属性 vertex attribute
    把着色器对象链接成一个着色器程序对象
  4. 链接顶点属性
    - 绑定VAO
    - 把顶点数组复制到缓冲中供OpenGL使用
    - 设置顶点属性指针

    GLSL

  • uniform

词汇

VAO Vertex Array Object 顶点数组对象
VBO Vertex Buffer Object 顶点缓冲对象
EBO/IBO Element Buffer Object/Index Buffer Object 索引缓冲对象
Graphics Pipeline 图形渲染管线
OpenGL Shading Language GLSL OpenGL着色器语言
Normalized Device Coordinates 标准化设备坐标
图形渲染管线可以被划分为两个主要部分:第一部分把你的3D坐标转换为2D坐标,第二部分是把2D坐标转变为实际的有颜色的像素
2D坐标和像素也是不同的,2D坐标精确表示一个点在2D空间中的位置,而2D像素是这个点的近似值,2D像素受到你的屏幕/窗口分辨率的限制。
33

###变换

  • 转移矩阵
    缩放 位移 旋转
    先缩放,然后旋转,最后位移,否则会影响
    先位移再缩放,位移的向量同样会被缩放
  • 万向节死锁 Gimbal Lock
  • GLM(OpenGL Mathematics)
    专门为OpenGL设计的数学库