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); //单缓冲
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秘境之眼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值