我在哪里可以学习如何使用 C++ 与图形卡交互?

Posted

技术标签:

【中文标题】我在哪里可以学习如何使用 C++ 与图形卡交互?【英文标题】:Where can I learn how to interface with a graphics card using C++? 【发布时间】:2011-05-09 14:05:51 【问题描述】:

我现在正在学习 c++,我想开始与显卡交互并玩 3d 图形的基础知识。我没有在我的书或互联网查询中找到它,我实际上完全不知道从哪里开始。 c++代码编译后可以在显卡上运行吗?我知道我通过 OpenGL 访问 GPU 处理,但我不清楚这是否只是一个 library 用于通过 c++(可能还有其他语言)访问以将函数传递给 GPU,或者它是否特定于GLSL。 那么什么是 OpenGL,我如何将它与 c++ 结合使用以便将处理传递给 GPU?还有其他更直接或更灵活的方式来使用 C++ 和显卡吗?

【问题讨论】:

【参考方案1】:

您是否有兴趣将 GPU 用于...

图形:您有两个接口,OpenGL(多平台)和 Direct3D (Windows),几乎所有 GPU 驱动程序都支持。

计算:最常见的接口 ATM 是 NVidia 的 CUDA(仅适用于 GeForce 卡)。还有 OpenCL(应该到处都支持,但我不确定 GeForces 上的当前状态;ATI 上一切正常)和一些我不熟悉的 AMD/ATI 专有解决方案。

选择你喜欢的任何东西并开始学习它,网上有很多关于上述任何内容的示例和教程。

【讨论】:

【参考方案2】:

首先,我建议您使用 GLUT(GL Utility Toolkit)API。看这里...http://www.opengl.org/resources/libraries/glut/

我认为这是使用 OpenGL 开始图形编程的最佳方式。

【讨论】:

我会建议他(和你,以及其他所有人)像瘟疫一样避免 GLUT。有许多更新、更实用、设计更好且错误更少的框架。 同意。有更好的框架(GLFW 很酷),但对于一个完整的初学者来说,GLUT 确实具有吸引力。【参考方案3】:

OpenGL 是一个库。您的 C++ 代码编译成机器代码(用于您的 CPU,而不是 GPU),调用 OpenGL 函数,这些函数将数据发送到您的图形卡 (GPU)。显卡解释该数据,并使用它来执行您要求它执行的任何操作。 GPU 不运行您的任何 C++ 代码。

GLSL(OpenGL 着色语言)是一种用于指导 GPU 着色器做什么的语言。请注意,这个名字有点用词不当,因为用着色语言编写的代码现在比着色做的要多得多。通常,您将像编写 C++ 代码一样编写 GLSL 代码,然后使用 OpenGL 调用来编译 GLSL 代码,然后使用更多的 OpenGL 调用来指示 CPU 使用着色器程序。


CPU

C++代码调用OpenGL函数调用图形驱动代码,通过硬件将指令传送到GPU

GPU

解释从图形驱动程序接收到的硬件信号以运行它自己的内部程序。这可能包括已编译的 GLSL 程序,它们也以相同的方式从 CPU 发送。


注意:您可以将“Open GL 函数”替换为“DirectX 函数”,将“GLSL”替换为另一种着色语言,图表相同。

【讨论】:

【参考方案4】:

简单地说,OpenGL 是一个与您的显卡驱动程序通信的库。您在 C++ 中调用 OpenGL 函数,这会导致将命令发送到 GPU 进行处理。您的 C++ 代码始终在 CPU 上运行,包括所有 OpenGL 库调用,但这些调用被转换为显卡驱动程序可以理解的命令。

过去,GPU 有一个固定功能的管道,而 OpenGL 充当状态机,您可以在其中启用和禁用某些功能,例如指定光源的位置或某些图像应如何映射到对象。 OpenGL 仍然是一个状态机,但通过可编程 shaders,您可以使用类 C 语言 (GLSL) 编写程序,并使用 OpenGL 函数来指示驱动程序编译和链接程序并在 GPU 上执行它们。

开始了解更多关于 OpenGL 的好地方是OpenGL SuperBible。最新版本不涵盖旧的固定功能管道(您无法编写着色器),并且需要一个不错的视频卡。

【讨论】:

“你的 C++ 代码总是在 GPU 上运行”——我认为你的意思是 CPU :-)【参考方案5】:

OpenGL 和 DirectX 为您完成与显卡的接口。

您可以自己编写低级代码,但我建议您先了解基础知识。

完成后,您可以考虑自己编写图形驱动程序,但不要指望能击败显卡制造商团队的开发人员。

【讨论】:

【参考方案6】:

Opengl NeHe 的最终位置。此处的教程将帮助您入门。

【讨论】:

不幸的是,NeHe 非常非常过时。 nehe.gamedev.net/wiki/NewLessons.ashx 上有一些更新的教程,这应该是人们首先关注的地方。 感谢您的更新。虽然已经过时,但它是我找到的最全面的教程集,我相信对于学习基础知识仍然有些价值。 如果一个人的目标是“尽快看到一个三角形旋转”,那么旧的 NeHe 教程看起来还不错 - 但不幸的是,他们从第一课开始就养成了很多坏习惯。我知道一套不错的 OpenGL 3 最新教程,但不幸的是,只有波兰语 - 我必须问作者他是否计划任何翻译:)。此外,还有一些不是指南形式的Lighthouse3D教程,但确实很有价值。显然需要一个新的综合 OGL 指南。

以上是关于我在哪里可以学习如何使用 C++ 与图形卡交互?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JupyterLab 循环更新交互式图形

python跟c++区别在哪里

无法与 UITableViewCell 中的任何内容进行交互,我在某处被布尔值阻塞,它在哪里?

试图实现一个 C++ 库,需要一些关于如何与它交互的指针

如何在 C++ 中构建图形用户界面? [关闭]

如何开始学习 C++ 中的图形? [关闭]