OPENGL中的帧缓存区概述
demi 在 周一, 04/20/2020 - 10:55 提交
OPENGL系统的帧缓冲区是由所有存储着像素信息的缓冲区组成的,包括:颜色缓冲区、深度缓冲区、模板缓冲区、累积缓冲区。可以使用glGetIntegerv()查询特定画面可用的缓冲区的存储信息。
OPENGL系统的帧缓冲区是由所有存储着像素信息的缓冲区组成的,包括:颜色缓冲区、深度缓冲区、模板缓冲区、累积缓冲区。可以使用glGetIntegerv()查询特定画面可用的缓冲区的存储信息。
1、各顶点会通过模型矩阵和投影矩阵来转换。 2、法线会通过从模型矩阵获得的左上角的3x3矩阵的逆变换来转换。 3、纹理坐标会通过纹理矩阵来转换。 4、光照算法会得到应用以修改基色。 5、可能会自动生成纹理坐标、应用颜色材质状态以及计算点的大小。 这个阶段最主要的操作是转换与光照。
笔者希望通过多年的图形开发经验,结合对OpenGL的理解,对OpenGL整体的知识做一个梳理,剔除掉特别复杂又较少使用的部分。遗留下来常见和易于理解的部分,同时也尽量在介绍的时候兼顾易懂性和严谨性。希望对即将或正在学习OpenGL的开发者,提供一定的帮助。
深度缓冲区与帧缓冲区相对应,用于记录上面每个像素的深度值,通过深度缓冲区,我们可以进行深度测试,从而确定像素的遮挡关系,保证渲染正确。
做OpenGL开发的同学,想必一定碰到过黑屏的问题,特别是刚接触OpenGL的同学,可能会觉得黑屏问题让人相当头疼,因为OpenGL的查错没有一般编程时那么简单,我们通常是利用glGetError()这个API来获取错误码,但这个方法获取的错误是调用这个方法时,已经产生的错误,它有可能是很久之前产生的,这样查越来还是比较不方便的,而且,有些黑屏的情况下,glGetError()也不会报任何错。
光源不动:需要在设置完视图模型变换之后。然后再设置光源的位置并且开启。光源和观察点一起移动:在进行视图变换之前设置光源位置,接着进行视图变换,就会以相同的方式同时影响光源和观察点。
视图变换:将相机移动到准备拍摄的位置,将它对准某个方向。 模型变换:将准备拍摄的对象移动到场景中的指定位置。光源保持静止:在使用完视图和模型变换之前设置光源的位置,init()后面,display()之前。光源出现在视图变换之前,后面进行的变换与光源没有关系,相对于视点固定。
在可编程管线中,我们能够编码的就是Vertex Shader(顶点着色器) 和 Fragment Shader(片元着色器),这也是渲染过程中,必备的2个着色器。
OpenGL是一份API规范,并不是一个库。记住这点非常重要!它意味着每一个API背后的具体实现都依赖于你的GPU硬件、操作系统以及显卡驱动。
几何顶点被组合为图元(点,线段或多边形),然后图元被合成片元,最后片元被转换为帧缓存中的象素数据。图元被分几步转换为片元:图元被适当的裁剪,颜色和纹理数据也相应作出必要的调整,相关的坐标被转换为窗口坐标。最后,光栅化将裁剪好的图元转换为片元。