GTK+ 中的 OpenGL
在 Gtk+ 窗口中调用 OpenGL 库进行三维图形渲染的资料少而又少,遍索 Google,非但也没有找到一份像样点的文档,反而让我不断感慨 GTK+ 对 OpenGL 支持的孱弱。
GTK+ 未对 OpenGL 提供内建的支持,目前只能通过第三方库或者由用户自行在 GTK+ 程序中调用 xlib 和 glx 库来解决这一问题。第三方库,目前只有 gtkglarea 和 gtkglext 这两个,前者似乎已经挂了,后者还在无奈地等候能够获准成为 GNome 的标配组件。
在 gtkglext 的项目主页上有这样一句话:On a philosophical note, GtkGLExt really shouldn't exist at this point. Given the strong ties between GTK -> Cairo and Cairo -> OpenGL, it is surprising that OpenGL support hasn't been integrated into GTK already (从哲学意义上来讲,GtkGLExt 是不应该存在的。虑及 GTK 与 Cairo 以及 Cairo 与 OpenGL 之间的紧密联系,GTK 迄今未能提供 OpenGL 的内建支持,着实令人费解).
关于 GTK+ 该如何提供内建 OpenGL 支持的讨论,从 2003 年讨论到 2009 年,迄今也没什么定论,详见:http://bugzilla.gnome.org/show_bug.cgi?id=119189
从这件事情上,作为普通用户,我对 GTK+ 很失望。相对于 GTK+,QT 很早就实现了 OpenGL Widget,而且现在也出现了许多基于 QT 的支持三维图形的工程软件,譬如 Geomagic Stdio、ICEMSurf 等。我不觉得 GTK+ 内建支持 OpenGL 或者提供一个 OpenGL Widget 在技术上有多高的难度,也许开发者们从来也不感觉 3D 技术在 Linux 桌面上有什么作为。
这篇属于抱怨文,但是面临的问题终归要解决。我暂且还未有转移到 QT 的打算,先用一下 gtkglext 再说。
2009年1月20日 21:07
你用QT也会抱怨缺少一堆东西的。
2009年1月20日 21:44
试试这个吧:http://clutter-project.org/
跟GTK+结合相当紧密的!
2009年1月20日 23:31
@ TualatriX:
clutter 项目,我一直也很关注,不过一直都没有找到 3D 的示例,画一个最简单的 cube 示例也就足够了。你那里有么?
2009年1月21日 04:16
示例的话,源码包里是有的,在tests文件夹吧,以前编译并运行过,还是比较好玩的。
git clone git://git.clutter-project.org/clutter
2009年1月21日 05:34
clutter 自带的那些示例,是一些 2.5D 的效果,用来做做 GUI 特效很不错。完全的 3D 渲染,目前在http://bugzilla.gnome.org/show_bug.cgi?id=471417 有提到,感觉可用性还不是很高。
2009年1月21日 06:20
哦。。。原来这是伪3D了。不知道GTK何时能得到完全的OpenGL渲染呢。
2009年1月21日 17:39
@ TualatriX: 应该也不能说是伪 3D,因为它的确是需要 3D 渲染支持。
基于 clutter 是可以做完全的 3D 图形渲染的,已经有人用它画出了 Quake 3D 模型。不过,目前 clutter 项目的重点应该并不在于提供全面的 3D 支持,它的开发者们似乎对此似乎有点心虚,否则也就不至于把那个 Quake 3D 模型渲染的第三方项目搬出来说事:Neils cool little side project to load and render Quake 3D models in Clutter. I really hope this puts an end to people calling Clutter ‘2.5D’ (what does that actually mean?)。
那个用 clutter 做 Quake 3D 模型渲染的项目,其实是自己写了一个 clutter 的 actor 对象,并不是直接在 clutter 中调用 opengl 函数。如果 clutter 真的实现全面 3D 支持的话,就不应该由用户自己去写 actor 了,它必须得做到像 VTK 那样。似乎 clutter 所做的,很像 cairo + glitz 的工作。
看来,目前要在 gtk+ 中画三维图形,比较妥当的选择的就是 gtkglext 了。自由/开源社区应该尊重实用,而不是多么绝妙的设计,感觉 gtk+ 的开发者们从一开始就过于挑剔 gtkglext 存在的问题,嫌它不能像 cairo 那样与 gtk+ 取得比较完美的集成。
2009年6月18日 18:51
asf
2009年6月18日 18:57
我是clutter小鸟刚使用clutter, 请各位大虾多多指教。我做的是嵌入式现在跑的是X11+clutter能跑单是速度不行,想跑DFB+clutter。但是好像clutter不支持DFB。