Clutter-释放 OpenGL 威力的新途径
作者: Jim Huang (jserv)
日期: 2009-04-10
本文根据 jserv 在台南昆山科技大学的演讲稿整理而成,详细介绍了 Clutter 的背景、功能、设计思路、编程方法,是个难得的教程。

简介

作为一个概念性的介绍,该演讲探讨以 OpenGL 为基础、开发比较活跃的开放源 码函数库 clutter toolkit 的应用,包含 MID、NetBook、GPS/GND、Media Center 等等。过去开发 OpenGL 应用程序时,往往专注于繁复的数学运算与模 型表示,而很难兼顾“物件”本身的行为表现,而 Clutter 独到之处,就是让开 发者得以快速构建场景 (stage)与物件 (Actor)的互动,进而开发具有科技质感 的使用界面。

Clutter 一句话

OpenGL 可提供绚丽的 2D/3D 视觉呈现,但开发应用不容易;

Clutter 之于 OpenGL/GLX 犹如 GTK+ 之于 Xlib/X。

Clutter 的设计要点

  • 提供透过 OpenGL 的场景 (scenegraph)/画布(canvas)描绘的函数库;
  • 采用 GNU LGPL 授权
  • 使用既有的开放源码函数库: GObject(物件)+ Glib (数据结构/算法)+ GdkPixBuf(图形) + Pango(文字处理)
  • 快速建立丰富的视觉体验
  • 支持多个软硬件平台与图形系统
  • 2D with 3D Effects

即:打造绚丽的特效时不再需要掌握复杂的数学运算。

Clultter 的预期应用场合

  • Media box, Media Center
  • Desktop Effects (iTunes' Coverflow, slideshow)
  • Embedded UI (Microsoft Zune, iPhone, ...)

GTK+ 关键技术

  • Glib, GObject, Pango, ATK, GdkPixbuf, GDK, Cairo
  • GTK+/GObject
  • 使用 C 语言搭配 GObject 来实现丰富的物件导向;
  • GTK+ 骨子里都是物件;
  • 重点是“如何思考”,而非仅是“如何表达”;不受限于程序语言(原则);
  • 在 C 语言中通过 struct 与 define/macro 实现;
  • property 和 signal

Clutter 对于 2D/3D 的基本概念

  • 全世界是一座舞台,所有的男人女人不过是演员;
  • Stage/Actor
  • transform
    • 置于 3D 空间中
    • 沿着三轴旋转
    • Sized, Scaled, Opacity, Clipped.
  • 层次结构 (parent-child)
  • Animation:timelines, Behaviour, Alpha Function,Event

Clutter 实做层面

  • 采用 Fixed-point运算,非浮点运算,对嵌入式系统非常有利;
  • cogl 抽象 OpenGLOpenGL/ES

深入阅读

强烈推荐阅读 jserv 的演讲 ppt2

Reference

  1. jserv blog 上的原文
  2. 演讲稿ppt下载