cpu和gpu如何交互以呈现计算机图形?

斯肯内尔摄。...

cpu和gpu如何交互以呈现计算机图形?Your computer’s Central Processing Unit (CPU) and Graphics Processing Unit (GPU) interact every moment you’re using your computer to deliver you a crisp and resp***ive visual interface. Read on to better understand how they work together.

斯肯内尔摄。

今天的问答环节是由SuperUser提供的,SuperUser是Stack Exchange的一个分支,它是一个由Q&a网站组成的社区驱动分组。

问题

超级用户读者Sathya提出了一个问题:

在这里你可以看到一个小的C++程序的截图三角形.exe基于openglapi的旋转三角形。

cpu和gpu如何交互以呈现计算机图形?

诚然,这是一个非常基本的例子,但我认为它适用于其他图形卡操作。

我只是好奇,想知道双击的整个过程三角形.exe在windowsxp下,直到我能看到显示器上旋转的三角形。发生了什么,CPU(首先处理.exe)和GPU(最后输出屏幕上的三角形)是如何交互的?

我想显示这个旋转三角形主要涉及以下硬件/软件:

硬件

  • 硬盘驱动器
  • 系统内存(RAM)
  • 中央处理器
  • 视频存储器
  • 图形处理器
  • 液晶显示器

软件

  • 操作系统
  • DirectX/OpenGL API
  • Nvidia驱动程序

有人能解释一下这个过程吗,也许可以用一些流程图来说明一下?

它不应该是一个涵盖每一个步骤的复杂解释(估计超出了范围),而是一个中级It人员可以遵循的解释。

我敢肯定,很多自称IT专业人士的人都无**确描述这个过程。

答案

cpu和gpu如何交互以呈现计算机图形?

尽管有多名社区成员回答了这个问题,但奥利弗·萨尔茨堡(Oliver Salzburg)还是不遗余力地回答了这个问题,不仅给出了详细的回答,而且还附上了出色的图表。

JasonC提供的图片,可在此处作为墙纸使用。

他写道:

我决定写一点关于编程方面以及组件如何相互通信的内容。也许它能给某些领域带来一些启示。

演示文稿

哪怕是你在问题中发布的一张图片,也能画在屏幕上,这需要什么呢?

在屏幕上画三角形有很多方法。为简单起见,假设没有使用顶点缓冲区。(顶点缓冲区是存储坐标的内存区域)假设程序只是告诉图形处理管道一行中的每个顶点(顶点只是空间中的一个坐标)。

但是,在我们能画出任何东西之前,我们首先要运行一些脚手架。我们稍后再看原因:

// Clear The Screen And The Depth Buffer glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Reset The Current Modelview Matrix glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // Drawing Using Triangles glBegin(GL_TRIANGLES); // Red glColor3f(1.0f,0.0f,0.0f); // Top Of Triangle (Front) glVertex3f( 0.0f, 1.0f, 0.0f); // Green glColor3f(0.0f,1.0f,0.0f); // Left Of Triangle (Front) glVertex3f(-1.0f,-1.0f, 1.0f); // Blue glColor3f(0.0f,0.0f,1.0f); // Right Of Triangle (Front) glVertex3f( 1.0f,-1.0f, 1.0f); // Done Drawing glEnd();

那是怎么回事?

当你编写一个程序,希望使用图形卡,你通常会选择某种接口的驱动程序。驱动程序的一些众所周知的接口包括:

  • OpenGL
  • Direct3D
  • 库达

对于这个例子,我们将使用OpenGL。现在,驱动程序接口为您提供了使程序与图形卡(或驱动程序,然后驱动程序与图形卡)对话所需的所有工具。

这个接口一定会给你一些工具。这些工具采用API的形式,您可以从程序中调用它。

这个API就是我们在上面的例子中看到的。让我们仔细看看。

脚手架

在你真正绘制任何实际的图形之前,你必须先进行一次设置。您必须定义您的视口(实际渲染的区域)、您的透视图(相机进入您的世界)、您将使用什么样的抗锯齿(平滑三角形的边缘)…

但我们不会看这些。我们只看一眼你每一帧都要做的事情。比如:

清除屏幕

图形管道不会为您清除每一帧的屏幕。你得说出来。为什么?这就是为什么:

cpu和gpu如何交互以呈现计算机图形?

如果你不清除屏幕,你只需在每一帧上画。这就是为什么我们用gl\u COLOR\u BUFFER\u位集调用glClear。另一位(GL\u DEPTH\u BUFFER\u位)告诉OpenGL清除depthbuffer。此缓冲区用于确定哪些像素位于其他像素的前面(或后面)。

转变

cpu和gpu如何交互以呈现计算机图形? Image source

变换是我们获取所有输入坐标(三角形的顶点)并应用ModelView矩阵的部分。这是解释模型(顶点)如何旋转、缩放和平移(移动)的矩阵。

接下来,我们应用投影矩阵。这会移动所有坐标,使它们正确面对我们的相机。

现在我们再次变换,使用我们的视口矩阵。我们这样做是为了将模型缩放到监视器的大小。现在我们有一组顶点可以渲染了!

我们稍后再谈转型。

绘图

为了绘制一个三角形,我们可以简单地告诉OpenGL通过调用glBegin with the GL\u triangles来开始一个新的三角形列表不变。在那里还有其他你可以画的形式。像三角带或三角扇子。这些主要是优化,因为它们需要较少的CPU和GPU之间的通信来绘制相同数量的三角形。

之后,我们可以提供一个由3个顶点组成的列表,这些顶点应该组成每个三角形。每个三角形使用3个坐标(就像我们在三维空间中一样)。此外,我还通过在调用glVertex3f之前调用glcolor3f,为每个顶点提供一种颜色。

3个顶点(三角形的3个角)之间的着色由OpenGla自动计算。它将在多边形的整个面上插值颜色。

相互作用

现在,当你点击窗口。应用程序只需捕获发出单击信号的窗口消息。然后您可以在您的程序中运行任何您想要的操作。

一旦你想开始与你的3D场景交互,这就变得困难多了。

您首先必须清楚地知道用户单击窗口的像素。然后,考虑到你的视角,你可以计算光线的方向,从鼠标点击进入你的场景。然后可以计算场景中是否有任何对象与该光线相交。现在您知道用户是否单击了一个对象。

那么,如何使它旋转?

转型

我知道通常应用的两种类型的转换:

  • 基于矩阵的变换
  • 骨基转化

区别在于骨骼影响单个顶点。矩阵总是以相同的方式影响所有绘制的顶点。让我们看一个例子。

例子

早些时候,我们在绘制三角形之前加载了单位矩阵。单位矩阵是一种根本不提供变换的矩阵。所以,无论我画什么,都只受我的视角影响。所以,三角形根本不会旋转。

如果我现在想旋转它,我可以自己(在CPU上)做数学运算,然后用其他坐标(旋转的)调用glVertex3f。或者我可以让GPU做所有的工作,在绘图前调用glrotatef:

// Rotate The Triangle On The Y axis glRotatef(amount,0.0f,1.0f,0.0f);

当然,数量只是一个固定值。如果你想设置动画,你必须跟踪数量并每帧增加一次。

那么,等等,刚才的黑客帝国谈话怎么了?

在这个简单的例子中,我们不必关心矩阵。我们简单地称之为glRotatef,它为我们处理所有这些。

glRotate produces a rotation of angle degrees around the vector x y z . The current matrix (seeglMatrixMode) is multiplied by a rotation matrix with the product replacing the current matrix, as ifglMultMatrix were called with the following matrix as its argument:

x 2 ⁡ 1 – c + c x ⁢ y ⁡ 1 – c – z ⁢ s x ⁢ z ⁡ 1 – c + y ⁢ s 0 y ⁢ x ⁡ 1 – c + z ⁢ s y 2 ⁡ 1 – c + c y ⁢ z ⁡ 1 – c – x ⁢ s 0 x ⁢ z ⁡ 1 – c – y ⁢ s y ⁢ z ⁡ 1 – c + x ⁢ s z 2 ⁡ 1 – c + c 0 0 0 0 1

好吧,谢谢你!

结论

显而易见的是,OpenGL有很多话题。但它什么也没告诉我们。通讯在哪里?

OpenGL在这个例子中告诉我们的唯一一件事就是它何时完成。每次手术都需要一定的时间。有些手术需要很长的时间,有些手术很快。

发送一个顶点到GPU将是如此之快,我甚至不知道如何表达它。从CPU向GPU发送数千个顶点,每一帧,很可能根本没有问题。

清除屏幕可能需要毫秒或更糟的时间(请记住,绘制每一帧通常只有大约16毫秒的时间),具体取决于视口的大小。要清除它,OpenGL必须以你想要清除的颜色绘制每个像素,可能是数百万像素。

除此之外,我们几乎只能向OpenGL询问图形适配器的功能(最大分辨率、最大抗锯齿、最大颜色深度……)。

但我们也可以用像素填充纹理,每个像素都有特定的颜色。因此,每个像素都有一个值,纹理是一个巨大的“文件”,里面充满了数据。我们可以将其加载到图形卡(通过创建纹理缓冲区),然后加载一个着色器,告诉该着色器使用我们的纹理作为输入,并在“文件”上运行一些非常繁重的计算。

然后我们可以将计算结果(以新颜色的形式)渲染成新的纹理。

这就是你可以让GPU在其他方面为你工作的方式。我想CUDA在这方面也有类似的表现,但我从来没有机会与之合作。

我们真的只触及了整个主题。3D图形编程真是个怪兽。

cpu和gpu如何交互以呈现计算机图形? Image Source


有什么要补充的解释吗?在评论中发出声音。想从其他精通技术的Stack Exchange用户那里了解更多答案吗?在这里查看完整的讨论主题。

  • 发表于 2021-04-12 06:51
  • 阅读 ( 281 )
  • 分类:互联网

你可能感兴趣的文章

windows10下如何增加专用视频ram

...RAM(或VRAM,发音为“VEE-RAM”)是一种特殊类型的RAM,与计算机的图形处理单元(GPU)一起工作。 ...

  • 发布于 2021-03-11 01:28
  • 阅读 ( 434 )

如何测试linux pc的性能

基准测试是一个测试,或一系列测试,它决定了某个计算机硬件运行的好坏——在很多情况下,“基准测试”本质上是“压力测试”的同义词。通过将硬件推向极限,您可以将其测量值与其他硬件的测量值进行比较。 ...

  • 发布于 2021-03-17 09:58
  • 阅读 ( 203 )

windows十大最佳免费基准程序

... Sandra Lite是一个功能齐全的基准测试套件,面向非常了解计算机内部工作的用户,以及需要在多台计算机上执行详细分析的企业。 ...

  • 发布于 2021-03-18 09:39
  • 阅读 ( 203 )

什么是cuda核心,它们如何改进pc游戏?

...人们对这些神秘的内核赞不绝口,但你仍然不知道他们是如何改进GPU的。对你来说,它们只是让你想到海洋生物的东西。 ...

  • 发布于 2021-03-20 21:38
  • 阅读 ( 496 )

如何检查你的mac有哪个图形卡(gpu)

...Mac电脑在游戏和其他应用程序中渲染图形的速度。下面是如何检查你的Mac有哪个GPU。 首先,点击屏幕左上角的“Apple”菜单,选择“About This Mac” 在打开的“About This Mac”窗口中,您将看到略有不同的信息,具体取决于您的Mac是...

  • 发布于 2021-03-31 17:34
  • 阅读 ( 215 )

如何监测游戏中的个人电脑性能与微星加力

...两个图标:一个喷口(加力燃烧室)和一个带有“60”的计算机显示器(RivTuner统计服务器)。 现在,让我们为大秀做好准备。打开加力燃烧室,然后单击设置中心距。在出现的窗口中,单击“屏幕显示”。在“全局屏幕显示热...

  • 发布于 2021-04-01 11:18
  • 阅读 ( 174 )

如何显示Windows10隐藏的浮动性能面板

...细信息”。 选择要在侧边栏中看到的性能图。您将看到计算机的CPU、内存、存储设备(包括SSD、硬盘和USB设备)、网络连接(有线以太网和Wi-Fi)和GPU(图形处理器)的选项 要仅显示性能图,请双击右窗格中某个图上的任意位...

  • 发布于 2021-04-01 19:44
  • 阅读 ( 190 )

如何在chrome中打开和关闭硬件加速

googlechrome配备了硬件加速功能,这项功能可以利用计算机的GPU来加速进程并释放重要的CPU时间。但是,有时驱动程序不兼容会导致此功能出现错误,禁用此功能可以为您省去一些麻烦。 什么是硬件加速(hardware acceleration)? 硬...

  • 发布于 2021-04-03 15:19
  • 阅读 ( 159 )

如何查看和提高游戏的每秒帧数(fps)

...C游戏FPS(每秒帧数)的方法 通过更新驱动程序提高fps 为计算机的图形硬件(GPU)提供最新的图形驱动程序非常重要。像NVIDIA、AMD甚至Intel这样的图形处理器**商定期发布新版本的图形驱动程序,这些驱动程序经过优化,可以让...

  • 发布于 2021-04-06 07:44
  • 阅读 ( 201 )

如何基准测试你的WindowsPC:5免费基准测试工具

...多都是免费的。 在执行任何基准测试之前,请确保您的计算机上没有运行任何其他程序。如果一个应用程序在后台运行,它会减慢基准测试的速度并扭曲结果。当你暂时不需要你的电脑的时候,计划运行你的基准测试,因为这...

  • 发布于 2021-04-07 13:41
  • 阅读 ( 156 )
残念罪
残念罪

0 篇文章

相关推荐