GTK+ 中的 OpenGL

LiYanrui posted @ Jan 20, 2009 06:00:12 PM in 数据可视化 with tags gtkglext gtk , 15741 阅读

在 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 再说。

Yue Wang 说:
2009年1月20日 21:07

你用QT也会抱怨缺少一堆东西的。

TualatriX 说:
2009年1月20日 21:44

试试这个吧:http://clutter-project.org/
跟GTK+结合相当紧密的!

Avatar_small
LiYanrui 说:
2009年1月20日 23:31

@ TualatriX:

clutter 项目,我一直也很关注,不过一直都没有找到 3D 的示例,画一个最简单的 cube 示例也就足够了。你那里有么?

TualatriX 说:
2009年1月21日 04:16

示例的话,源码包里是有的,在tests文件夹吧,以前编译并运行过,还是比较好玩的。

git clone git://git.clutter-project.org/clutter

LiYanrui 说:
2009年1月21日 05:34

clutter 自带的那些示例,是一些 2.5D 的效果,用来做做 GUI 特效很不错。完全的 3D 渲染,目前在http://bugzilla.gnome.org/show_bug.cgi?id=471417 有提到,感觉可用性还不是很高。

TualatriX 说:
2009年1月21日 06:20

哦。。。原来这是伪3D了。不知道GTK何时能得到完全的OpenGL渲染呢。

Avatar_small
LiYanrui 说:
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+ 取得比较完美的集成。

kenson 说:
2009年6月18日 18:57

我是clutter小鸟刚使用clutter, 请各位大虾多多指教。我做的是嵌入式现在跑的是X11+clutter能跑单是速度不行,想跑DFB+clutter。但是好像clutter不支持DFB。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter