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
渲染三角形
- 定义顶点数据
- 顶点着色器
- 在GPU上创建内存用于储存顶点数据
- 配置OPENGL如何解释这些内存
- 指定如何发送给显卡
- VBO管理顶点着色器创建的内存(显存中存储大量顶点)
- 创建着色器并编译
每个输入变量也叫顶点属性(Vertex Attribute)
现代OPENGL需要至少设置一个顶点和片段着色器
着色器语言 GLSL(OpenGL Shading Language)
顶点属性 vertex attribute
把着色器对象链接成一个着色器程序对象 - 链接顶点属性
- 绑定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像素受到你的屏幕/窗口分辨率的限制。
###变换
- 转移矩阵
缩放 位移 旋转
先缩放,然后旋转,最后位移,否则会影响
先位移再缩放,位移的向量同样会被缩放 - 万向节死锁 Gimbal Lock
- GLM(OpenGL Mathematics)
专门为OpenGL设计的数学库