美文网首页Android OpenGL
OpenGL初体验--初始化概念

OpenGL初体验--初始化概念

作者: 不会游泳De鱼 | 来源:发表于2018-03-05 13:00 被阅读25次

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)。

image.png

3、对于代码层面来说怎么理解?

image.png

对于初体验的代码来说,主要有三个,main(),setupRC(),renderScene()。

main函数不用说,一切程序的入口基本都是main,定义了一些程序启动时需要配置的信息。

setupRC 按照OC的理解算是Onject的init函数,定义了一些初始化的参数。

renderScene 召唤场景,也就是渲染,当初始化数据全部完毕之后,就要把数字模型数据转换为图形数据。

setupRC相当于CPU,进行数据的计算等等,renderScene相当于GPU,进行渲染绘制。

OpenGL从代码到最终窗口的流程

1、通过矩阵定义顶点数据(setupRC函数里面的矩阵顶点初始化)—>通过着色器绘制渲染静态物体(shaderManger.useStockShader绘制模型)—>通过矩阵变换达到模型视图变换(m3dRotationMatrix44等使模型旋转)—>通过视口(viewport)得到视景体—>通过投影得到投影矩阵(GLFrustum。即通过投影得到)—>裁剪处理、透视除法处理、视点变换(没弄明白呢)—>得到window窗口

image.png

重点

这里有两个重点方法:
glClearColor():意思是设置屏幕背景颜色。
glClear():清除缓冲区数据。

怎么理解?
OpenGL对于图形的展示还是动画也好,可以比喻理解为,书角动画(动画帧),每一页的平面图形算是一帧,当要下一页图画时,上一页的肯定消失了(撕掉了还是覆盖了都可以),OpenGL也是如此,当要显示下一帧图画时,当前帧图画需要被Clear掉,也就是glClear(),背景颜色即是glClearColor()。


image.png

分割线,初体验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/

以下图片用于帮助理解

image.png image.png image.png image.png image.png

对于OpenGL逻辑来说,视口就是Windows窗口

相关文章

网友评论

    本文标题:OpenGL初体验--初始化概念

    本文链接:https://www.haomeiwen.com/subject/qwfhfftx.html