21

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

许多视频游戏使用 OpenGL 之类的库。我见过的所有关于此类库的教程都演示了如何编写代码来告诉计算机绘制一些东西。问题是,如今在游戏中,一切都是使用 Zbrush、Maya 或 3ds Max 等软件建模的。这些模型有纹理,很容易上手。似乎您需要做的就是编写一个动画循环来重复绘制模型和更新,而不是实际编写代码来绘制每一件小事。这将非常耗时,并且会使模型无用。那么 OpenGL 或 Direct 3D 与视频游戏和 3d 艺术有什么关系呢?当所有图形都已经创建并且只需要加载和绘制时,它们有什么如此重要?它们主要用于着色器和效果吗?

这个问题可能只是证明我对此有多么陌生,但这是我从未听说过的问题。我刚刚开始学习编程,我对代码和逻辑的理解还不错,但是我根本不了解图形库或某些框架,教程也无济于事。

4

5 回答 5

11

似乎您需要做的就是编写一个动画循环来重复绘制模型和更新,而不是实际编写代码来绘制每一件小事。

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

该操作的每个部分,从文件下载到显示,都由一段代码控制。你在屏幕上看到的每个像素都在它所在的位置,因为有些代码把它放在那里。

单独的HTML没有任何意义。您不能只获取一个 HTML 文件并将其发送到屏幕上。一些代码必须解释它。您可以将 HTML 解释为文本文件,但如果这样做,它会丢失所有格式,并且您可以看到所有标签。Web 浏览器可以将其解释为正确的 HTML,在这种情况下您可以看到格式。但在任何情况下,HTML 文件的含义都取决于它的使用方式

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

一个模型,就像一个 HTML 网页,本身是没有意义的。或者换句话说,您的算法可以归结为:

  1. 动画模型。
  2. ???
  3. 利润!

您缺少一个关键组件:如何实际解释模型并使其出现在屏幕上。OpenGL/D3D/软件光栅化器/等对于该任务至关重要。

于 2012-07-27T21:30:44.537 回答
9

许多视频游戏使用 OpenGL 之类的库。

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

我见过的所有关于此类库的教程都演示了如何编写代码来告诉计算机绘制一些东西。

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

问题是,如今在游戏中,一切都是使用 Zbrush、Maya 或 3ds Max 等软件建模的。

在这一点上,模型只包含一大串数字,以及更多的数字,说明其他数字如何形成某种几何形状。这些数字不是某种即用型图像。

这些模型有纹理,很容易上手。

它们是一堆数字,它们有一些额外的数字来控制纹理。纹理本身又只是数字。

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

你认为这幅画会如何发生?没有神奇的“这里有一个模型,展示它”功能。因为组成模型的数字可能具有任何意义。所以一些程序必须赋予这些数字意义。那是一个渲染器。

并反复更新,而不是实际编写代码来绘制每一件小事。

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

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

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

那么 OpenGL 或 Direct 3D 与视频游戏和 3d 艺术有什么关系呢?

它用于将 3D 模型的数字(因为它从建模者那里保存下来)变成令人愉悦的东西。

当所有图形都已经创建时,它们的关键是什么

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

只需要加载和绘制?

同样,加载后,模型只是一堆数字。绘图意味着,将这些数字变成可以查看的东西,这需要将绘图命令发送到图形处理器 (GPU),这需要使用 OpenGL 或 Direct3D 等 API

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

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

于 2012-07-27T23:02:22.177 回答
3

你有数据。像模型一样,具有顶点、法线和纹理。正如上面@datenwolf 所说,这些只是位于硬盘驱动器或 RAM 中的数字,而不是屏幕上的颜色。

您的 CPU(这是您编写的程序运行的地方)无法直接与屏幕对话。相反,您将要绘制的数据发送到 GPU。GPU 然后绘制数据。OpenGL 和 Direct3D 等图形 API 允许在 CPU 上运行的程序将数据发送到 GPU 并自定义 GPU 绘制数据的方式。这是一个粗略的简化,但听起来您只需要一个概述。

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

于 2012-08-05T04:09:56.523 回答
2

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

OpenGL 和 DirectX 是图形卡的标准化 API。库由卡的制造商提供。如果它们遵循规范,则可以保证游戏可以正常运行(如果它们也遵循相同的规范)。

于 2012-07-27T23:11:54.623 回答
-2

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

于 2019-12-12T06:02:19.073 回答