OpenGL 学习笔记

根据LearnOpenGL CN学习OenGL。

三维图形的渲染——图形渲染管线

众所周知,真实世界是3D世界,而屏幕是个二维平面。图形渲染管线(Graphics Pipeline)就是要在二维平面上“画“出三维效果。

为什么要叫管线呢?因为我们首先有一对初始的图形数据,他们可能是各种各样的点,他们途径一个输送管道,就像车间的传送带一样,管道的每一部分把这些数据进行各种处理与变化,最终呈现在屏幕上。

图形渲染管线主要为几个阶段,每个阶段把前一阶段的输出作为输入。每一个阶段都是高度专门化的,且容易执行。GPU上有着成千上万的小处理核心,这些处理核心运行着各个阶段的小程序,从而在图形渲染管线中快速出利数据。这些小程序叫做着色器(Shader)。

顶点输入

第一个阶段为顶点输入。OpenGL中所有的坐标都是3D坐标xyz,为右手系。窗口的正中心为坐标原点。屏幕的左向右为x轴正方形,从下向上为y轴正方形,从里到外为z轴正方向。三个方向上坐标的范围都为[-1,1]。这个坐标轴应该是不会改变的,所有绘制的坐标点都最终要以这个坐标轴为基准。

1
2
3
4
5
6
7
8
9
    y
    ^
    
    
    └╌╌╌╌╌╌╌╌>x
   /
  /
 
z

以渲染一个三角形为例,我们需要这个三角形三个顶点的坐标数据:

1
2
3
4
5
GLfloat vertices[] = {
    -0.5f, -0.5f, 0.0f,
     0.5f, -0.5f, 0.0f,
     0.0f,  0.5f, 0.0f   
};

由于z方向是从内向外的,所以当只渲染一个三角形的时候,z轴坐标变得不那么重要。如果我们渲染的图像复杂一点,前方的图像就会遮挡住后面的图像,

评论