Mastering openFrameworks_Appendix A_使用插件

使用插件

插件是针对openFrameworks的一种特殊插件。插件为openFramework项目增加了新的功能,例如使用网络、深度摄像头、计算机视觉等。在本章中,我们将学习插件结构的基本原理,以及如何使用插件:

安装非核心插件

将插件链接到项目

使用项目生成器

选择的插件列表

插件基础

尽管openFrameworks的核心拥有强大的处理和生成各种多媒体数据的能力,但它并不包含所有内容。例如,核心不包含对深度摄像机的支持,使用OpenCV计算机视觉库处理图像,或通过网络发送和接收数据。

为了在您的项目中使用这些功能,您可以链接并使用Internet上可用的任何c++或c外部库。但是,每个库是不同的,所以在你的项目中使用它们有时很容易,有时不容易。幸运的是,openFrameworks有一个友好的机制,可以将库插入到您的项目中。这种机制被称为插件。

通常,addon是一个类,充当库的包装器。此外,这个插件以一种可以链接到项目二进制文件的形式包含库本身。这种关系如下图所示:

这里的术语包装器意味着它允许项目和库以某种方式进行通信。Openframeworks的附加任务是简化这种通信,并以标准化的方式(“openFrameworks的风格”)进行。因此,您不需要了解库接口及其使用方法,只需要学习如何使用插件,这对大多数情况来说就足够了。因此,使用插件大大加快了项目开发。此外,当您需要更深层次的库功能时,您可以直接或通过插件的类成员访问这些库对象和函数,而插件不包含这些功能。

请记住,插件只是一个openFrameworks扩展;它只链接到正在使用它的项目,但不影响其他项目和openFrameworks本身。

有时候,插件不是包装器,而只是一个类,它添加了一些新功能,而没有将任何新库链接到项目。请看以下图片:

在openFrameworks中的插件

每个openFrameworks的插件类名都以ofx开头。这是openFrameworks扩展的首字母缩写。例如,ofxXmlSettings是一个用于在XML文件中写入和读取设置的类。

插件位于openFrameworks的插件文件夹中。插件使用的例子位于openFrameworks的examples/addons文件夹中。

有两类插件。第一类插件称为核心插件,并且使用openFrameworks进行分发。在安装完openFrameworks之后,你可以在addons文件夹中找到这个类的插件。它们是稳定而有用的插件,在许多交互式项目中都是必需的。

第二类插件被称为非核心插件,可以在http://ofxaddons.com下载。既有成熟的插件,也有正在开发中的插件。在安装或表演之前,请仔细测试。

第二类插件被称为非核心插件,可以在http://ofxaddons.com下载。既有成熟的插件,也有正在开发中的插件。在安装或表演之前,请仔细测试。幸运的是,所有插件都有开放代码,您可以随时检查和修改它们。然而,有时插件有二进制.lib或.a文件;很难快速发现和纠正此类插件中的错误,

所以,在使用插件之前,请再次测试它们。

安装非核心插件

要在openFrameworks中安装非核心插件,请执行以下步骤:

1.进入http://ofxaddons.com,找到想要的插件,点击它的名字。

2.插件的页面将被打开。该页面包含插件的说明和下载按钮。目前下载按钮命名为下载ZIP,位于页面的右侧。按下它来下载插件的档案。

3.将其解压到openFrameworks的插件文件夹中。

4.如果包含插件的未打包文件夹的名称与插件的名称不匹配,例如,ofxOpenNI-master.zip,则将该文件夹重命名为插件的名称ofxOpenNI。

5.如果插件的文件夹包含其使用示例,最好将示例移动到examples/addons文件夹。

插件的世界正在迅速发展。新的插件出现并定期重命名。最有用的非核心插件最终成为核心插件。还有一些核心插件迁移到了openFrameworks核心。(然后类名中的ofx前缀变成of)。因此,讨论所有现有的插件没有多大意义,因为明年的列表可能会完全过时。然而,我们将讨论当前的核心和一些非核心插件在列表中选定的插件部分。

注意:使用插件为您的项目添加新功能是非常容易和舒适的。但是有很多库和算法还没有在插件中实现。因此,如果您的项目需要一些功能,而且没有这方面的插件,不要沮丧,并解决没有插件的问题。例如,如果您需要从您的项目中控制一个新设备,那么找到它的SDK、库或其使用示例,并在您的c++项目中直接使用它,而不需要插件。

一旦你成功做到了这一点,你可以把你的代码打包成一个插件,然后按照http://www.ofxaddons.com/howto/的建议发布给openFrameworks的社区。

现在我们将讨论如何将插件链接到您的项目。

将插件链接到一个新项目

所有的核心插件和大多数非核心插件都有它们的使用范例。因此,如果你正在开始一个新项目,并且只需要使用一个特定的插件,最简单的方法就是将包含插件示例的文件夹复制到一个新文件夹中,重命名文件夹,然后根据需要开始修改项目代码。

例如,如果您计划创建一个项目,该项目将使用XML文件存储项目中的设置,那么将文件夹xmlSettingsExample从examples/addons复制到apps/myapps,并将复制的xmlSettingsExample重命名为myProjectXml。最后,打开myProjectXml文件夹中的项目并继续在该文件夹中开发它。项目中包含ofxXmlSettings类,因此您可以使用它。

如果您需要将多个插件链接到新项目,使用项目生成器向导应用程序(包含在openFrameworks中)生成一个带有链接插件的空项目是一个好主意。

使用项目生成器

要使用ProjectGenerator创建新项目,请执行以下步骤:

1.运行ProjectGenerator应用程序。根据您的操作系统,它位于文件夹projectGenerator或apps/projectGenerator中。你会看到它的主屏幕上有一些按钮,如下面的截图所示:

2.点击Name:mySketch按钮,文本输入窗口出现。在这里输入您想要的项目名称,例如myProject1,然后单击OK按钮。

3.如果需要,单击Path:...按钮并为项目选择一个文件夹。

4.现在,单击Addons:按钮。您将看到一个窗口,其中包含当前安装在插件文件夹中的插件列表:

5.在左侧,您将看到核心插件列表,在右侧,您将看到非核心插件列表。请注意,如果您自己还没有安装任何插件,则右边的列表将为空。

6.通过选中相应的复选框来选择项目所需的插件。例如,如果我们想使用OSC协议和xml文件,请选中ofxOSC和ofxXmlSettings框:

7.点击<<返回按钮,您将返回生成器的主屏幕。

8.单击GENERATE PROJECT按钮生成一个新项目。一旦生成,在生成器屏幕的底部,您将看到生成的文本,generated:[path to our project]。

9.现在,项目已经生成,插件已经链接到项目,但是要使用插件,我们应该添加这些头文件的#include指令。因此,下一步是打开生成的项目,并为插件添加相应的#include指令。通常,插件所包含文件的名称与插件的名称完全一致.H后缀。在我们的示例中,我们应该在testApp.h文件中的#include“ofMain.h”行后面添加以下行:

#include "ofxOsc.h"
#include "ofxXmlSettings.h"

10.现在,您可以继续开发和使用所有您链接到这个项目的插件。

关于非核心插件的链接有一个棘手的问题;插件之间存在依赖关系。也就是说,一些插件可能需要其他插件来完成它们的工作。因此,如果您链接这样一个插件,并尝试在没有所需插件的情况下编译该项目,您将得到编译器错误。幸运的是,通过阅读编译器错误消息,您可以发现丢失了哪些插件。例如,一个错误文本,如Cannot open include file:‘ofxSTL.h':No such file or directory 意味着你错过了ofxSTL addon插件。要解决这个问题,您需要安装所有缺少的插件,重新启动ProjectGenerator,选择所有需要的插件,然后再次生成项目。

将一个插件链接到一个现有的项目

如果你正在做这个项目,突然意识到你需要链接一个插件,不要担心。你可以在任何时候执行以下步骤:

1.如果插件尚未安装在插件文件夹中,请按照安装非核心插件部分的说明下载并安装它。

2.将插件的src和lib文件夹中的所有.h、.cpp和.lib或.a文件添加到开发环境的项目中。

3.如果需要,将路径添加到插件文件夹及其所有子文件夹中,添加到项目的设置中。

大多数插件的文件夹中都包含文件install.xml。这个文件描述了关于链接每个平台的插件的确切信息。顺便说一下,ProjectGenerator使用这些信息链接一个插件。您可以阅读这个文件并按照它的信息来链接您自己的插件。

注意,要在openFrameworks的Linux项目中添加插件文件夹的路径,您只需在项目文件夹中的addons.make文件中添加带有插件名称的行。See details at http://www.openframeworks.cc/setup/linux-codeblocks/.

选择的插件列表

在这里,我们将列出一些最有用的插件(由我们的意见选择)。请记住,在多媒体和交互性的各个领域中还有许多很棒的添加功能,所以请搜索并探索它们。

一些核心插件是:

1.ofxXmlSettings:它从XML文件中读取和写入数据。这是非常有用的存储项目设置,如屏幕大小,帧率,数量的相机,和物理常量。

2.ofxGui:它包含许多界面元素,用于在屏幕上创建许多按钮和滑块。

3.ofxOsc:它允许您通过网络发送和接收带有OSC协议消息的短量数据。它是与openFrameworks、Processing、max/msp以及其他软件(如VDMX和TouchOSC)编写的其他应用程序进行通信的一种方式。详见第11章网络。

4.ofxNetwork:它允许你发送和接收TCP协议消息,并且它可以通过网络发送大量的数据,比如图像。详见第11章网络。

5.ofxOpenCv:它是计算机视觉库OpenCV的包装器。详见第9章OpenCV的计算机视觉。

6.ofxKinect:它是微软Kinect深度摄像头的附件。详见第10章,使用深度摄像机。

7.ofxSvg:它从SVG文件格式加载和呈现矢量图形。当您需要绘制基于矢量的图形时,此插件非常有用。

8.ofxVectorGraphics:它使用您的图形创建PS文件。这些是用于高质量打印的矢量文件。

9.ofx3DModelLoader:它以3DS文件格式加载和渲染3D模型。这是在项目中处理静态3D对象的一种简单方法。但是,该插件过于简单,不适合正式使用,因此对于高级的3D模型渲染,您需要其他插件,如ofxAssimpModelLoader。

10.ofxAssimpModelLoader:它加载和渲染3d模型,包括动画模型。

11.ofxThreadedImageLoader:它在一个单独的线程中加载和渲染来自文件或Web的图像,这样你的应用程序在加载图像时就不会暂停。

一些非核心插件如下:

1.ofxOpenNI:它是OpenNI库的封装,可以和深度摄像头一起工作。详见第10章,使用深度摄像机。

2.ofxMarchingCubes:它实现了MarchingCubes算法,用于渲染3D中的等值面。这个插件需要ofxSTL插件才能工作。

3.ofxSyphon:目前这个插件只适用于Macosx。它是虹吸协议的一个包装器,用于在同一台计算机上的应用程序之间交换映像。我们经常通过从openFrameworks项目向VDMX发送屏幕来使用这个插件。

摘要

在本章中,我们学习了什么是插件,如何在openFrameworks中安装它们,以及如何将它们链接到您的项目。最有用的插件列表是

也给出了。

有很多有趣的和有用的插件,所以花点时间安装插件,玩他们的例子,并阅读他们的源代码。通过这种方式,你将获得新项目的想法,开发关于如何改进现有项目的想法,并学习关于图书馆和一般编程技术的新知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白茶等风12138

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值