OpenGL 与 3D第 1 / 6 章
OpenGL 与基础渲染管线
认识状态机、缓冲、顶点输入与从图元到片段的基础流程。
OpenGL简介
核心概念
图形渲染管线 Graphics Pipeline
- 顶点数组对象 VAO(vertex Array Object) 记录VBO和EBO组合
- 顶点缓冲对象 VBO (vertex Buffer Object) 记录的是顶点信息
- 元素缓冲对象 EBO (Eelement Buffer Object) / 索引缓冲对象 IBO (Index Buffer Object) 记录的是 顶点的绘制顺序信息
🚅 提示
简单理解: 顶点数组对象会记录顶点缓冲对象以及元素缓冲对象的绑定,解绑等操作,所以先绑定一个VAO,然后再去绑定VBO和EBO等操作,在绘制的时候,只需要换绑不同的VAO,即可绘制不同的顶点(图形)
概念:指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程
图形渲染管线接受一组3D坐标,然后把它们转变为你屏幕上的有色2D像素输出
opengl的大部分工作是把3D坐标转换成2D像素。3D坐标转换成2D坐标的处理过程使用oopengl的图形渲染管线管理的,图形渲染管线可以划分为2个过程。第一部分把3D坐标转换成2D坐标,第2部分是把2D坐标转变为实际的有颜色的屏幕像素。
gpu能并发执行,所以运算效率高
图形渲染管线可以划分为多个阶段,每一个阶段会把前一个阶段的输出作为输入。每个阶段会有一个特定功能的程序来处理,这个程序称为着色器
可自定义的着色器:
顶点着色器vertex shader3D坐标空间变换的作用,输出的是投影空间3D坐标
#必须把位置数据赋值给预定义的gl_Position变量,它在幕后是vec4类型的
#version 330 core
layout (location = 0) in vec3 aPos;
void main(){
gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
}
几何着色器geometry shader很少修改 ,使用默认值即可片段着色器(片元)fragment shader2D坐标融合颜色的过程,效果产生的地方,片段着色器中的坐标是 屏幕空间坐标
# 片段着色器只需要一个输出变量,这个变量是一个4分量向量,它表示的是最终的输出颜色,
# 我们应该自己将其计算出来。声明输出变量可以使用out关键字,这里我们命名为FragColor
#version 330 core
out vec4 FragColor;
void main(){
FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);
}
小结
📍 提示
总结一下:
顶点着色器输入后会转换 成投影空间坐标传递给几何着色器,几何着色器会根据类型补充一些顶点,输出到图元装配阶段,图元装配后输出一些形状,然后传入光栅化阶段,映射为最终屏幕像素数据!!以及片段着色器所需要的数据,并且经过裁切后(视野外的会被抛弃,提高效率),传递给片段着色器,计算最终颜色(高级效果,光照、阴影等),然后进入混合阶段,和alpha测试阶段(深度,是否需要丢弃,透明度等),最终输出一个屏幕像素的颜色,显示到屏幕上
标准化设备坐标:(Normalized Device Coordinates)NDC 在(-1,1)之间的坐标,经过顶点着色器处理后的坐标,都应该是DNC (按照投影参数来标准化)


