我现在正在学习c ++,我想开始与显卡连接并使用3D图形的基础知识。我没有在我的书或互联网查询中找到它,我实际上完全不知道从哪里开始。编译后,c ++代码可以在显卡上运行吗?我知道我通过OpenGL访问GPU处理,但我不清楚这是否只是一个库,用于通过c ++(可能还有其他语言)访问以将函数传递给GPU,或者它是否特定于GLSL。 那么什么是OpenGL,我如何将它与c ++结合使用才能将处理传递给GPU?是否有其他更直接或灵活的方式来使用C ++和图形卡?
答案 0 :(得分:8)
OpenGL是一个库。您的C ++代码编译为机器代码(针对您的CPU,而不是GPU),调用OpenGL函数,将数据发送到您的图形卡(GPU)。图形卡会解释该数据,并使用它来执行您要求它执行的任何操作。 GPU 不会运行任何C ++代码。
GLSL(OpenGL着色语言)是一种用于指示GPU着色器功能的语言。请注意,该名称有点用词不当,因为使用着色语言编写的代码比现在的着色要多得多。通常,您将编写GLSL代码,就像编写C ++代码一样,然后使用OpenGL调用编译GLSL代码,然后使用更多OpenGL调用来指示CPU使用着色器程序。
C ++代码调用 OpenGL函数调用图形驱动程序代码,它通过硬件向 GPU 发送指令。
解释从图形驱动程序接收的硬件信号以运行其自己的内部程序。这可能包括已编译的GLSL程序,它们也以相同的方式从CPU发送。
注意:您可以使用其他着色语言将“Open GL functions”替换为“DirectX functions”和“GLSL”,图表也是相同的。
答案 1 :(得分:6)
OpenGL和DirectX为您提供与图形卡的连接。
您可以自己编写低级代码,但我建议您首先了解基础知识。
一旦你完成了这项工作,你可以自己编写图形驱动程序,但不要超过卡制造商开发团队的表现。
答案 2 :(得分:2)
Opengl的最终位置NeHe。这里的教程将为您提供基础知识。
答案 3 :(得分:1)
简单地说,OpenGL是一个与您的图形卡驱动程序通信的库。您在C ++中调用OpenGL函数,这会导致命令被发送到GPU进行处理。您的C ++代码始终在CPU上运行,包括所有OpenGL库调用,但调用将转换为图形卡驱动程序可以理解的命令。
过去,GPU具有固定功能管道,OpenGL充当状态机,您可以在其中启用和禁用某些功能,例如指定光源的位置或某些图像应如何映射到对象。 OpenGL仍然是一个状态机,但是使用可编程shaders,您可以用类C语言(GLSL)编写程序,并使用OpenGL函数指示驱动程序编译和链接程序并在GPU上执行它们。
开始更多地了解OpenGL的好地方是OpenGL SuperBible。最新版本不包括旧的固定功能管道(你不能写着色器),需要一个像样的视频卡。
答案 4 :(得分:0)
首先,我建议您使用GLUT(GL Utility Toolkit)API。在这里查找... http://www.opengl.org/resources/libraries/glut/
我认为这是使用openGL开始图形编程的最佳方式。
答案 5 :(得分:0)
您是否对使用GPU感兴趣...
图形:您有两个接口,OpenGL(多平台)和Direct3D(Windows),几乎所有GPU驱动程序都支持这些接口。
计算:最常见的接口ATM是NVidia的CUDA(仅适用于GeForce卡)。还有OpenCL(应该支持所有地方,但我不确定GeForces目前的状态; ATI都可以)和AMD / ATI的一些我不熟悉的专有解决方案。
选择您喜欢的任何内容并开始学习它,有很多示例和教程可以在网上找到。