在Linux中编写程序,OpenGL,Wayland和Qt如何适应图片

Chr*_*ris 1 c++ linux opengl user-interface qt

人们通常如何通过窗口GUI和3D渲染的混合来制作GUI程序?即SolidWorks

更具体地说:由于缺乏更好的描述,似乎OpenGL更适合渲染和创建3D对象/世界,而3D对象/世界更像游戏。因此,例如,如果我想使用OpenGL创建GUI(即MATLAB),则必须对所有字符信息进行编程以从头开始进行文本编辑,按钮等操作,这似乎很荒谬。因此,如果我想创建这些窗口,则将使用Qt之类的构建器并具有其所有功能,但是我会受到限制,如果我想在Qt中创建精美的3D模型,则必须使用所有非Qt函数。不如OpenGl好吗?(Wayland怎么也适合这张照片?)

dat*_*olf 5

是什么让您认为无法混合搭配?您还会对OpenGL,Qt和Wayland产生误解。总的来说,这个问题太广泛了,无法令人满意地回答。我已经在这里给出了冗长的解释:https : //stackoverflow.com/a/18006486/524368

简而言之:

  • Wayland:一种协议,用于在过程之间发送帧缓冲区句柄以及用户输入和交互事件(仅此而已)
  • Wayland合成器:创建帧缓冲区,并使用Wayland协议将其提供给客户端
  • Wayland客户端:通过他们喜欢的任何方法绘制到帧缓冲区
  • Westion:Wayland合成器,可将帧缓冲区创建为屏幕窗口,供客户绘制到

  • X11:图形和用户输入服务器协议;客户端可以连接到X11服务器,并将服务器执行的X11绘图命令发送给帧缓冲区(以X11术语表示为可绘制)。传统上,X11直接绘制在屏幕上,但是如果使用正确的X11服务器(Xwayland),也可以绘制到Wayland帧缓冲区。X11还将用户输入(鼠标,键盘,操纵杆等)多路传输到连接的客户端。

  • X11服务器:实现X11系统的显示端后端。
  • X11客户端:连接到X11服务器并发送绘图命令。

  • OpenGL:面向帧缓冲区的绘图API。本质上,OpenGL提供了有效地将点,线和三角形绘制到帧缓冲区的方法。绘制过程可以是一组固定的操作中的固定功能(旧式OpenGL),也可以是自由编程的(基于现代着色器的OpenGL)。OpenGL绘图命令可以发送到实现GLX的X11服务器。在这种情况下,OpenGL命令由X11服务器执行,而客户端仅向服务器发送命令流。但是,通常OpenGL命令是由使用OpenGL API的过程直接执行的,直接进入GPU,GPU将它们处理为帧缓冲区中的像素。

  • Qt或GTK之类的工具包:提供用于创建用户界面的抽象。Windows和窗口小部件是组织帧缓冲区内容的逻辑结构。用户输入是在事件系统中处理的,程序员可以使用该事件系统来控制工具箱提供的功能。用户界面元素是通过工具包可用的任何方式绘制的。这既可以是所使用的图形系统固有的绘制方法(X11绘制命令),也可以是不存在任何固有设置的绘制命令(例如Wayland),并且可以使用任何适合的方式。因此,如果进程的运行时环境非常适合OpenGL,则Qt会绘制其用户界面元素,因此OpenGL是一个可行的选项(并以此方式使用)。

人们通常如何通过窗口GUI和3D渲染的混合来制作GUI程序?即SolidWorks

他们使用Qt之类的工具箱,必须在其中绘制3D材质的OpenGL(或类似的API)正在使用。

似乎OpenGL更适合于渲染和创建3D对象/世界,而这更像是游戏,因为缺少更好的描述。

OpenGL仅绘制点,线和三角形。

OpenGL中没有“场景”或“世界”。看起来像场景或游戏环境的所有事物都是由于使用OpenGL的程序逻辑而发生的,结果看起来像它。

此外,OpenGL不执行窗口,也不执行用户输入。对整个小部件业务使用GUI工具包,并使用OpenGL绘制场景。