{"id":244265,"date":"2014-11-27T19:03:03","date_gmt":"2014-11-27T15:03:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=244265"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=244265","title":{"rendered":"<span class=\"post_title\">\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c \u0430\u0440\u0442: openFrameworks \u2014 \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0430\u043a\u0442<\/span>"},"content":{"rendered":"<div class=\"content html_format\">     \t<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/6c4\/40b\/1e0\/6c440b1e0ee1438f935943c463a12404.jpg\"\/><\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u0430 C++?<\/p>\n<p>  \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u044d\u0442\u043e \u0432\u0430\u0448\u0430 \u043a\u0430\u0436\u0434\u043e\u0434\u043d\u0435\u0432\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430, \u0430 \u043c\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 (\u0434\u043e \u0432\u0447\u0435\u0440\u0430\u0448\u043d\u0435\u0433\u043e \u0434\u043d\u044f) \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u0421++ \u0431\u044b\u043b \u0432 \u0434\u0430\u043b\u0435\u043a\u043e\u043c 2000 \u0433\u043e\u0434\u0443 \u2014 \u0434\u0438\u043f\u043b\u043e\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u0431\u0430\u0437\u0435 Visual Studio 4.2 (\u0445\u043e\u0440\u043e\u0448\u0430\u044f, \u043a\u0441\u0442\u0430\u0442\u0438, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u044b\u043b\u0430), \u0438 \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u0435\u0440\u0435\u0448\u0451\u043b \u0432 \u0432\u0435\u0431-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u2014 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0435 \u044f\u0437\u044b\u043a\u0438.<\/p>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u2014 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 C++, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u0448\u0430\u043b\u043e \u043c\u043d\u0435 \u0437\u0430 \u043f\u0430\u0440\u0443 \u0447\u0430\u0441\u043e\u0432 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 C++, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043c\u0443\u0437\u044b\u043a\u0443 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u043c\u0438. \u0418 \u0432 \u044d\u0442\u043e\u043c \u043c\u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u0438:   <\/p>\n<ul>\n<li>\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u2014 openFrameworks<\/li>\n<li>\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0435 IDE Code::Blocks<\/li>\n<\/ul>\n<p>  \u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u2014 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u0435, \u043d\u0438\u0436\u0435.<\/p>\n<p>  \u0410 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0451 \u0442\u0430\u043a \u2014 \u043f\u043e\u0441\u043b\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u043c\u0443\u0437\u044b\u043a\u0438 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0430 \u0438\u0437 \u0421\u0430\u043c\u0430\u0440\u044b, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u2014 \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0443\u0437\u044b\u043a\u0438, \u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u043a \u0414\u0435\u043d\u0438\u0441\u0443 \u041f\u0435\u0440\u0435\u0432\u0430\u043b\u043e\u0432\u0443 (\u043a\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u0433\u043e\u0434 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0430\u0440\u0442\/\u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441 \u0441\u0438\u0441\u0442\u0435\u043c) \u2014 \u043e\u043d \u043c\u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0430 \u0431\u0430\u0437\u0435 openFrameworks \u0438 \u0447\u0442\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043a \u0435\u0433\u043e \u043a\u043d\u0438\u0433\u0435 (\u0430 \u043e\u043d \u0430\u0432\u0442\u043e\u0440 \u043a\u043d\u0438\u0433\u0438 \u043f\u043e openFramework), \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. <\/p>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e <i>\u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c<\/i> \u2014 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 \u0421++\u2026 \u041e\u0431 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u2014 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 openFrameworks \u0438 \u0431\u0443\u0434\u0435\u0442 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f.<\/p>\n<p>  <b>openFrameworks<\/b> \u2014 \u044d\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u0430\u0440\u0442, <a href=\"http:\/\/habrahabr.ru\/post\/217565\/\">\u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441\u044b<\/a> \u0438 \u0442.\u043f., \u043e\u043d\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f, \u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0438 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 (linux, mac, win), \u0438 \u0442\u0430\u043a \u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f ARM (\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0434\u043b\u044f RPi), \u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u043b\u044f iPhone \u0438 Android.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438 \u043d\u0430 \u041a\u0414\u041f\u0412 \u2014 \u043e\u0434\u043d\u0430 \u0438\u0437 <a href=\"http:\/\/kuflex.com\/Museum-Guides\">\u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439<\/a> \u043d\u0430 \u0431\u0430\u0437\u0435 openFrameworks (\u0421\u0435\u043c\u044c \u0412\u0438\u0434\u0435\u043e\u0433\u0438\u0434\u043e\u0432. \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0430 \u0412\u0414\u041d\u0425 \u0432 \u044d\u043a\u0441\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u041f\u043e\u043b\u0438\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0443\u0437\u0435\u044f. \u041c\u043e\u0441\u043a\u0432\u0430, 2014).<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0442\u043e \u0436\u0435 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c<\/b><\/p>\n<div class=\"spoiler_text\"><iframe loading=\"lazy\" src=\"\/\/player.vimeo.com\/video\/112923420\" width=\"500\" height=\"281\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen><\/iframe><br \/>  <a href=\"https:\/\/vimeo.com\/112923420\">\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 HD<\/a>.<br \/>  music by: <a href=\"https:\/\/soundcloud.com\/volfworks\">volfworks<\/a>  <\/div>\n<\/div>\n<p>  <a name=\"habracut\"><\/a><br \/>  \u0427\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 openFrameworks? \u042d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u2014 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 Arduino, \u0441 \u043a\u0438\u043d\u0435\u043a\u0442\u043e\u043c, \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0437\u043e\u0432 OpenCV, \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 3\u0434 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043e \u0437\u0432\u0443\u043a\u043e\u043c, \u043a\u0430\u043c\u0435\u0440\u0430\u043c\u0438 \u0438 \u0442.\u043f. \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0430 \u0431\u0430\u0437\u0435 C++.<\/p>\n<p>  \u0412 \u043f\u043e\u043b\u0435 \u043c\u043e\u0435\u0433\u043e \u0437\u0440\u0435\u043d\u0438\u044f openFrameworks \u043f\u043e\u043f\u0430\u043b\u0430, \u043a\u043e\u0433\u0434\u0430 \u044f \u0432\u044b\u0448\u0435\u043b \u043d\u0430 \u0440\u043e\u0431\u043e\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0435\u0451 \u043f\u043e\u043c\u043e\u0449\u044c\u044e.<\/p>\n<p>  \u041f\u043b\u0430\u043d \u0442\u0430\u043a\u043e\u0439:  <\/p>\n<ul>\n<li>1. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 openFrameworks<\/li>\n<li>2. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b openFrameworks \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/li>\n<li>3. \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440<\/li>\n<\/ul>\n<h4><b>1. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 openFrameworks<\/b><\/h4>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438:  <\/p>\n<ul>\n<li>\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 openFrameworks (\u0434\u043b\u044f CodeBlocks)<\/li>\n<li>\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 IDE CodeBlocks<\/li>\n<li>\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a openFrameworks \u0434\u043b\u044f CodeBlocks \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430<\/li>\n<\/ul>\n<h5><b>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 openFrameworks<\/b><\/h5>\n<p>  \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0435 <a href=\"http:\/\/openframeworks.cc\/download\/\">download<\/a> \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0432\u0435\u0440\u0441\u0438\u044e openFrameworks, \u0434\u043b\u044f \u043c\u043e\u0435\u0439 \u041e\u0421 \u0438 \u0434\u043b\u044f IDE \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p>  <img decoding=\"async\" width=\"600\" src=\"\/\/habrastorage.org\/files\/9ae\/f0a\/fa1\/9aef0afa14f749998d86b534d3b9131c.jpg\"\/><\/p>\n<p>  \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 win \u0438 code::blocks: \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0430\u0440\u0445\u0438\u0432 <a href=\"http:\/\/www.openframeworks.cc\/versions\/v0.8.4\/of_v0.8.4_win_cb_release.zip\">of_v0.8.4_win_cb_release.zip<\/a><\/p>\n<p>  \u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c, \u0430\u0440\u0445\u0438\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u043f\u043a\u0438:<br \/>  * addons<br \/>  * apps<br \/>  * docs<br \/>  * examples<br \/>  * export<br \/>  * libs<br \/>  * other<br \/>  * projectGenerator<br \/>  * scripts<\/p>\n<p>  \u042d\u0442\u043e C++ \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 openFrameworks, \u043f\u0440\u0438\u043c\u0435\u0440\u044b, \u0430\u0434\u0434\u043e\u043d\u044b \u0438 \u0442.\u043f.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c openFrameworks \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c IDE \u0441\u0440\u0435\u0434\u0443.<\/p>\n<h5><b>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 IDE CodeBlocks<\/b><\/h5>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 IDE, \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u044b\u0431\u0440\u0430\u0442\u044c code::blocks (visual studio \u0432\u0441\u0451 \u0442\u0430\u043a\u0438 \u0432\u0435\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u0435\u0439\u0447\u0430\u0441)<\/p>\n<p>  <b>CodeBlocks<\/b> \u2014 \u044d\u0442\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f IDE, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0430\u044f \u043d\u0430 \u0431\u0430\u0437\u0435 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0439 GUI \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/www.wxwidgets.org\/\">wxWidgets<\/a>. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 <a href=\"http:\/\/openframeworks.cc\/setup\/codeblocks\/\">openframeworks.cc\/setup\/codeblocks\/<\/a> \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u044e IDE CodeBlocks. \u0412\u0435\u0440\u0441\u0438\u044f Release 12.11 <a href=\"http:\/\/www.codeblocks.org\/downloads\/5\">\u041e\u0442\u0441\u044e\u0434\u0430<\/a>. \u042d\u0442\u0430 \u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u0434\u0451\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 <a href=\"http:\/\/www.mingw.org\/\">MinGW<\/a> \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0441\u0440\u0435\u0434\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434 win \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443.<\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 IDE CodeBlocks<br \/>  <img decoding=\"async\" width=\"600\" src=\"\/\/habrastorage.org\/files\/24f\/a0a\/fdc\/24fa0afdce3e459b99d11f9495d10779.jpg\"\/><\/p>\n<h5><b>\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a openFrameworks \u0434\u043b\u044f CodeBlocks \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430<\/b><\/h5>\n<p>  \u0412\u0430\u0436\u043d\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u2014 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u0437 IDE CodeBlocks, \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c openFrameworks \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 MinGW.<\/p>\n<p>  \u0412\u043e\u0442 <a href=\"http:\/\/openframeworks.cc\/setup\/codeblocks\/#additions\">\u044d\u0442\u043e\u0442 \u043f\u0443\u043d\u043a\u0442<\/a>.<\/p>\n<p>  \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c <a href=\"http:\/\/www.openframeworks.cc\/content\/files\/codeblocks_additions.zip\">Additions for Code::Blocks to work with openFrameworks<\/a> zip \u0430\u0440\u0445\u0438\u0432.<\/p>\n<p>  \u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435, \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 \u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c CodeBlocks, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u044d\u0442\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438:  <\/p>\n<blockquote><p>Add the contents of the folder \u00abadd_to_codeblocks_mingw_include\u00bb into &quot;&#8230;\\CodeBlocks\\MinGW\\include&quot;<br \/>  Add the contents of the folder \u00abadd_to_codeblocks_mingw_lib\u00bb into &quot;&#8230;\\CodeBlocks\\MinGW\\lib&quot;<\/p><\/blockquote>\n<p>  \u0412\u0441\u0451, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0441\u0431\u043e\u0440\u043a\u0435 openFrameworks \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432!<\/p>\n<h4><b>2. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b openFrameworks \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/b><\/h4>\n<p>  <\/p>\n<h5><b>\u0421\u0431\u043e\u0440\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/b><\/h5>\n<p>  \u041e\u0442\u043a\u0440\u043e\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0441\u043e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b IDE CodeBlocks \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u00abOpen an existing project&#8230;\u00bb (\u0438\u043b\u0438 \u0432 File \u2014 Import Project \u2014 Dev-C++ project\u2026 \u2014 \u0438 \u0432\u044b\u0431\u0440\u0430\u0432 \u0442\u0438\u043f \u0444\u0430\u0439\u043b\u043e\u0432 *.*)<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 \u0433\u0434\u0435 \u043c\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 openFrameworks, \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432 examples\/empty\/emptyExample, \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 emptyExample.<\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 IDE \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<br \/>  <img decoding=\"async\" width=\"600\" src=\"\/\/habrastorage.org\/files\/746\/8e7\/d9b\/7468e7d9b2354e9ca1c8cc546693ad84.jpg\"\/><\/p>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u2014 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0441\u0442\u0440\u0435\u043b\u043a\u043e\u0439 \u0438\u043a\u043e\u043d\u043a\u0430 \u0438\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u044c F9 \u2014 RUN.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043e, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0430 (\u043f\u043e\u0441\u043b\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f) \u0438 \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u2014 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0432\u0435\u0440\u043d\u043e, \u0442\u043e \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u043e \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e, \u0438 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u044d\u0442\u043e \u043e\u043a\u043d\u043e:<br \/>  <img decoding=\"async\" width=\"600\" src=\"\/\/habrastorage.org\/files\/adf\/5f6\/544\/adf5f654428e4a029ce52b699d73e0d5.jpg\"\/><\/p>\n<p>  \u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u044e! \u0417\u043d\u0430\u0447\u0438\u0442 \u0432\u0441\u0451 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0432\u0435\u0440\u043d\u043e. \u0418 \u0432 \u043f\u0430\u043f\u043e\u0447\u043a\u0435 bin \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 emptyExample.exe, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e.<\/p>\n<h5><b>\u0424\u0430\u0439\u043b\u044b<\/b><\/h5>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0444\u0430\u0439\u043b\u044b \u043d\u0430\u0448\u0435\u0433\u043e emptyExample \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 src:<br \/>  * main.cpp<br \/>  * ofApp.h<br \/>  * ofApp.cpp<\/p>\n<p>  \u0424\u0430\u0439\u043b <b>main.cpp<\/b>:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>#include &quot;ofMain.h&quot; #include &quot;ofApp.h&quot;  \/\/======================================================================== int main( ){  \tofSetupOpenGL(1024,768, OF_WINDOW);\t\t\t\/\/ &lt;-------- setup the GL context  \t\/\/ this kicks off the running of my app \t\/\/ can be OF_WINDOW or OF_FULLSCREEN \t\/\/ pass in width and height too: \tofRunApp( new ofApp());  } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0412 \u043d\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043a\u043d\u043e \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0438 \u0434\u0430\u043b\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 ofApp.<\/p>\n<p>  \u0424\u0430\u0439\u043b <b>ofApp.h<\/b>:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>#pragma once  #include &quot;ofMain.h&quot;  class ofApp : public ofBaseApp{ \tpublic: \t\tvoid setup(); \t\tvoid update(); \t\tvoid draw(); \t\t \t\tvoid keyPressed(int key); \t\tvoid keyReleased(int key); \t\tvoid mouseMoved(int x, int y); \t\tvoid mouseDragged(int x, int y, int button); \t\tvoid mousePressed(int x, int y, int button); \t\tvoid mouseReleased(int x, int y, int button); \t\tvoid windowResized(int w, int h); \t\tvoid dragEvent(ofDragInfo dragInfo); \t\tvoid gotMessage(ofMessage msg); }; <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 \u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441 ofApp, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442 ofBaseApp. \u0418 \u043c\u0435\u0442\u043e\u0434\u044b.<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f <b>ofApp.cpp<\/b>:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>#include &quot;ofApp.h&quot;  \/\/-------------------------------------------------------------- void ofApp::setup(){  }  \/\/-------------------------------------------------------------- void ofApp::update(){  }  \/\/-------------------------------------------------------------- void ofApp::draw(){  }  \/\/-------------------------------------------------------------- void ofApp::keyPressed(int key){  }  \/\/-------------------------------------------------------------- void ofApp::keyReleased(int key){  }  \/\/-------------------------------------------------------------- void ofApp::mouseMoved(int x, int y){  }  \/\/-------------------------------------------------------------- void ofApp::mouseDragged(int x, int y, int button){  }  \/\/-------------------------------------------------------------- void ofApp::mousePressed(int x, int y, int button){  }  \/\/-------------------------------------------------------------- void ofApp::mouseReleased(int x, int y, int button){  }  \/\/-------------------------------------------------------------- void ofApp::windowResized(int w, int h){  }  \/\/-------------------------------------------------------------- void ofApp::gotMessage(ofMessage msg){  }  \/\/-------------------------------------------------------------- void ofApp::dragEvent(ofDragInfo dragInfo){   }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u2014 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e, \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0443\u0441\u0442\u043e\u0435, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0435 openFrameworks \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<h5><b>\u0426\u0438\u043a\u043b \u0440\u0430\u0431\u043e\u0442\u044b openFrameworks \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/b><\/h5>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f:  <\/p>\n<pre>\t\tvoid setup(); \t\tvoid update(); \t\tvoid draw(); <\/pre>\n<p>  \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043b\u044e\u0431\u043e\u0433\u043e openFrameworks \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/b96\/26f\/d5b\/b9626fd5b6c74c87b4717df4425cd6dc.jpg\"\/><\/p>\n<p>  \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 setup \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438 \u0442.\u043f. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u044d\u0442\u043e update \u0438 draw, \u0433\u0434\u0435 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u2014 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u044b, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c draw \u2014 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435. \u0418 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0446\u0438\u043a\u043b \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0412\u044b\u0445\u043e\u0434 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e Esc.<\/p>\n<h4><b>3. \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440<\/b><\/h4>\n<p>  \u0412\u043e\u0442 \u043c\u044b \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043a \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u2014 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0443\u0437\u044b\u043a\u0438.<\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c <a href=\"http:\/\/masteringof.wordpress.com\/\">\u0441\u0430\u0439\u0442\u0435<\/a> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a \u043a\u043d\u0438\u0433\u0435 \u00abMastering openFrameworks: Creative Coding Demystified\u00bb. \u0421\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 <a href=\"https:\/\/www.packtpub.com\/books\/content\/support\/10348\">\u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043a\u043d\u0438\u0433\u0438<\/a> (\u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438).<\/p>\n<p>  \u0412\u043e\u0442 <a href=\"http:\/\/masteringof.wordpress.com\/examples\/sounds\/\">\u0432\u0438\u0434\u0435\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432<\/a>.<\/p>\n<h5><b>\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 Dancing Cloud<\/b><\/h5>\n<p>  \u0418 \u0432\u043e\u0442 \u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u0432\u0437\u044f\u0442\u044c \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u2014 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f Dancing Cloud (06-Sound\/06-DancingCloud):<br \/>  <iframe loading=\"lazy\" width=\"560\" height=\"349\" src=\"\/\/www.youtube.com\/embed\/JLD-M-QN2S8?wmode=opaque\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>  \u042f \u0441\u043a\u0430\u0447\u0430\u043b \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440, \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043b \u0430\u0440\u0445\u0438\u0432 \u0432 \u043a\u043e\u0440\u043d\u0435 \u043c\u043e\u0435\u0439 openFrameworks \u043f\u0430\u043f\u043a\u0438 \u2014 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u0442.\u043a. \u043f\u0430\u043f\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430 2 \u0443\u0440\u043e\u0432\u043d\u044f \u043d\u0438\u0436\u0435.<\/p>\n<p>  \u0412\u043e\u0442 <b>\u0412\u0415\u0421\u042c<\/b> \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u043f\u0440\u043e\u0435\u043a\u0442\u0430 06-Sound\/06-DancingCloud:<\/p>\n<p>  <b>main.cpp<\/b>:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>#include &quot;testApp.h&quot; #include &quot;ofAppGlutWindow.h&quot;  \/\/-------------------------------------------------------------- int main(){ \tofAppGlutWindow window; \/\/ create a window \t\/\/ set width, height, mode (OF_WINDOW or OF_FULLSCREEN) \tofSetupOpenGL(&window, 1024, 768, OF_WINDOW); \tofRunApp(new testApp()); \/\/ start the app } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <b>testApp.h<\/b>:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>#pragma once  #include &quot;ofMain.h&quot;  \/* This example draws points cloud and plays music track.  Also it analyzes music spectrum and use this data for controlling the radius and shuffle of the cloud.  It's the example 06-DancingCloud from the book  &quot;Mastering openFrameworks: Creative Coding Demystified&quot;, Chapter 6 - Working with Sounds  Music track &quot;surface.wav&quot; by Ilya Orange (soundcloud.com\/ilyaorange)  *\/  class testApp : public ofBaseApp{ public: \tvoid setup(); \tvoid update(); \tvoid draw(); \tvoid mousePressed(int x, int y, int button);  \tofSoundPlayer sound;\t\/\/Sound sample  \tvoid keyPressed(int key); \tvoid keyReleased(int key); \tvoid mouseMoved(int x, int y); \tvoid mouseDragged(int x, int y, int button); \tvoid mouseReleased(int x, int y, int button); \tvoid windowResized(int w, int h); \tvoid dragEvent(ofDragInfo dragInfo); \tvoid gotMessage(ofMessage msg); }; <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <b>testApp.cpp<\/b>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>#include &quot;testApp.h&quot;  const int N = 256;\t\t\/\/Number of bands in spectrum float spectrum[ N ];\t\/\/Smoothed spectrum values float Rad = 500;\t\t\/\/Cloud raduis parameter float Vel = 0.1;\t\t\/\/Cloud points velocity parameter int bandRad = 2;\t\t\/\/Band index in spectrum, affecting Rad value int bandVel = 100;\t\t\/\/Band index in spectrum, affecting Vel value  const int n = 300;\t\t\/\/Number of cloud points\t  \/\/Offsets for Perlin noise calculation for points float tx[n], ty[n];\t\t\t\t ofPoint p[n];\t\t\t\/\/Cloud's points positions  float time0 = 0;\t\t\/\/Time value, used for dt computing  \/\/-------------------------------------------------------------- void testApp::setup(){ \t\/\/Set up sound sample \tsound.loadSound( &quot;surface.wav&quot; );\t \tsound.setLoop( true ); \tsound.play();  \t\/\/Set spectrum values to 0 \tfor (int i=0; i&lt;N; i++) { \t\tspectrum[i] = 0.0f; \t}  \t\/\/Initialize points offsets by random numbers \tfor ( int j=0; j&lt;n; j++ ) { \t\ttx[j] = ofRandom( 0, 1000 );\t \t\tty[j] = ofRandom( 0, 1000 ); \t} }  \/\/-------------------------------------------------------------- void testApp::update(){\t \t\/\/Update sound engine \tofSoundUpdate();\t  \t\/\/Get current spectrum with N bands \tfloat *val = ofSoundGetSpectrum( N ); \t\/\/We should not release memory of val, \t\/\/because it is managed by sound engine  \t\/\/Update our smoothed spectrum, \t\/\/by slowly decreasing its values and getting maximum with val \t\/\/So we will have slowly falling peaks in spectrum \tfor ( int i=0; i&lt;N; i++ ) { \t\tspectrum[i] *= 0.97;\t\/\/Slow decreasing \t\tspectrum[i] = max( spectrum[i], val[i] ); \t}  \t\/\/Update particles using spectrum values  \t\/\/Computing dt as a time between the last \t\/\/and the current calling of update() \t \tfloat time = ofGetElapsedTimef(); \tfloat dt = time - time0; \tdt = ofClamp( dt, 0.0, 0.1 );\t \ttime0 = time; \/\/Store the current time\t  \t\/\/Update Rad and Vel from spectrum \t\/\/Note, the parameters in ofMap's were tuned for best result \t\/\/just for current music track \tRad = ofMap( spectrum[ bandRad ], 1, 3, 400, 800, true ); \tVel = ofMap( spectrum[ bandVel ], 0, 0.1, 0.05, 0.5 );  \t\/\/Update particles positions \tfor (int j=0; j&lt;n; j++) { \t\ttx[j] += Vel * dt;\t\/\/move offset \t\tty[j] += Vel * dt;\t\/\/move offset \t\t\/\/Calculate Perlin's noise in [-1, 1] and \t\t\/\/multiply on Rad \t\tp[j].x = ofSignedNoise( tx[j] ) * Rad;\t\t \t\tp[j].y = ofSignedNoise( ty[j] ) * Rad;\t \t} }  \/\/-------------------------------------------------------------- void testApp::draw(){ \tofBackground( 255, 255, 255 );\t\/\/Set up the background  \t\/\/Draw background rect for spectrum \tofSetColor( 230, 230, 230 ); \tofFill(); \tofRect( 10, 700, N * 6, -100 );  \t\/\/Draw spectrum \tofSetColor( 0, 0, 0 ); \tfor (int i=0; i&lt;N; i++) { \t\t\/\/Draw bandRad and bandVel by black color, \t\t\/\/and other by gray color \t\tif ( i == bandRad || i == bandVel ) { \t\t\tofSetColor( 0, 0, 0 ); \/\/Black color \t\t} \t\telse { \t\t\tofSetColor( 128, 128, 128 ); \/\/Gray color \t\t} \t\tofRect( 10 + i * 5, 700, 3, -spectrum[i] * 100 ); \t}  \t\/\/Draw cloud  \t\/\/Move center of coordinate system to the screen center \tofPushMatrix(); \tofTranslate( ofGetWidth() \/ 2, ofGetHeight() \/ 2 );  \t\/\/Draw points \tofSetColor( 0, 0, 0 ); \tofFill(); \tfor (int i=0; i&lt;n; i++) { \t\tofCircle( p[i], 2 ); \t}  \t\/\/Draw lines between near points \tfloat dist = 40;\t\/\/Threshold parameter of distance \tfor (int j=0; j&lt;n; j++) { \t\tfor (int k=j+1; k&lt;n; k++) { \t\t\tif ( ofDist( p[j].x, p[j].y, p[k].x, p[k].y ) \t\t\t\t&lt; dist ) { \t\t\t\t\tofLine( p[j], p[k] ); \t\t\t} \t\t} \t}  \t\/\/Restore coordinate system \tofPopMatrix(); }  \/\/-------------------------------------------------------------- void testApp::keyPressed(int key){ }  \/\/-------------------------------------------------------------- void testApp::keyReleased(int key){  }  \/\/-------------------------------------------------------------- void testApp::mouseMoved(int x, int y){  }  \/\/-------------------------------------------------------------- void testApp::mouseDragged(int x, int y, int button){  }  \/\/-------------------------------------------------------------- void testApp::mousePressed(int x, int y, int button){  }  \/\/-------------------------------------------------------------- void testApp::mouseReleased(int x, int y, int button){  }  \/\/-------------------------------------------------------------- void testApp::windowResized(int w, int h){  }  \/\/-------------------------------------------------------------- void testApp::gotMessage(ofMessage msg){  }  \/\/-------------------------------------------------------------- void testApp::dragEvent(ofDragInfo dragInfo){   } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e\u0442 \u0414\u0435\u043d\u0438\u0441\u0430 (\u0430\u0432\u0442\u043e\u0440\u0430 \u043a\u043d\u0438\u0433\u0438), \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u0447\u0442\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043c\u0443\u0437\u044b\u043a\u0443:  <\/p>\n<blockquote><p>300 \u0442\u043e\u0447\u0435\u043a (const int n = 300;) \u0434\u0432\u0438\u0436\u0443\u0442\u0441\u044f \u043f\u043e \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u043c \u0448\u0443\u043c\u0430 \u041f\u0435\u0440\u043b\u0438\u043d\u0430, \u043f\u0440\u0438\u0447\u0435\u043c \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0442\u0440\u0435\u0437\u043a\u0430\u043c\u0438.<br \/>  \u0420\u0430\u0434\u0438\u0443\u0441 \u043e\u0431\u043b\u0430\u043a\u0430 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0438\u0437 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0437\u0432\u0443\u043a\u0430.<\/p>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437 \u0437\u0432\u0443\u043a\u0430 \u0442\u0430\u043a\u043e\u0439: \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0437\u0432\u0443\u043a \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043f\u0435\u043a\u0442\u0440 (\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043a\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435). \u0412\u044b\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0435\u043a\u0442\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u043b\u0430\u043a\u0430 \u0442\u043e\u0447\u0435\u043a. \u042d\u0442\u0438 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u043d\u0430 \u0441\u043f\u0435\u043a\u0442\u0440\u0435 \u0447\u0451\u0440\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c.<\/p><\/blockquote>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u043e\u0442 \u043d\u0430\u0448\u0435\u0433\u043e emptyExample.<\/p>\n<p>  main.cpp \u2014 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d \u043f\u043e \u0441\u0443\u0442\u0438.<\/p>\n<p>  \u0412 testApp.h, \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442 sound, \u043a\u043b\u0430\u0441\u0441\u0430 ofSoundPlayer:  <\/p>\n<pre><code>\tofSoundPlayer sound;\t\/\/Sound sample <\/code><\/pre>\n<p>  ofSoundPlayer \u2014 \u044d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0437\u0432\u0443\u043a\u043e\u043c, <a href=\"http:\/\/openframeworks.cc\/documentation\/sound\/ofSoundPlayer.html\">docs<\/a>.<\/p>\n<p>  \u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 testApp.cpp.<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043b\u043e\u0433\u0438\u043a\u0438:  <\/p>\n<pre><code>const int N = 256;\t\t\/\/ \u0427\u0438\u0441\u043b\u043e \u043f\u043e\u043b\u043e\u0441 \u0441\u043f\u0435\u043a\u0442\u0440\u0430 float spectrum[ N ];\t\t\/\/ \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u043f\u0435\u043a\u0442\u0440\u0430 float Rad = 500;\t\t\/\/ \u0440\u0430\u0434\u0438\u0443\u0441 \u043e\u0431\u043b\u0430\u043a\u0430 float Vel = 0.1;\t\t\/\/ \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0442\u043e\u0447\u0435\u043a \u043e\u0431\u043b\u0430\u043a\u0430 int bandRad = 2;\t\t\/\/ \u043f\u043e\u043b\u043e\u0441\u0430 \u0441\u043f\u0435\u043a\u0442\u0440\u0430 \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c Rad \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 int bandVel = 100;\t\t\/\/ \u043f\u043e\u043b\u043e\u0441\u0430 \u0441\u043f\u0435\u043a\u0442\u0440\u0430 \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c Vel \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440  const int n = 300;\t\t\/\/ \u0447\u0438\u0441\u043b\u043e \u0442\u043e\u0447\u0435\u043a \u0432 \u043e\u0431\u043b\u0430\u043a\u0435  \/\/ \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0448\u0443\u043c\u0430 \u041f\u0435\u0440\u043b\u0438\u043d\u0430 float tx[n], ty[n];\t\t\t\t ofPoint p[n];\t\t\t\/\/ \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u043e\u0447\u0435\u043a \u043e\u0431\u043b\u0430\u043a\u0430  float time0 = 0;\t\t\/\/ \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f dt - \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0435\u0436\u0434\u0443 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 testApp::setup() \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0443\u0437\u044b\u043a\u0438, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043f\u0435\u043a\u0442\u0440\u0430, \u0438 \u0442\u043e\u0447\u0435\u043a \u043e\u0431\u043b\u0430\u043a\u0430:  <\/p>\n<pre><code>void testApp::setup(){ \t\/\/Set up sound sample \tsound.loadSound( &quot;surface.wav&quot; );\t \tsound.setLoop( true ); \tsound.play();  \t\/\/Set spectrum values to 0 \tfor (int i=0; i&lt;N; i++) { \t\tspectrum[i] = 0.0f; \t}  \t\/\/Initialize points offsets by random numbers \tfor ( int j=0; j&lt;n; j++ ) { \t\ttx[j] = ofRandom( 0, 1000 );\t \t\tty[j] = ofRandom( 0, 1000 ); \t} } <\/code><\/pre>\n<p>  \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043c\u0443\u0437\u044b\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f, \u0438 \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f, \u043f\u0440\u0438\u0447\u0435\u043c \u0446\u0438\u043a\u043b\u043e\u043c.<\/p>\n<p>  \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 testApp::update() \u2014 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u044f \u00ab\u043c\u0430\u0433\u0438\u044f\u00bb \u043f\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u0443 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u0435\u043a.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>void testApp::update(){\t \t\/\/Update sound engine \tofSoundUpdate();\t  \t\/\/Get current spectrum with N bands \tfloat *val = ofSoundGetSpectrum( N ); \t\/\/We should not release memory of val, \t\/\/because it is managed by sound engine  \t\/\/Update our smoothed spectrum, \t\/\/by slowly decreasing its values and getting maximum with val \t\/\/So we will have slowly falling peaks in spectrum \tfor ( int i=0; i&lt;N; i++ ) { \t\tspectrum[i] *= 0.97;\t\/\/Slow decreasing \t\tspectrum[i] = max( spectrum[i], val[i] ); \t}  \t\/\/Update particles using spectrum values  \t\/\/Computing dt as a time between the last \t\/\/and the current calling of update() \t \tfloat time = ofGetElapsedTimef(); \tfloat dt = time - time0; \tdt = ofClamp( dt, 0.0, 0.1 );\t \ttime0 = time; \/\/Store the current time\t  \t\/\/Update Rad and Vel from spectrum \t\/\/Note, the parameters in ofMap's were tuned for best result \t\/\/just for current music track \tRad = ofMap( spectrum[ bandRad ], 1, 3, 400, 800, true ); \tVel = ofMap( spectrum[ bandVel ], 0, 0.1, 0.05, 0.5 );  \t\/\/Update particles positions \tfor (int j=0; j&lt;n; j++) { \t\ttx[j] += Vel * dt;\t\/\/move offset \t\tty[j] += Vel * dt;\t\/\/move offset \t\t\/\/Calculate Perlin's noise in [-1, 1] and \t\t\/\/multiply on Rad \t\tp[j].x = ofSignedNoise( tx[j] ) * Rad;\t\t \t\tp[j].y = ofSignedNoise( ty[j] ) * Rad;\t \t} } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0412\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f, \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043f\u0435\u043a\u0442\u0440\u0430, \u0442\u043e\u0447\u0435\u043a \u043e\u0431\u043b\u0430\u043a\u0430, \u0438 \u043b\u0438\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0442\u043e\u0447\u043a\u0430\u043c\u0438 (\u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0431\u043b\u0438\u0436\u0435 float dist = 40):  <\/p>\n<pre><code>void testApp::draw(){ \tofBackground( 255, 255, 255 );\t\/\/Set up the background  \t\/\/Draw background rect for spectrum \tofSetColor( 230, 230, 230 ); \tofFill(); \tofRect( 10, 700, N * 6, -100 );  \t\/\/Draw spectrum \tofSetColor( 0, 0, 0 ); \tfor (int i=0; i&lt;N; i++) { \t\t\/\/Draw bandRad and bandVel by black color, \t\t\/\/and other by gray color \t\tif ( i == bandRad || i == bandVel ) { \t\t\tofSetColor( 0, 0, 0 ); \/\/Black color \t\t} \t\telse { \t\t\tofSetColor( 128, 128, 128 ); \/\/Gray color \t\t} \t\tofRect( 10 + i * 5, 700, 3, -spectrum[i] * 100 ); \t}  \t\/\/Draw cloud  \t\/\/Move center of coordinate system to the screen center \tofPushMatrix(); \tofTranslate( ofGetWidth() \/ 2, ofGetHeight() \/ 2 );  \t\/\/Draw points \tofSetColor( 0, 0, 0 ); \tofFill(); \tfor (int i=0; i&lt;n; i++) { \t\tofCircle( p[i], 2 ); \t}  \t\/\/Draw lines between near points \tfloat dist = 40;\t\/\/Threshold parameter of distance \tfor (int j=0; j&lt;n; j++) { \t\tfor (int k=j+1; k&lt;n; k++) { \t\t\tif ( ofDist( p[j].x, p[j].y, p[k].x, p[k].y ) \t\t\t\t&lt; dist ) { \t\t\t\t\tofLine( p[j], p[k] ); \t\t\t} \t\t} \t}  \t\/\/Restore coordinate system \tofPopMatrix(); } <\/code><\/pre>\n<h5><b>\u041c\u043e\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/b><\/h5>\n<p>  \u042f \u0432\u0437\u044f\u043b \u043c\u0443\u0437\u044b\u043a\u0443 volfworks: <a href=\"https:\/\/soundcloud.com\/volfworks\">soundcloud.com\/volfworks<\/a><\/p>\n<p>  \u0410\u0432\u0442\u043e\u0440 \u043b\u044e\u0431\u0435\u0437\u043d\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u043b\u0441\u044f \u043d\u0430 \u043c\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0417\u0432\u0435\u0437\u0434\u0430.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e \u2014 \u044f \u0437\u0430\u043c\u0435\u043d\u0438\u043b wav \u043d\u0430 mp3 \u2014 openFrameworks \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 mp3. \u0422\u0430\u043a \u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043b \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 (\u0438\u043d\u0430\u0447\u0435 \u0432\u0441\u0435 8\u041c\u0431 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u2014 \u0434\u043e\u0431\u0430\u0432\u0438\u043b true \u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c, <a href=\"http:\/\/openframeworks.cc\/documentation\/sound\/ofSoundPlayer.html#!show_loadSound\">docs<\/a>).<\/p>\n<pre><code>sound.loadSound( &quot;zvezda.mp3&quot;, true ); <\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code>stars.loadImage(&quot;stars.jpg&quot;); <\/code><\/pre>\n<p>  \u041f\u043e\u043c\u0435\u043d\u044f\u043b \u0446\u0432\u0435\u0442\u043e\u0432\u0443\u044e \u0433\u0430\u043c\u043c\u0443, \u0441\u0434\u0435\u043b\u0430\u043b \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>  \u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0438\u0437 ofApp::draw():  <\/p>\n<pre><code>\t\/\/ \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438, \u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430 \u043f\u043e\u0432\u0435\u0440\u0445 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \t\/\/ \u0441 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u043e\u0439 bg_transparent \tofEnableAlphaBlending(); \tofSetColor(0, 0, 0, bg_transparent); \tofRect(0, 0, 1000, 700); \tofDisableAlphaBlending();  \t\/\/ \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430, \u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \tofSetHexColor(0x606060); \tofDrawBitmapString(&quot;Music by: volfworks&quot;, 800,610); <\/code><\/pre>\n<p>  \u0412\u0435\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u044b\u043b\u043e\u0436\u0435\u043d \u043d\u0430 github: <a href=\"https:\/\/github.com\/nemilya\/of_volfworks_example\">github.com\/nemilya\/of_volfworks_example<\/a><\/p>\n<h5><b>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e<\/b><\/h5>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0438 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u00abCamtasia Recorder\u00bb.<\/p>\n<h4><b>\u0421\u0441\u044b\u043b\u043a\u0438<\/b><\/h4>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0430\u0439\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: <a href=\"http:\/\/openframeworks.cc\">openframeworks.cc<\/a> \u0442\u0430\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u044b.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 openFrameworks, \u0438\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c, \u0442\u043e \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u044e \u0432 <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/of2ru\">\u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u043f\u043e openFrameworks<\/a>.      \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/244265\/\"> http:\/\/habrahabr.ru\/post\/244265\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">     \t<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/6c4\/40b\/1e0\/6c440b1e0ee1438f935943c463a12404.jpg\"\/><\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u0430 C++?<\/p>\n<p>  \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u044d\u0442\u043e \u0432\u0430\u0448\u0430 \u043a\u0430\u0436\u0434\u043e\u0434\u043d\u0435\u0432\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430, \u0430 \u043c\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 (\u0434\u043e \u0432\u0447\u0435\u0440\u0430\u0448\u043d\u0435\u0433\u043e \u0434\u043d\u044f) \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u0421++ \u0431\u044b\u043b \u0432 \u0434\u0430\u043b\u0435\u043a\u043e\u043c 2000 \u0433\u043e\u0434\u0443 \u2014 \u0434\u0438\u043f\u043b\u043e\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u0431\u0430\u0437\u0435 Visual Studio 4.2 (\u0445\u043e\u0440\u043e\u0448\u0430\u044f, \u043a\u0441\u0442\u0430\u0442\u0438, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u044b\u043b\u0430), \u0438 \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u0435\u0440\u0435\u0448\u0451\u043b \u0432 \u0432\u0435\u0431-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u2014 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0435 \u044f\u0437\u044b\u043a\u0438.<\/p>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u2014 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 C++, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u0448\u0430\u043b\u043e \u043c\u043d\u0435 \u0437\u0430 \u043f\u0430\u0440\u0443 \u0447\u0430\u0441\u043e\u0432 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 C++, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043c\u0443\u0437\u044b\u043a\u0443 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u043c\u0438. \u0418 \u0432 \u044d\u0442\u043e\u043c \u043c\u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u0438:   <\/p>\n<ul>\n<li>\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u2014 openFrameworks<\/li>\n<li>\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0435 IDE Code::Blocks<\/li>\n<\/ul>\n<p>  \u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u2014 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u0435, \u043d\u0438\u0436\u0435.<\/p>\n<p>  \u0410 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0451 \u0442\u0430\u043a \u2014 \u043f\u043e\u0441\u043b\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u043c\u0443\u0437\u044b\u043a\u0438 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0430 \u0438\u0437 \u0421\u0430\u043c\u0430\u0440\u044b, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u2014 \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0443\u0437\u044b\u043a\u0438, \u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u043a \u0414\u0435\u043d\u0438\u0441\u0443 \u041f\u0435\u0440\u0435\u0432\u0430\u043b\u043e\u0432\u0443 (\u043a\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u0433\u043e\u0434 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0430\u0440\u0442\/\u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441 \u0441\u0438\u0441\u0442\u0435\u043c) \u2014 \u043e\u043d \u043c\u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0430 \u0431\u0430\u0437\u0435 openFrameworks \u0438 \u0447\u0442\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043a \u0435\u0433\u043e \u043a\u043d\u0438\u0433\u0435 (\u0430 \u043e\u043d \u0430\u0432\u0442\u043e\u0440 \u043a\u043d\u0438\u0433\u0438 \u043f\u043e openFramework), \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. <\/p>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e <i>\u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c<\/i> \u2014 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 \u0421++\u2026 \u041e\u0431 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u2014 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 openFrameworks \u0438 \u0431\u0443\u0434\u0435\u0442 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f.<\/p>\n<p>  <b>openFrameworks<\/b> \u2014 \u044d\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u0430\u0440\u0442, <a href=\"http:\/\/habrahabr.ru\/post\/217565\/\">\u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441\u044b<\/a> \u0438 \u0442.\u043f., \u043e\u043d\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f, \u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0438 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 (linux, mac, win), \u0438 \u0442\u0430\u043a \u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f ARM (\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0434\u043b\u044f RPi), \u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u043b\u044f iPhone \u0438 Android.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438 \u043d\u0430 \u041a\u0414\u041f\u0412 \u2014 \u043e\u0434\u043d\u0430 \u0438\u0437 <a href=\"http:\/\/kuflex.com\/Museum-Guides\">\u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439<\/a> \u043d\u0430 \u0431\u0430\u0437\u0435 openFrameworks (\u0421\u0435\u043c\u044c \u0412\u0438\u0434\u0435\u043e\u0433\u0438\u0434\u043e\u0432. \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0430 \u0412\u0414\u041d\u0425 \u0432 \u044d\u043a\u0441\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u041f\u043e\u043b\u0438\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0443\u0437\u0435\u044f. \u041c\u043e\u0441\u043a\u0432\u0430, 2014).<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0442\u043e \u0436\u0435 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c<\/b><\/p>\n<div class=\"spoiler_text\"><iframe loading=\"lazy\" src=\"\/\/player.vimeo.com\/video\/112923420\" width=\"500\" height=\"281\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen><\/iframe><br \/>  <a href=\"https:\/\/vimeo.com\/112923420\">\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 HD<\/a>.<br \/>  music by: <a href=\"https:\/\/soundcloud.com\/volfworks\">volfworks<\/a>  <\/div>\n<\/div>\n<p>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-244265","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/244265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=244265"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/244265\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=244265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=244265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=244265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}