• OpenGL之帧缓冲与片元运算


    1.1 Vertex operations 的处理对象是顶点,而Fragment operations 的处理对象是片元。

    1.2 数据的流转为:顶点数据→光栅化→片元数据;

    • 光栅化:以三角面片为处理单元,输入的是三个顶点的数据,输出是三角形所覆盖的所有像素的数据。线段的则是一线段为单位来进行插值的;
      • 光栅化可以对顶点数据、颜色、法向量、三维坐标、纹理坐标等进行处理。
      • 处理方式:双线性插值、常数明暗处理;
    • 在光栅化之前,有一个图元装配阶段,该阶段会把多并行剖分为三角形,或者把两个顶点组合为一条线段,即会把顶点数据组合成一个个primitive,作为光栅化的输入数据,光栅化以primitive为处理单位。

    1.3 光栅化模块没有直接的接口函数,无法对光栅化进行Shader编程。

    • glShaderMode(GL_FLAT/GL_SMOOTH);
    • glPolyonMode(GLenum face,GLEnum mode):可以指定多边形绘制的模型,是采用线框、面、顶点的方式来绘制多边形,影响图元装配阶段。

    1.4 帧缓冲区(Frame buffer)

    • 缓冲区的每个单元对应一个屏幕像素;
    • 对片元的处理就是利用并修改缓冲区的数据;
      在这里插入图片描述
    • 像素的颜色都存储在一块缓冲区中,需要不断重复绘制,即不断刷新屏幕。
    • 帧缓冲区存储视口中每个像素的信息,与视口像素一一对应;

    1.5 刷新率(Refresh Rate)

    • 存储视口中每个像素的信息;
    • 常用单位:FPS,Frame per second;
      在这里插入图片描述

    1.6 帧缓冲区的类型,存储在显存上面;

    • 颜色缓冲区(Color buffer)
    • 深度缓冲区(Depth buffer)
    • 模板缓冲区(Stencil buffer)
    • 累积缓冲区(Accumulation buffer)
    • 用户自定义缓冲区

    1.7 在画图之前需要清除缓存;

    glClearColor(0.0,0.0,0.0,0.0);	//定义清除的颜色
    glClear(GL_COLOR_BUFFER_BIT);   //清除
    glClearDepth(1.0);				//采用1.0来清深度缓冲区
    glClear(GL_DEPTH_BUFFER_BIT);   //清除
    
    //常用写法
    glClearColor(0.0,0.0,0.0,0.0);	//定义清除的颜色
    glClearDepth(1.0);				//采用1.0来清深度缓冲区
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);   //清除,同时清除,效率较高
    

    1.8 单缓冲与双缓冲

    • 单缓冲区,绘制后立即显示到屏幕上,称为Front Buffer;
    • 双缓冲区,设置了一个Back buffer,总是绘制到Back Buffer,绘制完后,立即拷贝到Front Buffer,然后显示;可以避免因绘制速度慢导致的屏幕闪烁;
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); //双缓冲
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); //单缓冲
    
  • 相关阅读:
    【计算广告学习笔记】1. 广告的计价方式和常用缩写
    Maven 笔记
    [附源码]Python计算机毕业设计Django面包连锁店管理系统
    循环神经网络 - 序列模型
    C/C++统计满足条件的4位数个数 2023年5月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
    算法通关村第十六关青铜挑战——原来滑动窗口如此简单!
    危险化工品出口注意事项及法规要求_箱讯科技
    C语言对10个数进行排序,使用快速排序算法
    Git出现“Filename too long”
    文件包含漏洞原理刨析
  • 原文地址:https://blog.csdn.net/TxyITxs/article/details/127096901