OpenGL、GTK和QT库之间有什么区别?

OpenGL、GTK和QT库之间有什么区别?,opengl,graphics,Opengl,Graphics,我了解GTK、QT或其他图形工具包的用途。但是我不理解OpenGL的作用。它只是另一个GUI库,还是指更基本的东西?如果是这样的话,它是什么?我什么时候应该在日常黑客中使用它?OpenGL是一个用于在较低级别上绘制图形的库。它主要擅长于3D图形。OpenGL最重要的竞争对手是Direct3D(而不是整个DirectX) GL只有在硬件加速的情况下才真正强大。如今,几乎每个台式机或笔记本电脑解决方案都有GL加速功能,但在一些将图形卡集成到芯片组的系统上,它仍然相当慢 对于日常黑客行为,GL可用于许

我了解GTK、QT或其他图形工具包的用途。但是我不理解OpenGL的作用。它只是另一个GUI库,还是指更基本的东西?如果是这样的话,它是什么?我什么时候应该在日常黑客中使用它?

OpenGL是一个用于在较低级别上绘制图形的库。它主要擅长于3D图形。OpenGL最重要的竞争对手是Direct3D(而不是整个DirectX)

GL只有在硬件加速的情况下才真正强大。如今,几乎每个台式机或笔记本电脑解决方案都有GL加速功能,但在一些将图形卡集成到芯片组的系统上,它仍然相当慢

对于日常黑客行为,GL可用于许多不寻常的用途。原因是您可以利用GPU的处理能力来执行与图形相关的任务。对于任何非图形化的东西,CUDA等更新的语言也可以访问GPU

虽然GL的真正优势在于3D场景渲染,但它通常也用于2D操作或合成。原因是图形卡的2D加速体系结构通常达不到GL的功率(自由度)或性能。这就是为什么有时GL用于视频输出(主要是缩放)或混合任务,即使这些任务的特定2D加速可用。Mac OS X是一个突出的例子,它通过GL渲染整个桌面(可选),从而在不需要高CPU负载的情况下实现吸引人的效果。但它也可以用于例如将抗锯齿文本图示符混合到纹理背景上


一旦您完成了一项图形化、性能关键的任务,您可能会希望GPU提供帮助(即使您不在屏幕上绘图也可能),然后OpenGL将成为满足您需求的干净、标准化、跨平台的解决方案。今天的GUI工具包大多不提供GPU加速绘图,而是将GL渲染包含到它们的小部件中。因此,您可以将它们用于UI绘图,并在适合的地方包含性能关键型实时图形。在GL中构建一个完整的UI是一件痛苦的事情,但也有解决方案可用(典型的用例是带有游戏内UI的游戏)。

这是更基本的事情。OpenGL允许您执行低级绘图(想想“从这里到这里画一条线”而不是“画一个按钮”)。OpenGL操作通常也是硬件加速的,因此非常高效,OpenGL API允许您轻松使用3D

在OpenGL和GUI工具包(如QT或GTK)之间进行选择,实际上取决于您是尝试为应用程序绘制UI元素,还是希望对图形的绘制方式进行非常精细的控制


有时,GUI工具包在封面下使用OpenGL来绘制屏幕上的元素。

OpenGL是图形API,在它的基础上构建更复杂的面向用户的图形库。如果您对图形开发感兴趣,尤其是3D图形,那么很值得您去了解它。这是一个非常强大的系统,可以做任何事情,从画线到渲染地震,再到处理照片逼真的大气渲染

所有与OpenGL相关的内容的起点都是,它有指向您需要的所有内容的链接

如果你喜欢一本教科书,而且这对OpenGL来说不是一个坏主意,那么最终的文本是“OpenGL编程指南”,因为它的封面,通俗地称为“红皮书”。您可能希望用“OpenGL着色语言”(或橙皮书)来补充这一点,该语言可以做到它所说的

OpenGL的一个优点是有一个简单的测试工具包——GLUT,它已经在大多数语言中通过绑定实现,并且非常容易启动和运行以进行实验,并且通常可以使用它进行破解


快去拿你的茶壶

GTK、Qt、MFC、wxWidgets等都是窗口化工具包——它们提供对话框、小部件、按钮等控件来创建GUI应用程序

它们通常提供的控件之一是画布,您可以使用图形命令(绘制线、绘制圆等)在画布上绘制。它们可能还提供了一个OpenGL画布,您可以使用OpenGL命令进行绘制

OpenGL(简单地说)是一种显示3D对象的语言,它功能强大,跨平台,而且有点复杂(特别是当你的数学能力很弱的时候!),但它远比你自己尝试做任何3D工作都要好!它有时会令人沮丧,尤其是当你做错了什么,它只是画了一个空白屏幕


为了让事情变得更复杂一点,还有一些用OpenGL编写的窗口工具包,OpenGL在场景中提供了一组按钮、对话框等,有时(在幕后)像Qt这样的东西使用的所有GUI元素实际上都是由OpenGL绘制的

为什么2D加速度通常较慢?如果只使用两个轴,速度会更快吗?首先,3D中的大多数附加操作,如更复杂的矩阵操作,基本上都是在硬件中实现的,因此与更简单的2D操作相比,它们是“免费”的。对于这两种情况,绘图本身都是在2D中完成的(请参见扫描线算法)。第二,3D加速通常更快,因为GPU供应商将更多精力放在优化GL和DirectX的驱动程序上,而不是2D硬件加速;特别是对于Windows以外的平台。大多数GPU基准都是3D游戏基准。这就是市场竞争的地方。