OpenGL等图形库的目的是什么?

时间:2012-07-27 21:17:29

标签: opengl graphics direct3d

我意识到这可能是一个荒谬的问题,但在尝试找出哪些库用于哪些项目之前,我认为首先真正理解这些库的目的是有意义的。

很多视频游戏都使用像OpenGL这样的库。我在这些库中看到的所有教程都演示了如何编写告诉计算机绘制内容的代码。事实上,在游戏中,所有东西都是使用Zbrush,Maya或3ds Max等软件建模的。这些模型有纹理,很好用。看起来你需要做的就是编写一个动画循环来反复绘制模型和更新,而不是实际编写代码来绘制每一个小东西。这将非常耗时并且会使模型无用。那么OpenGL或Direct 3D在哪些方面与视频游戏和3D艺术相关?当所有图形都已创建并且只需要加载和绘制时,它们对于它们至关重要?它们主要用于着色器和效果吗?

这个问题可能只是证明我对此有多新,但这是我从未听过的问题。我刚刚开始学习编程,而且我对代码和逻辑的理解也相当不错,但我根本不了解图形库或某些框架,而且教程没有帮助。

5 个答案:

答案 0 :(得分:10)

  

似乎所有你需要做的就是编写一个动画循环来反复绘制模型和更新,而不是实际编写代码来绘制每一个小东西。

计算机中发生的一切都是这样的,因为某种形式的程序告诉它究竟该做什么。仅显示此消息的字母是因为您选择的Web浏览器通过HTTP协议通过TCP / IP下载此文件,解码其UTF-8编码的文本,解释由XML,HTML,JavaScript定义的文本等标准,然后根据Unicode标准为文本布局显示可见部分,并与HTML等人一致,使用操作系统或窗口管理器的显示和窗口功能或其他任何内容。

该操作的每个部分,从下载文件到显示,都由一段代码管理。您在屏幕上看到的每个像素都在它的位置,因为某些代码将它放在那里。

HTML 单独并不意味着什么。你不能只是拿一个HTML文件并将其爆炸到屏幕上。有些代码必须解释它。您可以将HTML解释为文本文件,但如果这样做,它将丢失所有格式,您将看到所有标记。 Web浏览器可以将其解释为正确的HTML,在这种情况下,您可以查看格式。但在每种情况下,HTML文件的含义都由如何使用决定。

您提出的算法的“绘制模型”部分必须由某人完成。如果您不编写该代码,则必须使用库或其他会导致模型出现的系统。那个图书馆做了什么?它是如何导致模型出现的?

模型(如HTML网页)本身无意义。换句话说,你的算法可以归结为:

  1. 为模型添加动画效果。
  2. ????
  3. 利润!
  4. 您缺少一个关键组件:如何实际解释模型并使其出现在屏幕上。 OpenGL / D3D /软件光栅化器/等对于该任务至关重要。

答案 1 :(得分:8)

  

很多视频游戏都使用像OpenGL这样的库。

首先:OpenGL本身不是库,而是API(规范)。 OpenGL API可以作为软件库的形式实现,但是现在更常见的是以驱动程序的形式实现OpenGL,将OpenGL函数调用转换为控制命令到位于图形卡(GPU)上的图形处理器。 / p>

  

我见过的这些库的所有教程都演示了如何编写告诉计算机绘制内容的代码。

是。这是因为需要绘制一些东西才能使用它们。

  

事实上,在游戏中,所有东西都是使用Zbrush,Maya或3ds Max等软件建模的。

此时,模型只包含大量数字,以及更多数字,告诉其他数字如何形成某种几何形状。这些数字不是某种随时可用的图像。

  

这些模型很有纹理,很适合。

它们是一堆数字,它们有一些控制纹理的附加数字。纹理本身又是数字。

  

似乎所有你需要做的就是编写一个动画循环来绘制模型

你觉得这幅画会怎么样?没有魔法“这里有模型,显示它”功能。因为对于构成模型的数字可能具有任何意义的方式。所以一些程序必须赋予这些数字意义。这是一个渲染器。

  

并反复更新,而不是实际编写代码来绘制每个小东西。

同样,没有神奇的“画它”功能。绘制模型涉及遍历每个数字,它包括,并将这些数字转换为绘图命令到GPU。

  

这将非常耗时并且会使模型无用。

当模型控制向OpenGL发出命令时,模型是如何无用的。或者您认为OpenGL用于实际“创建”模型吗?

  

那么OpenGL或Direct 3D在哪些方面与视频游戏和3D艺术相关?

它用于将数字转换为3D模型,因为它远离建模者,可以看到令人愉悦的东西。

  

当已经创建了所有图形时,它们至关重要

模型完成后,尚未创建图形。创建的是一个模型,以及纹理和着色器形式的一些辅助数据,然后在程序执行时实时转换为图形。

  

只需要加载和绘制?

再次,在加载后,模型只是一堆数字。绘图意味着将这些数字转换成要查看的内容,这需要将绘图命令发送到图形处理器(GPU),这需要使用像OpenGL或Direct3D这样的API

  

它们主要用于着色器和效果吗?

它们用于将3D建模程序(Blender,Maya,ZBrush)生成的数字转换为实际图片。

答案 2 :(得分:1)

在OpenGL和DirectX之前,游戏必须根据您拥有的显卡使用特殊说明。当您购买新游戏时,您必须仔细检查您的卡是否受支持,否则您无法使用该游戏。

OpenGL和DirectX是grapics卡的标准化API。图书馆由卡的制造商提供。如果他们遵循规范,则保证游戏能够正常运行(如果他们也遵循相同的规范)。

答案 3 :(得分:1)

你有数据。像模型一样,具有顶点,法线和纹理。正如@datenwolf所述,这些只是坐在硬盘或RAM中的数字,而不是屏幕上的颜色。

您的CPU(您编写的程序所在的位置)无法直接与屏幕对话。而是将要绘制的数据发送到GPU。然后GPU绘制数据。像OpenGL和Direct3D这样的图形API允许在CPU上运行的程序将数据发送到GPU并自定义GPU如何绘制它。这是一个严格的简化,但听起来你只需要一个概述。

最终,每个图形程序必须通过图形API。例如,当您绘制图像时,您向GPU发送图像,GPU将其绘制在屏幕上。画一些文字?将数据发送到GPU。 GPU绘制它。请记住,您的代码无法与屏幕对话。它可以通过OpenGL或Direct3D与GPU通信,然后GPU绘制数据。

答案 4 :(得分:-1)

开放图形库(OpenGL)是一种跨语言,跨平台的应用程序编程接口(API),用于呈现2D和3D矢量图形。该API通常用于与图形处理单元(GPU)进行交互,以实现硬件加速的渲染。