美文网首页
OpenGL初体验

OpenGL初体验

作者: 今年27 | 来源:发表于2020-04-08 11:01 被阅读0次

图形API简介

OpenGL (Open Graphics Library)是一个跨编程的语言,跨平台的编程图形程序接口,他将计算机的资源抽象称为一个个OpenGL对象,对这些资源的操作抽象为一个个OpenGL指令
OpenGL ES (OpenGL for Embedded Systems)是OpenGL三维图形API的子集,针对手机,PDA和游戏主机等嵌入式设备而设计,去除了许多不必要和性能较低的API接口
DirectX是由很多API组成的,DirectX并不是一个单纯的图形API,最重要的是DirectX是属于Windows上一个多媒体处理框架,并不支持Windows以外的平台。所以不是跨平台的框架,按照性质分类可以分为四大部分,显示部分,声音部分,输入部分和网络部分
Metal:Apple为游戏开发者推出的新的平台技术,能为3D图像提供10倍渲染性能(2014年推出)

OpenGL专业名词解析

OpenGL上下文context

在应用程序调用OpenGL指令之前,需要安排首先创建一个OpenGL的上下文,这个上下文是一个非常庞大的状态机,保存了OpenGL中的各种状态,也是OpenGL指令执行的基础

OpenGL状态机

状态机是一个对象在起生命周期内所经历的各种状态,状态间的转变 ,发生转变的动因,条件以及转变中锁执行的活动,或者说状态机是一种行为,说明对象再起生命周期中响应事件锁经理的状态序列以及那些状态事件的响应,有如下特点:
1.有记忆功能,能记住当前状态
2.可以接收输入,根据输入的内容和自己原先的状态,修改自己当前状态,并且可以有对应的输出
3.当进入特殊状态(停机状态)的时候,便不再接收输入,停止工作

渲染:

将图形、图像数据转换成3D空间图像的操作叫做渲染Rendering

顶点数据(VertexArray)和顶点缓冲区(VertexBuffer)

画图一般是先画好图像的骨架,然后再往骨架里面填充顔色,这对于 OpenGl也是一样的。顶点数据就是要画的图像的骨架,和现实中不同的 是,OpenGL中的图像都是甶图元组成。在OpenGlES中,有3种类型的图 元:点、线、三角形。那这些顶点数据最终是存储在哪里的昵?幵发者可 以选择设定函数指针,在调用绘制方法的时候,直接由内存传入顶点数 据,也就是说这部分数据之前是存储在内存当中的,被称为顶点数组。而 性能更高的做法是,提前分配一块显存,将顶点数据预先传入到显存当 中。这部分的显存,就被称为顶点缓冲区
顶点指的是我们在绘制一个图形时.它的顶点位置数据.而这个数据可以直接 存储在数组中或者将其缓存到GPU内存中

•管线:在OpenGL下渲染图形.就会有经历一个一个节点.而这样的操作可以理解管线.大家可以想象成流水线.每个任务类似流水线般执行.任务之间有先后顺序.管 线是一个抽象的概念,之所以称之为管线是因为显卡在处理数据的时候是按照一个固定的顺序来的,而且严格按照这个顺序。就像水从一根管子的一端流到另一端,这个顺序是不能打破的

•固定管线/存储着色器

• 在 早 期 的 OpenGL版本,它封装了很多种着色器程序块内置的一段包含了光照、坐标变换、裁剪等等诸多功能的固定shader程序来完成.来帮开发者来完图形的涫染.而开发者只需要传入相应的参数,就能快速完成图形的渲染.类似于iOS幵发会封装很多API.而我们只需要调用,就可以实现功能.不需要关注底层实现原理
• 但是由于OpenGL的使用场景非常丰富,固定管线或存储着色器无法完成每一个业务.这时将相关部分开放成可编程

着色器程序Shader

就全面的将固定澶染管线架构变为了可编程渲染管线。因此,OpenGL在实 际调用绘制函数之前,还需要指定_个由shaUM编译成的蓍色器程序。常见的着色器主要有顶点着色器(VertexShader),片段着色器 (FragmentShader) /像素着色器(PixelShader),几何着色器 (GeometryShader),曲面细分着色器(TessellatlonShader)。片段着色器和像素着色器只是在OpenGl和DK中的不同叫法而已。可愔的是,直到 OpenGLES3.0,依然只支持了顶点着色器和片段着色器这两个最基础的巷色 器。
OpenGL在处理shader时,和其他编译器一样。通过编译、链接等步骚,生成了着色器程序(glProgram),着色器程序同时包含了顶点着色器和片段着色器的运算逻辑。在OpenGL逬行绘制的时候,首先由顶点着色器对传入 的顶点数据逬行运算。再通过图元装配,将顶点转换为图元。然后进行光栅化,将图元这种矢量图形,转换为栅格化数据。最后,将栅格化数据传入片段着色器中逬行运算,并决定像素的颜色

OpenGL坐标系解析

世界坐标系

世界坐标系是系统的绝对坐标系,在没有建立用户坐标系之前画面上所有的点的坐标都可以在该坐标系的原点来确定各自的位置.世界坐标系始终是固定不变的

物体坐标系

每个物体都有他们独立的坐标系.当物理移动或者改变方向时.该物体 相关联的坐标系将随之移动或改变方向。
物体坐标系是以物体本身而巨,比如,我先向你发指令,“向前走一步”,是向您的 物体坐标体系指令。我并不知道你会往哪个绝对的方向移动。比如说,当你开车时,有人会说向左转,有人说向东。但是,向左转是物体坐标系的概念,而向东则是世界坐标系中的。
在某种情况下,我们可以理解物体坐标系为模型坐标系。因为模型顶点的坐标都 是在模型坐标系中描述的

摄像机坐标系

在坐标系的范畴里,摄像机坐标系和照相机坐标系都是 一样的意义。照相机坐标系是和观察者密切相关的坐标系。照相机坐标系和屏幕 坐标系相似,差别在于照相机坐标系处于3D空间中,而屏幕坐标系在2D坐标系里

惯性坐标系

指的是世界坐标系到物体坐标系的"半途惯性坐标系的原点和物体坐标原点重合,但惯性坐标系的轴平行于世界坐标系的轴.
为什么要引入惯性坐标系?因为物体坐标系转换到惯性坐标系只需要旋转,从惯性坐标系转换到世界坐标系只需要平移.

一个完整的OpenGL坐标系变换过程是这样的:


OpenGL坐标系变换过程

物体坐标系经过模型变换,视变换,投影变换,透视除法,视口变换最终转化成屏幕坐标

相关文章

网友评论

      本文标题:OpenGL初体验

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