openGL 介绍
1 OpenGl 是什么,其标准是谁制定,谁实现?
答:OpenGl 它是一个3D 图形库,khronos 定义 OpenGL 函数API,规定了每个API输入输出,各个显卡厂商负责实现这些API,因此openGl 其API 界面都是一样的,但具体函数的实现都不一样。
2 立即渲染模式和核心模式区别?
答:在3.2之前都是立即渲染模式,抽象掉很多细节,操作简单;在3.2 及之后,规范文档开始废弃立即渲染模式,鼓励开发者使用核心模式,它可以操作更多细节,效率更高,但使用起来要复杂很多。
3 openGl 状态机是什么,如何改变状态,其流程完是啥?
答:引用一些变量和函数,指示当前OpenGl 所处的状态,在当前状态可做什么,不可做什么,复杂一点的软件库一般都会引用状态机。
设置选项,操作缓冲,使用上下文来渲染。//都通过哪些函数?
1) 创建openGL对象,用id 值保存它的引用; //glGenObject(1, &objectId);
2) 绑定对象至上下文。glBindObject(GL_WINDOW_TARGET, objectId);
3) 设置选项,如宽高等等。glSetObjectOption(GL_WINDOW_TARGET, );
4) 将上下文对象设回默认值。glBindObject(GL_WINDOW_TARGET, 0);
4 openGL 用什么语言写的,是否支持多种语言派生?
答: openGL 内核是C语言实现, 为了兼容其他语言,引用了抽象层。//具体如何实现?
5 什么是GLFW?
答:它是一个针对openGl的c语言库,提供窗口显示功能,openGl 渲染好的buffer可通过GLFW来显示。
6 什么是GLAD?
答:显卡厂商提供都是lib形式,每个厂商都不一样,GLAD它使用一个在线服务,将定义版本对应所有opengl得函数下载下来。
7 什么是图形渲染管线,它有经历哪些流程?
答:一大堆原始数据途径一个管道期间经过各种变化处理最终显示到屏幕上。
它经历如下七个流程,其蓝色部分是我们可自定义着色器部分。
1)顶点数据:用三个3D坐标输入表示一个三角形,一系列这样的点叫做顶点数据。
2 )顶点着色器:把3D坐标转化为另一种3D坐标,并允许对顶点属性做一些基本处理。
3)图元装配:将所有顶点装配成图元形状。
4)几何着色器:把图元装配的形状生成新的图元。
5)光栅化阶段:将图元映射成最终屏幕显示的像素,并进行裁剪。
6)片段着色器:计算像素最终显示的颜色,光照,阴性,高量效果都是在这里进行计算,用户自定义最频繁的地方。
7)Alpha测试和Blending:决定像素要不要显示,多层图形叠加。
8 VBO, EBO, VAO作用与区别?
答:VBO它存放了大量顶点数据,避免一个个传送顶点数据,一次性将数据从CPU传到GPU。
VAO顶点数据对象,VBO将数据从CPU传到GPU,然后在使用的时候通过VAO将这些数据一个个取出来。
EBO:也是将数据从CPU送到GPU,但存放的数据是顶点表和顶点所对应index,到时候用查表法进行渲染。