opengl是什么(三分钟理解OpenGL)

opengl是什么
大家好,三分钟理解XXX系列又迎来了新的一期。今天带大家了解一下图形编程方面家喻户晓的一个大家伙,OpenGL。说到图形编程,很多人可能不知道是干什么的。这么说吧,你在电脑上、手机上玩的游戏,看到的一些GC特效,都是通过图形编程实现的。往大了说,无论是Windows、iOS还是Android,你们能看到的界面本身就是图形编程的杰作。

图形编程面临的一个最基本的问题就是,如何用程序在显示器上绘制东西,比如一个按钮,一张美女图片,一个正在放大招的英雄。简单来说,有两种方式。一种是CPU在内存里准备好了要绘制的东西,然后交给显示器去显示。另一种是显卡在显存里准备好了要绘制的东西,交给显示器区显示。前者叫软件绘制,CPU本身并不擅长做图形相关的运算,效率也就高不到哪里去。后者叫硬件加速,显卡天生就是用来干这个的,所以效率很高。这也就是为什么我们常说大型游戏吃显卡,通常只需要一个入门级的CPU就好了,因为在游戏运行的时候,CPU其实是个配角。
那么问题来了,如何才能充分调动显卡的强大能力,帮我们绘制图形呢?OpenGL就是为此而生的。OpenGL是一组API,这些API可以运行在不同的平台上,可以支持各种语言,并且最重要的是,它能利用显卡的硬件加速能力,帮我们绘制图形。简单解释一下,大家还记得API是什么意思吗?想不起来的可以看下这篇《3个软件开发中不好理解的名词》。API就是能力,OpenGL有700多个API,每个API代表一种能力,比如有一个API叫glClearColor,可以把屏幕涂成你想要的颜色。
OpenGL得以流行,还有一个很重要的原因是跨平台。无论你用C++写,在PC上跑,还是用Object-C写,在iOS上跑,都能用OpenGL。大家还记得我们讲JAVA是如何实现跨平台的吗?它下面有一个虚拟机,不同的平台都做了兼容,然后给上层调用的,都是一样的API。OpenGL也是这样做的。你用OpenGL做图形编程,根本不用关心你是在什么平台上,因为已经有人帮你把这些脏活累活都做了,适配好了。
你可千万不要误会,以为OpenGL就只是几百个API。实际上它有自己的一套规则。在任何一本介绍OpenGL的书上,你都会看到这样一句话:OpenGL是一个状态机。什么意思呢?状态机就是很多状态在不停的切换。你看OpenGL的几百个API里,有不少是用来设置状态的。每次设置一个状态,都是一次状态切换,直到最终绘制完成。比如你设置画笔的颜色是红色,那么之后绘制的所有图形都是红色的,直到你设置成绿色,后面才会绘制绿色的东西。
我们举个地图导航的例子。当你选定了目的地之后,导航路线就生成了。你可以把整条路线里的每一条小路当做一个状态,每进入一条小路就切换一次状态。这样经过一个又一个的状态切换,最后会到达目的地。对于OpenGL来说,绘制任务就完成了。
OpenGL的绘制流程,大约要经过几个步骤。首先要把要画的东西,拆成像三角形这样的基本图形。然后在三维空间坐标系里,给它安排一个合适的位置。之后,把灯光加上去,使要画的东西有一种立体感。最后,把这些东西转化成屏幕上的像素点,俗称光栅化,整个绘制算是完成了。

OpenGL这两年比较火,主要还是因为iOS和Android都靠它来做游戏,写界面。严格来说,在移动平台上,大家用的是OpenGL-ES,是OpenGL的一个子集。OpenGL有700多个API,OpenGL-ES裁掉了不常用的,移动端不好用的一些API。但麻雀虽小,五脏俱全,OpenGL-ES也可以充分发挥显卡的硬件加速能力,让你的手机界面操作如丝般顺滑。
这算是对OpenGL一个简单的入门介绍吧,如果你感兴趣的话,后台留言我们再介绍一些深入的东西。你还有什么想了解但是又不大好了解的,也可以留言告诉我,我争取让你三分钟能想明白。

opengl是什么相关文章

赞 (0)