OpenGL介绍

作者: 吃掉夏天的怪物 | 来源:发表于2021-05-05 15:50 被阅读0次

    OpenGL 是一种规范,具体内容由显卡厂商实现

    OpenGL 是一个图形API,所以它允许我们做一些关于图像方面的事情。特别地,OpenGL实际上允许我们访问我们的GPU(显卡),显卡可以更有力地绘制图形。
    实际上为了在电脑和设备(像手机)上使用显卡,我们实际上需要一些API来操纵显卡。OpenGL是这类API中的一种,我们也有其它这方面的API像是Direct3D(Window 专用)、Vulkan(最新一代的OpenGL,语法方面和OpenGL差异较大)、Metal(苹果专用)和一些其它的。

    OpenGL允许我们一定程度上操控我们的显卡。OpenGL的核心本身是一种规范,类似于C++规范。实际上它并没有确定任何的代码或类似的事情。它本身是一种规范,类似说“Hey,这个函数应该存在,他需要这些参数,并且需要返回这个值”。他只是个告诉你可以利用这些API做什么的规范,而不提供任何实现。这意味着它肯定不是一个库,因为OpenGL本身是没有任何代码的。

    那么问题来了:“我们上哪下载OpenGL呢?”

    实际上不需要下载它,它本身是一个规范。

    那谁去实现它呢,谁去为那些你会使用的OpenGL函数写代码呢?答案是你的显卡生产商。

    所以如果你用的是NVDIA显卡,那么你的显卡驱动程序就会包含OpenGL的实现。并且所有的显卡厂商,像是AMD,Intel等,他们会有他们自己的实现。每个厂商对OpenGL的实现都会有轻微的不同。这就是为什么在很多情况下,有些代码基于NVIDIA显卡的驱动程序上能工作,但是在AMD电视或者其他显卡上显得有一些 不同,甚至产生Bug。关键是在于你的显卡厂商是如何编写OpenGL实现的。

    “OpenGL 是开源的?" 不是

    不是。因为首先,它是显卡厂商实现的,它们显然不会将显卡驱动的源码开源。

    OpenGL优点跨平台,简单

    "OpenGL"是跨平台的,写一份OpenGL代码就可以在Windows,Mac,Linux,IOS,安卓系统上运行。说那种API最强没有必要,因为平台原生的东西往往要更好一些。这也就是说OpenGL更像是个确切的规范,他很普通。如果你把它和低层次的,像DirectX12或Vulkan比较的话。OpenGL可能是你现在能学到的最简单的那个API了。

    比不上DirectX11

    老的OpenGL和现代OpenGL

    OpenGL在90年代发布,那时的GPU并不是灵活的并且可编程的,你不能随心所欲地去操控它,尤其是使用较底层的API。但是现在,人们可以很大程度上控制它。显卡厂商给了程序员和开发者更多的控制权。

    老的OpenGL更像是一个流水线,所以从另一个方面来说,你说我要画一个三角形,并且我要加入光源,那么你要怎么加入这个光源呢。你可以告诉OpenGL类似"Lighting = True"的代码,这样可以启用光照。然后你告诉OpenGL你想在这里启用光照,像这样的就叫流水线式的操作。

    这种老OpenGL很容易被使用,代码也很少。但不幸的是你也没什么控制权。我们想要更多的控制权,我们想要实现更多令人惊叹的图形。

    老OpenGL和现代OpenGL的最大区别在于"着色器“。着色器是一段运行在GPU上的程序。所以我们用C++或JAVA或C#其他什么编程语言写的程序都是运行在CPU上的。但当我们针对图形处理的时候,我们想要精准控制GPU,所以可能要将一些代码从CPU放到GPU上。因为它们可以在GPU上运行地更快。这就是着色器存在的意义。着色器只是允许我们在GPU上写程序。

    因为你想要计算出复杂的光照算法,你一定会想在GPU上计算而不是像过去一样在CPU上解决。

    所以老OpenGL和现代OpenGL最重要的区别在于是否有可编程着色器。

    相关文章

      网友评论

        本文标题:OpenGL介绍

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