学习笔记:管线概览

14 篇文章 0 订阅
/*
* OpenGL图形管线简化概览(只包含主要阶段):
* 
*  C++应用程序
*      |            ————————
*  顶点着色器           顶点处理
*      |            ————————
* 曲面细分着色器
*      |            图元(三角形)处理
*  几何着色器
*      |            ————————
*    光栅化
*      |            片段(像素)处理
*  片段着色器
*      |
*   像素操作          隐藏面消除等
*/

/*
* 曲面细分着色器:
* 曲面细分着色器用以生成大量三角形,通常是网格形式
*/

/*
* 几何着色器:
* 顶点着色器赋予程序员一次操作一个顶点的能力(“按顶点”处理)
* 片段着色器允许一次操作一个像素(“按片段”处理)
* 几何着色器赋予一次操作一个图元的能力(“按图元”处理)
* 当到达几何着色器阶段时,管线已经完成了将顶点组合为三角形的过程(图元组装)
* 接下来几何着色器会让程序员可以同时访问每个三角形的所有顶点
*/

/*
* 在曲面细分阶段已经给程序员同时访问所有顶点的能力后,再提供一个按图元运算的着色器阶段看似多余
* 它们的区别是:曲面细分只在非常少数情况下提供了这个能力,
* 尤其是由曲面细分着色器生成的三角形网格时
* 它并没有提供同时访问所有顶点,即任何从C++用缓冲区传来的顶点的能力
*/

/*
* 光栅化:
* 3D世界中的点、三角形、颜色等都需要展现在一个2D显示器上
* 这个2D屏幕由光栅——矩形像素阵列组成
* 当3D物体光栅化后,OpenGL将物体中的图元(通常是三角形)转化为片段
* 片段拥有关于像素的信息
* 光栅化可以对像素插值
* 通过在display函数中用glDrawArrays调用之前添加如下命令
* glPolygonMode(GL_FRONT_AND_BACKGL_LINE)//线性插值
* 如果使用GL_FILL,插值过程将会继续沿着光栅线填充内部
*/

/*
* 片段着色器
* 片段着色器用于为光栅化的像素指定颜色
* 顶点着色器中,顶点输出坐标使用了预定义变量gl_Position,
* 在片段着色器中,同样有一个让程序员可以访问输入片段坐标,叫gl_FragCoord
* 可以使用gl_FragCoord基于位置设置每个像素的颜色
*/

/*
* 像素操作:
* 隐藏面消除(HSR)
* OpenGL通过精巧地协调两个缓冲区完成隐藏面消除:颜色缓冲区和深度缓冲区(也叫Z缓冲、Z-buffer)
* 这两个缓冲区都和光栅大小相同,即对于屏幕上的每个像素,在两个缓冲区都各有一个对应条目
*/

/*
* 当绘制场景中的各种对象时,片段着色器会生成像素颜色
* 像素颜色会存放在颜色缓冲区中,颜色缓冲区最终会被写入屏幕
* 当多个对象占据颜色缓冲区中的相同像素时,
* 必须根据哪个对象最接近观察者来确定保留哪个像素颜色
*/

/*
* 隐藏面消除步骤(Z-buffer算法):
* 1、在每个场景渲染前,深度缓冲区全部初始化为表示最大深度的值
* 2、当像颜色由片段缓冲区输出时,计算它到观察者的距离
* 3、如果距离小于深度缓冲区存储的值(对当前像素),
* 那么用当前像素替换颜色缓冲区中的颜色
* 同时用当前距离替换深度缓冲区中的值,否则抛弃当前像素。
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Spray!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值