OpenGL纹理贴图相关基本概念
纹理贴图之所以复杂是因为矩形的纹理数据需要被合理地映射到非矩形的区域上面,纹理就是数据的数组,例如颜色数据亮度数据alpha数据等,纹理的单个数据值 被叫做纹理元素 英文叫做texual,初学者会本能地把纹理当成二维图像,但是纹理也可以是一维和三维的数据。
纹理贴图之所以复杂是因为矩形的纹理数据需要被合理地映射到非矩形的区域上面,纹理就是数据的数组,例如颜色数据亮度数据alpha数据等,纹理的单个数据值 被叫做纹理元素 英文叫做texual,初学者会本能地把纹理当成二维图像,但是纹理也可以是一维和三维的数据。
OpenGL是一个跨语言、跨平台的编程图形程序接口,它将计算机的资源抽象为一个个的OpenGL的对象,对这些资源的操作抽象为一个个OpenGL的指令。它的移植性高,并且速度非常快。
学习OpenGL首先,先要弄明白的三个名词就是VAO,VBO和IBO。我们学习一个东西的时候,往往被过多,过详细的数据,淹没真正核心的那几句话,这可能也是不同人学习能力不一样的原因把,我应该属于学习能力比较弱的那种,总是要一边叮嘱自己,关键那几句话在哪?一边看东西,才能勉强找到关键那几句话。
OpenGL (Open Graphics Library)是一个跨编程语言、跨平台的编程图形程序接口,它将计算机的资源抽象称为一个个OpenGL的对象,对这些资源的操作抽象为一个个的OpenGL指令。
OPENGL系统的帧缓冲区是由所有存储着像素信息的缓冲区组成的,包括:颜色缓冲区、深度缓冲区、模板缓冲区、累积缓冲区。可以使用glGetIntegerv()查询特定画面可用的缓冲区的存储信息。
1、各顶点会通过模型矩阵和投影矩阵来转换。 2、法线会通过从模型矩阵获得的左上角的3x3矩阵的逆变换来转换。 3、纹理坐标会通过纹理矩阵来转换。 4、光照算法会得到应用以修改基色。 5、可能会自动生成纹理坐标、应用颜色材质状态以及计算点的大小。 这个阶段最主要的操作是转换与光照。
笔者希望通过多年的图形开发经验,结合对OpenGL的理解,对OpenGL整体的知识做一个梳理,剔除掉特别复杂又较少使用的部分。遗留下来常见和易于理解的部分,同时也尽量在介绍的时候兼顾易懂性和严谨性。希望对即将或正在学习OpenGL的开发者,提供一定的帮助。
深度缓冲区与帧缓冲区相对应,用于记录上面每个像素的深度值,通过深度缓冲区,我们可以进行深度测试,从而确定像素的遮挡关系,保证渲染正确。
做OpenGL开发的同学,想必一定碰到过黑屏的问题,特别是刚接触OpenGL的同学,可能会觉得黑屏问题让人相当头疼,因为OpenGL的查错没有一般编程时那么简单,我们通常是利用glGetError()这个API来获取错误码,但这个方法获取的错误是调用这个方法时,已经产生的错误,它有可能是很久之前产生的,这样查越来还是比较不方便的,而且,有些黑屏的情况下,glGetError()也不会报任何错。
光源不动:需要在设置完视图模型变换之后。然后再设置光源的位置并且开启。光源和观察点一起移动:在进行视图变换之前设置光源位置,接着进行视图变换,就会以相同的方式同时影响光源和观察点。