内容简介:程序从 CPU 的内存复制数据到 OpenGL ES 的缓存。在 GPU 取得一个缓存的所有权以后,运行在 CPU 中的程序理想情况下将不 再接触这个缓存。通过控制独占的缓存,GPU 就能够尽可能以最有效的方式读写内存。 图形处理器把它处理大量数据的能力异步同时地应用到缓存上,这意味着在 GPU 使用 缓存中的数据工作的同时,运行在 CPU 中的程序可以继续执行。在一个简单的平面计算机屏幕上绘制点和线时,我们根据行和列指定位置。在OpenGL或几乎所有的3D PAI中创建一个用于绘制的窗口时,必须指定希望使
- 在游戏开发中,对于游戏场景/游戏⼈物的渲染
- 在⾳音视频开发中,对于视频解码后的数据渲染
- 在地图引擎,对于地图上的数据渲染
- 在动画中,实现动画的绘制
- 在视频处理理中,对于视频加上滤镜效果
OpenGL名词注解
- GPU :图形处理单元,图形卡上的可编程芯片,它是高度并行的,并且具有非常快的速度。能够结合几何、颜色、灯光和其他数据而产生一个屏幕图像的硬件组件。
- 渲染 :屏幕只有2维,因此显示3D数据的技巧就在于产生能够迷惑眼睛使其看到丢失的第3维的一个图像。 将数学和图形数据转换成3D空间图像的操作叫做渲染 。
- 像素 :在计算机上显示的图片是由矩形的颜色点组成的,这些矩形的颜色点叫做像素。单独的像素,如果通过放大镜仔细观察显示器,你会看到每个像素都是由3个颜色元素组成的,即一个红点、一个绿点和一个蓝点。
- 缓存 :
OpenGL ES
为两个内存区域间的数据交换定义了缓存(buffers
)的概念。缓存是指 图形处理器能够控制和管理的连续RAM。
程序从 CPU 的内存复制数据到 OpenGL ES 的缓存。在 GPU 取得一个缓存的所有权以后,运行在 CPU 中的程序理想情况下将不 再接触这个缓存。通过控制独占的缓存,GPU 就能够尽可能以最有效的方式读写内存。 图形处理器把它处理大量数据的能力异步同时地应用到缓存上,这意味着在 GPU 使用 缓存中的数据工作的同时,运行在 CPU 中的程序可以继续执行。
- OpenGL上下文(context) :用于配置OpenGL的保存在特定平台的软件数据结构中的信息会被封装到一个OpenGL上下文(context)中。OpenGL是一个状态机器,这意味着在一个程序中设置了一个配置值后,这个值会一直保持,直到程序修改了这个值。切换上下文往往会产生较大的开销,但是不同的绘制模块,可能需要使用完全独立的状态管理。因此,可以在应用程序中分别创建多个不同的上下⽂,在不同线程中使用不同的上下文,上下文之间共享纹理、缓冲区等资源。这样的方案,会⽐反复切换上下文,或者大量修改渲染状态,更加合理高效的。
- OpenGL状态机
- OpenGL可以记录自己的状态(比如:当前所使用的颜色、是否开启了混合功能,等等,这些都是要记录的)
- OpenGL可以接收输入(当我们调用OpenGL函数的时候,实际上可以看成OpenGL在接收我们的输入),根据输入的内容和自己的状态,修改自己的状态,并且可以得到输出(比如我们调用glColor3f,则OpenGL接收到这个输入后会修改自己的“当前颜色”这个状态;我们调用glRectf,则OpenGL会输出一个矩形)
- OpenGL可以进入停止状态,不再接收输入。这个可能在我们的程序中表现得不太明显,不过在程序退出前,OpenGL总会先停止工作的。
- 顶点(空间中的一个位置) :在2D和3D中,当我们绘制一个物体时,实际上是用一些更小的称为图元(Primitives)的形状来组成这个物体。图元是一维或者二维的实体或表面,如点、直线和多边形(平面多边的形状)。在3D空间中,我们把图元组合在一起创建3D物体。例如一个三维立方体是由6个正方形组成,每个正方形代表一个独立的面。正方形(其他任何图元)的每个角称为顶点(Vertex)。这些顶点就在3D空间中指定了一个特定的坐标。顶点其实就是2D或3D空间中的一个坐标。
- 顶点数组 :一个顶点(vertex)就是一个坐标空间的点。顶点数组就是存储这一个图形的所有顶点数据的一段缓存。
- 管线 :
- OpenGL的模型就好比一条生产线或者管线。数据流在这个模型中通常是单一路经的,数据通过我们的程式调用的命令进入管线的开端,然后流过一个一个阶段直到管线的末端。
- OpenGL通过连接多个叫做着色器的小程序并佐以固定功能函数作为"胶水"来工作。当我们绘图时,图形处理器执行我们的着色器并将它们的输入输出在管线中串联起来,直到像素完成于管线末端。
- GLSL(OpenGL Shadding Language) :OpenGL着色器使用一种叫做OpenGL着色语言(OpenGL Shading Language)的语言进行编写,或者叫做GLSL。这个语言的编译器内置在OpenGl中。
- 光栅化Rasterization :实际绘制或填充每个顶点之间的像素形成线段就叫做光栅化。
- 纹理 :一个用来保存图像的颜色元素值的 OpenGL ES 缓存。
OpenGL坐标系解析
在一个简单的平面计算机屏幕上绘制点和线时,我们根据行和列指定位置。
在OpenGL或几乎所有的3D PAI中创建一个用于绘制的窗口时,必须指定希望使用的坐标系统以及指定的坐标如何映射到实际的屏幕像素。
2D笛卡尔坐标系
在二维绘图中,最常用的是笛卡尔坐标系统。笛卡尔坐标由一个x坐标和y坐标构成。x坐标测量水平方向的位置,y坐标测量垂直方向的位置。x轴和y轴垂直相交定义了一个平面。
3D笛卡尔坐标系
2D笛卡尔坐标新增一个表示深度分量的z轴就是3D笛卡尔坐标。
视口
视口就是窗口内部用于绘制裁剪区域的客户区域。视口简单的把裁剪区域映射到窗口中的一个区域。通常,视口被定义为整个窗口,但这并非严格必须的。
有时我们只想在窗口的一部分部分进行绘图。我们可以使用视口来缩小和放大窗口中的图像,也可以通过把视口设置大于窗口的用户区域,从而只显示裁剪区域的一部分。
投影方式
首先需要理解 投影 :把3D几何图形的坐标数据投影在一个2D的平面。就像用笔在玻璃上描摹出玻璃后面的物体的外形。而平面上的投影就是 视景体 。通过指定投影,我们可以指定在窗口中显示的视景体。
正投影
正投影又叫平行投影。使用这种投影时,需要指定一个正方形或长方形的视景体。视景体之外的任何物体都不会被绘制。而且,所有实际大小相同的物体在屏幕上都具有相同的大小,不管它们是远是近。
我们还可以在正投影中通过指定远、近、左、右、顶和底裁剪平面来指定视景体。在这个视景体中出现的物体和图形将被投影( 考虑它们的方向)到一个在屏幕上出现的2D图像。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Perl高效编程
霍尔 / 胜春、王晖、张东亮、蒋永清 / 人民邮电出版社 / 2011-5 / 65.00元
《Perl高效编程(第2版)》,本书是Perl编程领域的“圣经级”著作。它提供了一百多个详实的应用案例,足以涵盖编程过程中经常遇到的方方面面,由此详细阐释出各种高效且简洁的写法。一起来看看 《Perl高效编程》 这本书的介绍吧!