概述

openFrameworks(以下简称 oF) 是一个开源的、跨平台的 C++ 工具包,它的设计目的为开发创造过程提供一个更加简单和直观的框架。

概述

openFrameworks(以下简称 oF) 是一个开源的、跨平台的 C++库与工具包,它的设计目的为开发创造过程提供一个更加简单和直观的框架。

OpenFrameWorks 是 用C++开发,用来做交互式互动软件的。其基础就是封装了的openGL,除了openGL图形库,还包含了XML、POCO、SOCKET等一系列工具,能够让人在此框架上快速开发出高性能的互动程序。

oF 的强大之处在于,它不仅是一个通用的胶水(glue),同时它还封装了多种常用的库,包括:

  1. OpenGL、GLEW、GLUT、libtess2、cairo - 用于处理图形;

  2. rtAudio、PortAudio、OpenAL、Kiss FFT、FMOD - 用于音频的输入、输出和分析;

  3. FreeType - 用于字体显示;

  4. FreeImage - 用于图像存储和载入;

  5. Quicktime、GStreamer、videoInput - 用于视频播放和截取;

  6. Poco - 用于开发网络应用;

  7. OpenCV - 用于计算机视觉;

  8. Assimp - 用于读入 3D 模型。

这些库虽然遵循着不同的规则和用法,但 oF 在它们基础上提供了一个通用的接口,使得使用它们变得很容易。

除此之外,oF 的另一亮点在于它具有很好的跨平台性,能够写一遍代码在Windows、Mac,PC平台上通用也能够在Android、IOS等移动设备上编译后运行。目前它支持 5 种操作系统(Windows、OSX、Linux、iOS、Android)以及 4 种 集成开发环境(XCode、Code::Blocks、Visual Studio、Eclipse)。

该程序代码是被编写为跨平台(PC, Mac, Linux, iPhone)和跨编译程序。 API被设计成最小并且易于掌握。这有最少的类别,并且在这些类别里面含有少量的函式。已经执行的程序代码,以便在这些类别内部是最小的跨越引用,使得它很容易被撷取出来再利用,如果你有所需要或者加以延长的话。

简单地说,Openframeworks 是一个工具,通过程序代码让它更为容易制作一些事情。我们觉得它是超级有用的,我们希望你也这么认为。

Openframeworks 正由Zach Lieberman、Theodore Watson、Arturo Castro 与社群的帮助下积极开发。ofxIphone 则是由Mehmet Akten 和 Zach Gage 积极开发,与来自Lee Byron 和 Damian Stewart 的开发协助。 Chris O’shea 负责OF网站设计和维护。

Openframeworks 非常感激两个重要的前辈:由 Casey Reas、 Ben Fry 建立的 Processing development environment 与Processing 社群。和 theACU 套件,这是私人的分布式 C++函式库,由 Ben Fry 和麻省理工学院媒体实验室的美学与计算组(MIT Media Lab’s Aesthetics and Computation Group)的其他人所开发。

  1. addons 类似Processing的lib,第三方函数库,其实就是非oF核心的libs,可以和libs中项目进行互相迁移

  2. apps 写的OF项目存放位置

  3. docs 有一些关于OF使用的文档,不过不是太详细

  4. examples 示例代码

  5. export 放每个oF项目编译时都需要的,通用的DLL和Lib依赖库。(不是每种操作系统都一定有export目录)

  6. libs OF自身调用的库和OF自身库

  7. other

  8. scripts templates模板和scripts脚本,用于各操作系统下的oF自动化

  9. project generator OF自带的实用工具,创建项目用

FAT包里,除了 OF 提供最基本的五个library (ofBase) 之外,还提供几个常用到的 addons (插件)与 各 addons 的 范例

ofxDirList, ofxOpenCv, ofxThread, ofxVectorMath, ofx3DModelLoader, ofxNetwork, ofxOsc, ofxVectorGraphics, ofxXmlSettings.

examples文件夹

这个文件包含了几乎所有方面的简单例子,想要更深入的了解,还是有必要每个例子都看一下。简单介绍一下

1、3d:这个例子介绍了基本的3D图形学和3D数学函数的使用,包括光照以及各种效果

2、addons:这个文件夹中包含各种各样OF的拓展插件,可以用来帮助OF做更多好玩的东西

3、communication:这个文件夹包含OF通过串口通信和各种外设进行通信。类似Arduino、树莓派等等,大多数通过USB串口通信

4、empty:这个文件夹是一个空项目,是开始学习OF最简单的工程,你可以通过拷贝它来开始你任何的OF项目

5、events:这个文件夹用来演示OP各种内置的事件,比如按键、定时器等,当然也包含一些外部自定义的事件

6、gl:这个文件夹包含了一些比较先进的二维和三维图形学例子,比如 FBO(OpenGL帧缓存对象(FBO:Frame Buffer Object)、VBO 和Shader

7、graphics:这个文件夹演示了基本的二维图形学的功能,比如加载图片、旋转缩放等等

8、gui:这个文件夹将演示如何添加用户图形界面,比如按钮、滑动条、复选框等

9、math:这个文件夹演示了OF处理perlin噪声(Perlin噪声可以用来模拟自然界中的噪声现象。由于它的连续性,如果将二维噪声中的一个轴作为时间轴,得到的就是一个连续变化的一维函数。同样的也可以得到连续变化的二维图像。该噪声可以用来模拟人体的随机运动,蚂蚁行进的线路等)、简单的粒子系统、以及适量数学的相关问题

10、sound:这个文件夹讲解了如何使用OF进行声音的播放、处理以及录制等相关问题

11、video:这个文件夹介绍了OF如何播放视频、处理每一帧视频数据以及从相机中实时抓取视频的操作

虽然这里面的例子,在下面的讲解中大部分我们都会讲解到,但是还是强烈建议你运行一遍。一方面可以感受一下OF的魅力,另一方面也可以看看他是不是真的适合你进行开发。

app文件夹

这个文件是用来存放我们自己开发的工程的,你可以在这个文件夹下创建你自己的文件夹。这里面已经包含了myApps文件夹,你可以把新建的工程放到里面,前期还是建议大家放到这里面,毕竟这个里面的路径、链接库都是处理好的。如果你创建到外面,可能在编译时候会有提示找不到库文件。

当然,这只是对于新手来说的,如果你的编程能力比较强,创建到哪里都没问题。

开发现状

作为一个图形图像方向的研究生,我经常都在和 OpenGL、OpenCV 等多种 C++ 库打交道。这些库遵循着不同的规则和用法;另外,为了让自己的程序具有更多的交互能力,编写界面也是一个家常便饭的工作。

然而,随着工程复杂性的增加,库的管理和界面的维护也变得越来越困难:一方面,库的增加和删除不仅会增加学习成本,也会对系统的逻辑层带来影响。而另一方面,如果要让自己的项目易于维护,就要尽可能地应用设计模式,让逻辑和界面分离。但对于科研,一味陷入设计模式的桎梏又会带来过早优化的问题,影响科研进度。

直到后来,我接触到了 openFrameworks ,简直有种相逢恨晚的感觉。openFrameworks 封装了常用的 C++ 库,在此基础上提供了一个直观统一的接口,也大幅简化了编写界面的流程,使得开发图形程序变得很轻松。

installing & using addons

参考资料

  1. 5 great resources to start with openFrameworks - LinkedIn

  2. Programming Interactivity:一本介绍 openFrameworks、Processing 以及 Arduino 的好书;

  3. 俄国CodeBlock开发oF教程 Creative programming: openFrameworks - installation and example of visualization of music

  4. 死难用的创意编程框架Openframeworks发布了0.10版

  5. openframeworks/ofBook - GitHub:

  6. code examples from the book Mastering openFrameworks- Creative Coding Demystified by Denis Perevalov :firmread/ofDemystified: code examples from the book

  7. 日更第1期-2015-1-15-openFrameworks系列第零讲

  8. Openframeworks学习笔记(一)

  9. Openframeworks学习笔记(一)_新媒体的博客

  10. 准备打造一套多媒体展览展示课程

  11. Code/project management for cross-platform oF project:项目目录组织

  12. OpenFrameworks 使用手冊

  13. About openFrameworks:更多关于 openFrameworks 的资料,包括设计方法;

  14. tutorials:更多 openFrameworks 的教程;

  15. Official Documentation:官方文档;

  16. oF Forum:官方论坛;

  17. ofBook - Experimental Game Development - openFrameworks:[游戏制作]

  18. codekitchensd / 2017-08-17-intro-to-openframeworks

  19. lewislepton / openFrameworksTutorialSeries