C++之openFrameworks框架

简介: openFrameworks(简称 oF)是一个基于C++的开源库。它提供了丰富的功能库和工具,用于快速开发多媒体、交互性和艺术创作相关的应用程序,如艺术装置、互动艺术、音视频作品、实时图形等。oF 的设计目标是让创意编程变得更加简单、直观和灵活,使艺术家、设计师、创意工作者等能够利用编程进行创作和表达。oF提供了丰富的图形、音频、输入输出、计算机视觉等功能库,并支持跨平台开发,适用于Windows、Mac OSX、Linux等操作系统。oF的社区活跃,有大量的用户和开发者共享和贡献了各种扩展、插件和示例代码。

openFrameworks 介绍

openFrameworks(简称 oF)是一个基于C++的开源库。

它提供了丰富的功能库和工具,用于快速开发多媒体、交互性和艺术创作相关的应用程序,如艺术装置、互动艺术、音视频作品、实时图形等。oF 的设计目标是让创意编程变得更加简单、直观和灵活,使艺术家、设计师、创意工作者等能够利用编程进行创作和表达。oF提供了丰富的图形、音频、输入输出、计算机视觉等功能库,并支持跨平台开发,适用于Windows、Mac OSX、Linux等操作系统。oF的社区活跃,有大量的用户和开发者共享和贡献了各种扩展、插件和示例代码。

oF被设计成通用的“胶水”,包括以下常用库:

  • 图形:OpenGL、GLEW、GLUT 等
  • 音频输入输出和分析:rtAudio、PortAudio、OpenAL 等
  • 图像加载和保存:FreeImage
  • 计算机视觉:OpenCV
  • 3D模型加载:Assimp

此外,oF还支持跨平台。目前支持Windows、Mac OSX、Linux等IDE

  • Visual Studio、Xcode、Eclipse、Code::Blocks

🔗 官网:openFrameworks

开启 oF 之旅

首先,创建基于 oF 的项目需要一个集成开发环境 (IDE) ,比如 Visual Studio (适用于Windows),Xcode(适用于 Mac OSX),大多数 IDE 都具有类似的用户界面。

Xcode 是苹果公司开发的集成开发环境 (IDE) :

Visual Studio是由微软公司开发的集成开发环境 (IDE) :

在 Visual Studio 中的构建:

项目视图区域:提供一种一致的方式来查看构成项目的各个元素。

提供以下三种视图形式:

  • 类视图(Class view):允许在C++类级别上查看和操作源代码。
  • 资源视图(Resource view):允许查找和编辑应用程序中使用的各种资源,如对话框、图标、菜单等。
  • 文件视图(File view):允许查找并浏览创建应用程序所需的所有文件。

oF 文件结构

从 openFrameworks (oF) 的官网 (download | openFrameworks) 下载并解压缩提供的框架文件,框架文件夹被称为 oF root 文件夹,oF root 文件夹包含以下多个文件夹:

Apps,Examples,libs ,other,projectGenerator,Addons

运行示例:oF 根目录下的 examples 文件夹包含了许多不同的示例项目,先尝试运行示例项目。

  • 对于使用 Xcode 的用户,可以点击以 .xcodeproj 扩展名结尾的文件来运行项目。
  • 对于使用 Visual Studio (VS) 的用户,可以点击以 .sln 扩展名结尾的文件来运行项目。

图形基础

画笔:为了创建各种形状的画笔,首先需要定义图形的基本构建块 (BBB)。 2D 图形函数可以分为两种类别。 基本形状 (Basic Shapes): 如线条、矩形、三角形等。 自由形状 (Freeform Shapes): 如多边形、路径等。

在绘制任何形状之前,需要理解在 oF 中如何确定对象的位置以及如何解释位置。计算机图形学通常使用笛卡尔坐标系,但在 oF 中使用了具有以下两个不同之处的坐标系:

  • 原点 (Origin) 位于左上角
  • Y轴的方向被翻转

创建一个新项目:

创建完新项目后,打开源文件中的 ofAPP.cpp 的 draw() 函数,试试下面的代码:

ofBackground(0); // 用黑色清空屏幕,0 表示完全白色的灰度颜色。
ofSetColor(255); // 将绘制颜色设置为白色。
// 在下面绘制一些图形。
ofDrawRectangle(50, 50, 100, 100); // 左上角坐标为 (50, 50),宽度为 100,高度为 100。
ofDrawCircle(250, 100, 50); // 中心坐标为 (250, 100),半径为 50。
ofDrawEllipse(400, 100, 80, 100); // 中心坐标为 (400, 100),宽度为 80,高度为 100。
ofDrawTriangle(500, 150, 550, 50, 600, 150); // 三个顶点坐标分别为 (500, 150), (550, 50), (600, 150)。
ofDrawLine(700, 50, 700, 150); // 从 (700, 50) 到 (700, 150) 的直线。

🚩 运行结果如下:

下面再试试 ofFill() 和 ofNoFill() 函数:

  • ofFill() 函数用于设置形状的填充颜色,使绘制的形状被填充。
  • ofNoFill() 函数用于设置形状的无填充状态,只绘制轮廓线,不填充颜色。
ofBackground(0);
ofSetColor(255);
ofFill();
ofDrawRectangle(50, 50, 100, 100);
ofDrawCircle(250, 100, 50);
ofDrawEllipse(400, 100, 80, 100);
ofDrawTriangle(500, 150, 550, 50, 600, 150);
ofDrawLine(700, 50, 700, 150);
ofNoFill();
ofDrawRectangle(50, 200, 100, 100);
ofDrawCircle(250, 250, 50);
ofDrawEllipse(400, 250, 80, 100);
ofDrawTriangle(500, 300, 550, 200, 600, 300);
ofDrawLine(700, 200, 700, 300);

Fleeing 三角形笔刷:Vector

ofVec2f mousePos(ofGetMouseX(), ofGetMouseY());
// Define a triangle at the origin (0,0) that points to the right
ofVec2f p1(0, 25.0);
ofVec2f p2(100, 0);
ofVec2f p3(0, -25.0);
// Shift the triangle to the mouse position
p1 += mousePos;
p2 += mousePos;
p3 += mousePos;

Fleeing 三角形笔刷:Vectors 和旋转

使用 projectGenerator 创建项目

在 of_v0.11.2_vs2017_release\projectGenerator 路径下,双击:

然后定义 Project name 项目名称,路径可以不做修改,如果需要,可以在 Addons 中可以添加插件。最后点击 Generate 按钮,即可生成。

此时点击 Open in IDE 即可,IDE 就会弹出:

目录
相关文章
|
JSON Ubuntu 搜索推荐
【Crow】一款开源C++Web框架的安装与构建
【Crow】一款开源C++Web框架的安装与构建
1034 0
|
开发框架 前端开发 Linux
开源项目推荐:C++ Web/Http Server/Rest开发框架(请重点关注Oat++和搜狗workflow)
开源项目推荐:C++ Web/Http Server/Rest开发框架(请重点关注Oat++和搜狗workflow)
3349 0
|
1月前
|
设计模式 编解码 程序员
探索 C++ 20 (co_await、co_yield 和 co_return)协程基本框架的使用
探索 C++ 20 (co_await、co_yield 和 co_return)协程基本框架的使用
80 1
探索 C++ 20 (co_await、co_yield 和 co_return)协程基本框架的使用
|
5月前
|
IDE 开发工具 C++
⚡【C++要笑着学】(40) OF框架:OpenFrameworks 框架介绍 | oF 文件结构 | 图形基础 | 使用 ProjectGenerator 创建项目
⚡【C++要笑着学】(40) OF框架:OpenFrameworks 框架介绍 | oF 文件结构 | 图形基础 | 使用 ProjectGenerator 创建项目
56 0
|
5月前
|
算法 Linux 定位技术
C++游戏后端开发,基于魔兽开源后端框架TrinityCore
C++游戏后端开发,基于魔兽开源后端框架TrinityCore
|
10月前
|
编译器 C语言 C++
C++服务器框架开发9——日志系统LogFormatter_4/各个类的关系梳理/std::function/std::get
C++服务器框架开发9——日志系统LogFormatter_4/各个类的关系梳理/std::function/std::get
|
11月前
|
开发框架 Rust .NET
TechEmpower 21 轮 Web 框架性能评测 -- C# 的性能和 Rust、C++ 并驾齐驱
版权声明:本文为 CSDN 博主「shanyou」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/shanyou/article/details/126081288
1388 1
|
11月前
|
编译器 C语言 C++
c++ 对类与对象的基础框架+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
c++ 对类与对象的基础框架+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
|
11月前
|
编译器 C语言 C++
c++ 对类与对象的基础框架+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
c++ 对类与对象的基础框架+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
|
11月前
|
存储 算法 编译器
【C++】list的使用和基本迭代器框架的实现 & vs和g++下string结构的说明
【C++】list的使用和基本迭代器框架的实现 & vs和g++下string结构的说明