图形编程概念—显卡/GPU是如何工作的?

article/2025/9/21 15:02:30

        计算机显卡在设计之初主要是为了解决实时渲染三维图像的问题,这里的实时指的是能够以很快的速度生成图像,而不是显示播放已经预先录制好的视频。实时渲染对于任何一个游戏都至关重要,因为计算机屏幕显示的图像,都是对玩家操作的及时反馈。对于能否实时的生成图像,就涉及到一个计算量的问题,任何在屏幕中显示的三维物体,首先都要经过重重的坐标变换,根据观察的角度,以正确的透视投影显示出来,并且物体的表面会受到环境中各种光线的影响,呈现不同的颜色和各种的阴影。这包括光线的漫射、折射、投射、散射等。

        假设我们是在一个全高清的显示屏中实时显示图像的话,每一帧就共有两百多万个像素点,每秒假设生成60帧图像来保证动画的流畅度,那么每帧就大约有1.6亿个像素点参与计算,这样庞大的计算量,如果拿给一个普通八核的CPU来计算,势必会超时。

        而GPU是由数千个计算核心构成的超级CPU,这些核心能够同时对不同的像素并行运算,不过单个GPU核心做得事情就比较单一,速度上远不如一个CPU核心,很多在CPU上运行速度很快的指令,如果照搬给GPU而不做任何修改的话,那计算速度自然会比CPU慢很多,比如,CPU中常见的if-else-语句,在GPU上的执行效率就不高。

        GPU被广泛的运用在机器学习和深度学习中,是因为深度学习在本质上就是一个运算量巨大的数学模型,而GPU中数千个核心,可以将这个数学模型进行拆解成细小的任务,并对它们进行并行运算。

对显卡的编程有两种:

并行计算(Parallel Computing): CUDA, OpenCL, OpenACC框架,可以对图形图像进行处理,或者进行高效、密集的数学运算,制作电影特效,或者训练一个深度学习网络。

图形编程(Graphics Programming):实时生成三维图像。

        计算机显卡是如何在屏幕中渲染出实时的三维图像呢?空间中的物体都是由很小很小的三角形构成的,三角形作为最基础的图元之一,可以构成出很多复杂的图形,比如正方形可以分解成两个三角形,而所有的多边形都能够分割成若干个三角形。三角形的优点还包括它的三个顶点可以唯一的在空间中确定一个平面,而四个点的多边形不一定共面,三个点的三角形则一定在同一个平面上,当我们知道任何图形在计算机中都可以由许多三角形构成,那么接下来显卡的工作就是对这些三角形并行的进行一系列流水线的运算。

显卡如何渲染三维图像

        首先,显卡会对三角形进行坐标变换,每个三角形都会有一个初始坐标,这是美工师在建模的时候就决定好了的,但是由于我们观察视角的不同,视野大小的不同,因此我们看到的物体姿态是不一样的,坐标转换这一个步骤就是根据我们观察的位置,重新计算出每一个顶点的新坐标。

      

        当三角形在屏幕中的坐标确定以后,计算机就开始对三角形所覆盖的区域进行逐像素点的绘制,这时候如果凑近了看,屏幕其实是由很小很小的像素点构成的,在这一个步骤中,计算机会对每一个像素点进行上色,每一个像素点的颜色其实是根据物体的材质,纹理以及场景中的光源计算而来的。

        计算机显卡就是这样对场景中成千上万个三角形同时计算,因此也就生成了我们屏幕中出现的画面。对显卡的编程,就是像显卡下达指令来告诉它去做什么。

API(Application Programming Interface

        对显卡的编程,不得不提OpenGL, DirectX, Vulkan这三大API,API就是应用程序接口。就像在C,或者python中直接使用print()这样的功能来向屏幕输出文字一样,API可以想象成我们在编程语言中可以直接使用的功能集合,而使用图形编程API可以让我们直接对显卡下达指令,例如绘制三角形,图片,告诉显卡应该何时刷新屏幕等等。这些都需要使用这些图形编程API来进行操控。

显卡的驱动程序(Graphics Driver)

        当我们向显卡下达指令时候,这些指令会经过一个叫做驱动程序的东西,驱动会将你下达的指令翻译成显卡硬件能够直接运行的机器码。虽然每一个显卡做得事情都大相径庭,但是每一个显卡厂商生成的硬件都大不相同。所以我们需要向新安装的操作系统里重新安装显卡的驱动。并且尽量使用最新的驱动程序以获得最优的性能,以及显卡厂商对各种bug的修复。

着色器(Shader)

        屏幕上显示物体的形状、颜色都是由Shader程序控制的。Shader程序通常是用来绘制光照和阴影的。Shader根据预先设定好的场景模型,给屏幕上的每个像素点上色。Shader的编程语言有GLSL,这是由OpenGL开发接口所提供的,以及HLSL(Cg/HLSL),这是微软的DirectX所提供的。Shader程序的编写在unity中完成,选择unity是因为真正的图形编程大多数是在游戏引擎中直接完成的。



GPU是如何工作的?Shader图形编程入门_哔哩哔哩_bilibili


http://chatgpt.dhexx.cn/article/KAMiiCiZ.shtml

相关文章

编写python程序、输出*图形_Python用程序输出字母“C”的图案

本文主要演示Python用程序输出字母“C”的图案。 工具/原料 windows系统电脑1台 提前安装好pycharm社区免费版 方法/步骤 1 打开桌面的pycharm程序; 2 依次点击 file > New Project 新建一个代码目录; 3 依次点击 New > Python File 新建一…

转载:opencv-9-图像噪声以及评估指标 PSNR 与SSIM

本文转自博客园博主SChen1024的博文:opencv-9-图像噪声以及评估指标 PSNR 与SSIM 开始之前# 我们在将 opencv 的图像显示在了 qt 的label 上, 我们能够将图显示在label 上, 用于显示我们的算法, 我们在 opencv 上一篇文章中介绍了 opencv 的核操作, 我们这里就要进入…

三维图形程序设计

三维图形程序设计 基础知识计算机图形学概述图形与图像图形流水线图形开发库GPU OpenGL编程OpenGL的功能OpenGL的两种编程模式OpenGL相关的库OpenGL基本语法程序流程 变换(Transformation)变换的步骤几何变换投影变换视口变换 光照光照明模型phong模型Blinn-Phong光照模型openg…

Python图像处理

一、简介 实现计算机视觉任务的过程中,不可避免地需要对图像进行读写操作以及图像预处理操作,下面介绍两个常用的Python图像处理库:OpenCV和Pillow。 OpenCV全称是由英特尔公司资助的开源计算机视觉库。 它由一系列C函数和少量C&#xff0b…

OpenCV-Python图形图像处理:制作雪花飘落特效

☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░ 一、引言 前几天有博友咨询,能否在视频中实现雪花飘落的效果,答案是肯定的。老猿前天简单构思了一下,利用周末时间,使用OpenCV-Python通过图像循环…

图像处理程序的设计与实现

一、要求: 1.利用Qt和QPainter实现一个图像处理程序,有菜单栏、工具栏和状态栏 2.有图像选择对话框,以选择和读取图像 3.状态栏显示图像的像素,位深,导入图像的路径和鼠标所在点的像素点坐标 4.可以对图像缩放&#xf…

C#图形化程序设计知识总结

图形化程序设计 用可视化的界面进行程序设计 逃出控制台丑丑的黑框 知识导图 图为图形化程序设计的内容清单 Windows窗体程序设计 窗体设计 窗体是一个窗口或对话框,是存放各种控件的容器,可用来向用户显示信息 一个Windows应用程序可以包含多个窗体 …

python 图像分割_5行Python代码实现图像分割的步骤详解

众所周知图像是由若干有意义的像素组成的,图像分割作为计算机视觉的基础,对具有现有目标和较精确边界的图像进行分割,实现在图像像素级别上的分类任务。 图像分割可分为语义分割和实例分割两类,区别如下: 语义分割&am…

台式计算机驱动程序未被安装,计算机图形驱动程序安装失败的原因及其解决方法...

由于许多问题,兼容性和数字签名,计算机图形驱动程序可能会失败. 很有可能没有启用Windows安装程序服务. 每个问题都有不同的解决方案. 如何确定问题的原因,可以借用软件进行检测,也可以尝试一种然后修复. 如果由于Windows Install…

LabVIEW程序框图保存为图像

LabVIEW程序框图保存为图像 想将LabVIEW程序框图保存为标准图像文件,以便可以在LabVIEW之外查看或在文档中使用。如何将程序框图生成为图像? 可以通过打印VI或以编程方式获取LabVIEW程序框图图像。 要打印VI,请使用以下步骤: …

Python图形绘制程序设计

第1关:绘制多边形 任务描述 本关任务:依照案例教程例6-2,用多边形函数绘制各种多边形图形。 编程要求 根据提示,在右侧编辑器补充代码。 测试说明 平台会对你编写的代码进行测试: 开始你的任务吧,祝你成功! 第2关:绘制五角星图形 任务描述 本关任务:绘制一个黄色…

升级计算机的图形卡和驱动程序,如何升级计算机图形卡,计算机图形卡升级方法图...

[哈哈IT网络中关村显卡]如何升级计算机显卡,通常我们会对显卡驱动程序做进一步的升级,这有助于提高显卡的性能,达到达到显卡升级的目的. 显卡驱动程序升级使计算机显示效果更好,显示效果也得到了提高. 下面介绍如何升级计算机图形…

计算机图形驱动程序原理,您知道更新计算机图形驱动程序的作用吗?怎么做

购买或使用计算机时,为了获得更好的视觉体验并避免显示的AV质量,我们通常在选择时安装独立的显卡!使用计算机时,有时第三方软件会提示您更新计算机图形驱动程序,但有时却没有!更新计算机图形驱动程序有什么…

VTK图形图像开发进阶-学习笔记 01 VTK概述

1.1 VTK概述 1.1.1VTK是什么 1.1.2VTK能做什么 1.1.3如何获取VTK源码 略 1.1.4 VTK学习资源 略 1.2 VTK编译安装 略 1.3创建一个简单的VTK程序 步骤一:创建目录A: D:\VTK\example\Chap01 步骤二:在目录A中创建txt文件:CMa…

用Java完成图形图像绘制

我们要来图形图像的处理,目标就是滑动鼠标绘制一根直线,绘制一个矩形,绘制一个圆,并且绘制任意的一个三角形,和任意的一个等腰三角形 我们先创建一个DrawPad类,在这个类里面完成一些操作 步骤1、创建一个…

图形图像学习随笔:计算机图形学的一些基本概念

本文内容摘抄于:《计算机图形学的概念》 一、计算机图形学的范畴 1、图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地形图、曲面的线框图等;另一类是明暗图,也就是通常所说的真实感图形; …

升级计算机的图形卡和驱动程序,驱动程序向导如何更新图形卡驱动程序?更新图形驱动程序方法说明...

有许多用户使用驱动程序向导,并且一些新用户不清楚更新图形驱动程序的教程. 今天,我将带给您有关更新图形驱动程序的教程. 希望它能对您有所帮助. 我们首先打开计算机上已安装的驱动程序向导软件,然后进入软件,然后单击页面“立即…

大数据学习内容有哪些?大数据学习路线图

很多人想学习大数据,但是都不清楚大数据学习应该怎么下手。大数据开发工程师简单整理了一下大数据学习路线图,希望对于学习大数据的朋友,有一定的帮助。 总的来说,如果是从零基础开始学习,总共分为八个阶段 第一阶段:HTML+css 第二阶段:JAVASE学习 第三阶段:javaweb …

(转载)大数据学习路线大数据学习路线

一、背景介绍 本人目前是一名大数据工程师,项目数据50T,日均数据增长20G左右,个人是从Java后端开发,经过3个月的业余自学成功转型大数据工程师。 二、大数据介绍 大数据本质也是数据,但是又有了新的特征&#xff0c…