源代码:
https://github.com/junkiyoshi/Insta20241106
本作品使用Openframeworks开发,下面是讲解👇
头文件包含:
#include "ofApp.h"
DiffCopyInsert
这行代码引入了
ofApp.h
文件,通常该文件中定义了ofApp
类,这个类是整个应用程序的核心。setup 函数:
void ofApp::setup() {
ofSetFrameRate(25);
ofSetWindowTitle("openFrameworks");
ofBackground(239);
ofSetColor(39);
ofEnableDepthTest();
this->ico_sphere = ofIcoSpherePrimitive(100, 2);
this->noise_param = ofRandom(1000);
}DiffCopyInsert
ofSetFrameRate(25);
:设置每秒帧数为 25 帧。ofSetWindowTitle("openFrameworks");
:设置窗口标题为 "openFrameworks"。ofBackground(239);
:设置背景颜色为 RGB(239, 239, 239)。ofSetColor(39);
:设置默认绘制颜色。ofEnableDepthTest();
:启用深度测试,以确保在 3D 空间中正确绘制物体的前后关系。this->ico_sphere = ofIcoSpherePrimitive(100, 2);
:创建一个边长为 100,细分级别为 2 的球体(球面)。this->noise_param = ofRandom(1000);
:生成一个随机数,用作噪声参数。
update 函数:
void ofApp::update() {
if (ofGetFrameNum() % 50 < 20) {
this->noise_param += ofMap(ofGetFrameNum() % 50, 0, 20, 0.2, 0);
}
}
DiffCopyInsert
该函数用于更新应用程序的状态。它每 50 帧的前 20 帧内,逐渐增加
noise_param
的值。ofGetFrameNum()
:返回当前的帧番号。ofMap()
函数用于将一个值从一个范围线性映射到另一个范围。
draw 函数:
void ofApp::draw() {
ofPushMatrix();
ofTranslate(ofGetWindowWidth() * 0.5, ofGetWindowHeight() * 0.25);
...
ofPopMatrix();
}
DiffCopyInsert
draw
函数是渲染图形的主要地方。在这里它使用ofPushMatrix()
和ofPopMatrix()
来保存和恢复当前的变换矩阵,使得位移(如ofTranslate
)只影响特定的绘制部分。ofTranslate(ofGetWindowWidth() * 0.5, ofGetWindowHeight() * 0.25);
:将坐标系的原点移动到窗口的中心偏上方。
这段代码的整体目的是设置一个 3D 场景,利用噪声来产生动态效果,并在屏幕上绘制一个球体和一些形状。随着帧的增加,噪声参数逐渐变化,影响形状的外观,使得动画看起来更加生动。
如果对这种生成艺术感兴趣,欢迎关注我的Processing课程(学会了无痛过度到Openframeworks)
我们的工作是探索编程和数学在艺术和设计中一切可能性,形式不限,艺术创作,跨界合作,展览展示,品牌活动等等。位于大洋彼岸的洛杉矶,我们的使命是建设和维护全球华人创意编程和算法艺术社群,形式有开展线上教学,举办社群活动,策划举办艺术展览,挖掘发现本地社群里值得被传播的人和事通过自媒体进行传播。
我们建了一个读者群
想进群和其他读者进行精神交流朋友
加联系微信(推送末尾)
联 系 我 们
探索数学与编程在设计与艺术中一切之可能
用运算和美学让你变更酷
主营业务
科学艺术咨询 | 公共艺术 | 未来舞台美术 | 大数据可视化 | 设计人才猎头 | 品牌Event | 教育