Q: OpenGL是什么?它是干什么用的?大概是一个怎样的工作方式?对于代码层面来说怎么理解?
1、OpenGL是什么?它是干什么用的?
对于程序员成说的OpenGL,是操作图形硬件的一种软件接口。对于2D、3D、动画、游戏等等图形界面,计算机主要是通过CPU的计算,然后GPU的绘制渲染呈现在屏幕上的,可是程序员不能够直接操作计算机硬件来做这些事情,所以就要通过软件来操作,那么OpenGL就是这样的软件。
OpenGL本身就是一个状态机,具体怎么理解(不明白,百度)。
2、OpenGL大概是一个怎样的工作方式\工作原理?
OpenGL被当作客户端-服务器系统来实现的,应用程序是客户端,图形硬件厂商提供的OpenGL实现是服务器。如图所示,客户端程序需要调用OpenGL的接口实现3D渲染,那么OpenGL命令和数据会缓存在RAM中,在一定条件下,会将这些命令和数据通过CPU时钟发送到VRAM,在GPU的控制下,使用VRAM中的数据和命令,完成图形的渲染,并将结果存入帧缓冲区中,帧缓冲区中的帧最终会被发送到显示器上,显示出结果。在现代的图形硬件系统中,还支持不通过CPU时钟直接将数据由RAM发送至VRAM或直接将数据由帧缓冲区发送至RAM(例如OpenGL中的VBO,PBO)。
3、对于代码层面来说怎么理解?
对于初体验的代码来说,主要有三个,main(),setupRC(),renderScene()。
main函数不用说,一切程序的入口基本都是main,定义了一些程序启动时需要配置的信息。
setupRC 按照OC的理解算是Onject的init函数,定义了一些初始化的参数。
renderScene 召唤场景,也就是渲染,当初始化数据全部完毕之后,就要把数字模型数据转换为图形数据。
setupRC相当于CPU,进行数据的计算等等,renderScene相当于GPU,进行渲染绘制。
OpenGL从代码到最终窗口的流程
1、通过矩阵定义顶点数据(setupRC函数里面的矩阵顶点初始化)—>通过着色器绘制渲染静态物体(shaderManger.useStockShader绘制模型)—>通过矩阵变换达到模型视图变换(m3dRotationMatrix44等使模型旋转)—>通过视口(viewport)得到视景体—>通过投影得到投影矩阵(GLFrustum。即通过投影得到)—>裁剪处理、透视除法处理、视点变换(没弄明白呢)—>得到window窗口
重点
这里有两个重点方法:
glClearColor():意思是设置屏幕背景颜色。
glClear():清除缓冲区数据。
怎么理解?
OpenGL对于图形的展示还是动画也好,可以比喻理解为,书角动画(动画帧),每一页的平面图形算是一帧,当要下一页图画时,上一页的肯定消失了(撕掉了还是覆盖了都可以),OpenGL也是如此,当要显示下一帧图画时,当前帧图画需要被Clear掉,也就是glClear(),背景颜色即是glClearColor()。
分割线,初体验OpenGL 函数类的理解
Batch:批次,可以理解为模型
GLBatch:OpenGL模型,绘制各种图形都需要用到
GLTriangleBatch:三角形批次类,重构的三角形模型
GLBatchBase:批次类基类(模型基类)
GLMatrixStack:矩阵堆栈,用于管理矩阵
GLShaderManager:着色器
GLFrame:就是坐标,主要是观察者(照相机)坐标和物体坐标
GLFrustum:视景体,(投影矩阵通过它来设置(正投影、透视投影))
GLGeometryTransform:几何变换管道,用于管理堆栈 GLMatrixStack
参考:
OpenGL原理http://www.twinklingstar.cn/2015/1532/introduce-to-opengl/
http://anony3721.blog.163.com/blog/static/51197420113206471827/
以下图片用于帮助理解
对于OpenGL逻辑来说,视口就是Windows窗口