在Linux下制作一个程序,OpenGL,Wayland和Qt如何适合这个图片

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

更具体地说:看起来,OpenGL更适合渲染和创build3D对象/世界,这更像是一个游戏,因为缺乏更好的描述。 所以例如,如果我想用OpenGL创build一个GUI(即像MATLAB),我将不得不从头开始编写所有字符信息以进行文本编辑,button等,这似乎很荒谬。 所以,如果我想创build这些窗口,我会使用像Qt这样的生成器,但它的所有function都是有限的,如果我想在Qt中创build一个奇特的3D模型,那么我不得不使用所有Qt函数,和OpenGl一样好吗? (Wayland如何融入这张照片?)

是什么让你觉得你不能混合和匹配的东西? 另外,你也会对OpenGL,Qt和Wayland产生误解。 总的来说,这个问题太广泛了,不能令人满意地回答。 我已经在这里给出了一个冗长的解释: https : //stackoverflow.com/a/18006486/524368

总之:

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

  • X11:图形和用户输入服务器协议; 客户端可以连接到X11服务器,并将X11绘制命令发送给服务器执行到帧缓冲区(在X11中可绘制)。 传统上X11会直接画到屏幕上,但是如果X11服务器(Xwayland)可以使用Wayland的framebuffer。 此外,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是一个可行的选项(如此使用),如果该进程的运行时环境非常适合,则可以绘制它的用户界面元素。

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

他们使用像Qt这样的工具包,并且必须使用OpenGL(或类似的API)来绘制3D东西。

看起来,OpenGL更适合于渲染和创建3D对象/世界,这更像是一个游戏,因为缺乏更好的描述。

OpenGL只是绘制点,线和三角形。

OpenGL中没有“场景”或“世界”。 看起来像一个场景或游戏环境的一切都是由于使用OpenGL的程序逻辑而产生的,结果看起来像这样。

此外,OpenGL不会做窗户,它不会对用户输入。 为整个小部件业务使用GUI工具包,并使用OpenGL绘制场景。