请问directx和opengl是对显卡的编程吗?那shader又是什么?三者有什么关系呢?

在线求帮请问下,请问directx和opengl是对显卡的编程吗?那shader又是什么?三者有什么关系呢?
最新回答
寂寞念行乐

2024-05-03 01:57:10

DirectX(Direct
eXtension,简称DX)是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循COM。被广泛使用于Microsoft Windows、Microsoft XBOX、Microsoft
XBOX 360和Microsoft XBOX ONE电子游戏开发,并且只能支持这些平台。最新版本为DirectX 12,创建在最新的Windows
8.1上。

OpenGL(全写Open
Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,OpenGL可以与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性目前,2.0版本开始加入了很多类似于DirectX中可编程单元的设计.

Shader Model(在3D图形领域常被简称SM)就是“优化渲染引擎模式”。Shader(着色器)是DirectX中一段能够针对3D对象进行操作、并被GPU所执行的程序。早在微软发布DirectX 8时,Shader
Model的概念就出现在其中了,并根据操作对象的不同被分为对顶点进行各种操作的Vertex Shader(顶点渲染引擎)和对像素进行各种操作的Pixel
Shader(像素渲染引擎)。

到了Shader Model 4.0,在VS和PS之间引入了一个新的可编程图形层--几何渲染器(Geometry
Shader)。原来的Vertex Shader和Pixel Shader只是对逐个顶点或像素进行处理,而新的Geometry
Shader可以批量进行几何处理。然而性能受到诟病,为了兼顾性能,在DirectX11(SM
5.0)开始引入了Tessellation来取代GS的部分功能。


说白点,三者的关系是,Shader Model是DirectX其中一个技术协议程序,而DirectX和OpenGL则是多媒体编程接口的竞争对手。

追问
请问dx和gl他们编译完的指令是对显卡进行操作呢?还是cpu?既然显卡是用来渲染的,那么我们的程序在何时调用了显卡进行计算呢?求解惑~
shader可以被显卡执行那么是不是可以理解为 现在越来越牛逼的游戏画质和cg效果 就是因为shader越来越强大呢?
追答

"shader可以被显卡执行那么是不是可以理解为 现在越来越牛逼的游戏画质和cg效果 就是因为shader越来越强大呢?"

可以这样认为,但也不全是,上面说过。Shader Model 4.0最大指令数从512条增加到了64000条;临时暂存器数量也从原先的32个增加到惊人的4096个;允许同时对128个Texture进行操作(Shader Model
3.0只允许16个),在VS和PS之间引入了一个新的可编程图形层--几何渲染器(Geometry Shader),但性能却强差人意。所以在DirectX11(SM 5.0)开始引入了Tessellation来取代GS的部分功能。以达到性能的提升。

追问
“请问dx和gl他们编译完的指令是对显卡进行操作呢?还是cpu?"这个问题呢?
追答

象Direct eXtension,是一种多媒体编程接口,是如全色图形、视频、3D 动画和音频等的应用程序的数据交换平台。说白一点,就是所有游戏开发商共同遵从的一个行业规范协议。让系统、游戏程序和硬件间兼容。

DX编译后的指令,不能笼统地认定是对显卡操作(应该是GPU)还是对CPU,这是一个误区。DX7.0之前,某些指令如位置转换、灯光等都需CPU来计算。DX7.0开始添加新的T&L技术,令这类效果指令的运算工作从CPU中解脱出来,转由显卡GPU来完成。但直到DX8.0开始,同时具备像素渲染引擎(Pixel Shader)与顶点渲染引擎(Vertex Shader)技术,这才使GPU真正成为了可编程的处理器。

现阶段,因GPU是由大量的运算单元(核心)组成,并行计算能力远高过 CPU的运算能力,而显卡两大平台NVIDIA的CUDA和AMD的Stream的飞速发展,催生了OpenCL和DirectCompute通用计算标准。所以现在的显卡平台指令都逐步由GPU完成.

醉挽清风

2024-05-03 16:14:08

GL DX都是API。是一个接口,是专门针对显卡的,利用显卡的硬件资源去绘图。
跟Windows 的GDI不同,GDI是用CPU绘制的,然后再传递绘制好的图像显示。CPU通常处理的是图像,GPU处理的是矢量图形。
准确的说不是对显卡的编程,他们是API,就像win32 API一样。编译出来的都是CPU指令,只是告诉CPU怎么控制显卡绘制。但是shader是对GPU的编程,就是控制顶点,跟像素怎么着色的。编译后是由GPU执行的指令。
shader实际上是显卡GPU能读懂机器指令。但是编译链接,生成shader有多种语言。CG,GLSL(opengl API中带的编译器),HLSL(dx带的编译器)。注意GLSL HLSL的编译器都不是应用程序,是API内置的编译方式。