cailean
4 months ago
commit
fbc2b295a2
20 changed files with 1503 additions and 0 deletions
@ -0,0 +1,91 @@ |
|||
#.gitignore is a file which makes git ignore files which should |
|||
# not go into version control in the first place |
|||
# Questions? See |
|||
# http://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository#Ignoring-Files |
|||
# http://git-scm.com/docs/gitignore |
|||
|
|||
########################### |
|||
# ignore generated binaries |
|||
# but not the data folder |
|||
########################### |
|||
|
|||
/bin/* |
|||
!/bin/data/ |
|||
|
|||
######### |
|||
# general |
|||
######### |
|||
|
|||
[Bb]uild/ |
|||
[Oo]bj/ |
|||
*.o |
|||
[Dd]ebug*/ |
|||
[Rr]elease*/ |
|||
*.mode* |
|||
*.app/ |
|||
*.pyc |
|||
.svn/ |
|||
*.log |
|||
|
|||
######################## |
|||
# IDE files which should |
|||
# be ignored |
|||
######################## |
|||
|
|||
# XCode |
|||
*.pbxuser |
|||
*.perspective |
|||
*.perspectivev3 |
|||
*.mode1v3 |
|||
*.mode2v3 |
|||
# XCode 4 |
|||
*.xccheckout |
|||
xcuserdata/ |
|||
|
|||
# Visual Studio |
|||
*.sdf |
|||
*.opensdf |
|||
*.suo |
|||
*.pdb |
|||
*.ilk |
|||
*.aps |
|||
ipch/ |
|||
|
|||
# Eclipse |
|||
.metadata |
|||
local.properties |
|||
.externalToolBuilders |
|||
|
|||
# Android Studio |
|||
.gradle |
|||
/local.properties |
|||
/.idea/workspace.xml |
|||
/.idea/libraries |
|||
|
|||
################## |
|||
# operating system |
|||
################## |
|||
|
|||
# Linux |
|||
*~ |
|||
# KDE |
|||
.directory |
|||
.AppleDouble |
|||
|
|||
# OSX |
|||
.DS_Store |
|||
*.swp |
|||
*~.nib |
|||
# Thumbnails |
|||
._* |
|||
|
|||
# Windows |
|||
# Image file caches |
|||
Thumbs.db |
|||
# Folder config file |
|||
Desktop.ini |
|||
|
|||
# Android |
|||
.csettings |
|||
|
|||
/bin/data/ |
@ -0,0 +1,178 @@ |
|||
{ |
|||
"configurations": [ |
|||
{ |
|||
"name": "Mac", |
|||
"includePath": [ |
|||
"/usr/include", |
|||
"/usr/local/include", |
|||
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/", |
|||
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1", |
|||
"${workspaceRoot}/../../../addons/ofxGui", |
|||
"${workspaceRoot}/../../../libs/openFrameworks", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/3d", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/app", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/communication", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/events", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/gl", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/graphics", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/math", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/sound", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/types", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/utils", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/video", |
|||
"${workspaceRoot}/../../../libs/boost/include", |
|||
"${workspaceRoot}/../../../libs/cairo/include", |
|||
"${workspaceRoot}/../../../libs/curl/include", |
|||
"${workspaceRoot}/../../../libs/fmod/include", |
|||
"${workspaceRoot}/../../../libs/FreeImage/include", |
|||
"${workspaceRoot}/../../../libs/freetype/include", |
|||
"${workspaceRoot}/../../../libs/glew/include", |
|||
"${workspaceRoot}/../../../libs/glfw/include", |
|||
"${workspaceRoot}/../../../libs/glm/include", |
|||
"${workspaceRoot}/../../../libs/json/include", |
|||
"${workspaceRoot}/../../../libs/pugixml/include", |
|||
"${workspaceRoot}/../../../libs/rtAudio/include", |
|||
"${workspaceRoot}/../../../libs/tess2/include", |
|||
"${workspaceRoot}/../../../libs/uriparser/include", |
|||
"${workspaceRoot}/../../../libs/utf8/include" |
|||
], |
|||
"browse": { |
|||
"limitSymbolsToIncludedHeaders": true, |
|||
"databaseFilename": "${workspaceRoot}/.vscode/browse.db", |
|||
"path": [ |
|||
"/usr/include", |
|||
"/usr/local/include", |
|||
"/System/Library/Frameworks", |
|||
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/", |
|||
"${workspaceRoot}/../../../libs", |
|||
"${workspaceRoot}/../../../addons", |
|||
"${workspaceRoot}/../../../libs/openFrameworks" |
|||
] |
|||
}, |
|||
"intelliSenseMode": "clang-x64", |
|||
"macFrameworkPath": [ |
|||
"/System/Library/Frameworks", |
|||
"/Library/Frameworks" |
|||
], |
|||
"compilerPath": "/usr/local/bin/gcc-8", |
|||
"cStandard": "c11", |
|||
"cppStandard": "c++17" |
|||
}, |
|||
{ |
|||
"name": "Linux", |
|||
"includePath": [ |
|||
"/usr/include", |
|||
"/usr/local/include", |
|||
"/usr/include/c++/5", |
|||
"/usr/include/c++/5/backward", |
|||
"/usr/lib/gcc/x86_64-linux-gnu/5/include", |
|||
"/usr/lib/x86_64-linux-gnu/glib-2.0/include", |
|||
"/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include", |
|||
"/usr/local/include", |
|||
"/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed", |
|||
"/usr/include/x86_64-linux-gnu", |
|||
"${workspaceRoot}/../../../libs/openFrameworks", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/3d", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/app", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/communication", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/events", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/gl", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/graphics", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/math", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/sound", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/types", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/utils", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/video", |
|||
"${workspaceRoot}/../../../libs/boost/include", |
|||
"${workspaceRoot}/../../../libs/cairo/include", |
|||
"${workspaceRoot}/../../../libs/curl/include", |
|||
"${workspaceRoot}/../../../libs/fmod/include", |
|||
"${workspaceRoot}/../../../libs/FreeImage/include", |
|||
"${workspaceRoot}/../../../libs/freetype/include", |
|||
"${workspaceRoot}/../../../libs/glew/include", |
|||
"${workspaceRoot}/../../../libs/glfw/include", |
|||
"${workspaceRoot}/../../../libs/glm/include", |
|||
"${workspaceRoot}/../../../libs/json/include", |
|||
"${workspaceRoot}/../../../libs/pugixml/include", |
|||
"${workspaceRoot}/../../../libs/rtAudio/include", |
|||
"${workspaceRoot}/../../../libs/tess2/include", |
|||
"${workspaceRoot}/../../../libs/uriparser/include", |
|||
"${workspaceRoot}/../../../libs/utf8/include", |
|||
"${workspaceRoot}/../../../libs/poco/include", |
|||
"${workspaceRoot}/../../../libs/kiss/include", |
|||
"/usr/include/x86_64-linux-gnu/c++/5", |
|||
"/usr/include/pulse", |
|||
"/usr/include/cairo", |
|||
"/usr/include/gstreamer-1.0", |
|||
"/usr/include/glib-2.0", |
|||
"${workspaceRoot}", |
|||
"${workspaceRoot}/../../../addons/ofxGui/src" |
|||
], |
|||
"browse": { |
|||
"limitSymbolsToIncludedHeaders": true, |
|||
"databaseFilename": "", |
|||
"path": [ |
|||
"/usr/include", |
|||
"/usr/local/include", |
|||
"${workspaceRoot}/../../../libs", |
|||
"${workspaceRoot}/../../../addons", |
|||
"${workspaceRoot}/../../../libs/openFrameworks" |
|||
] |
|||
}, |
|||
"intelliSenseMode": "clang-x64", |
|||
"compilerPath": "/usr/local/bin/gcc-8", |
|||
"cStandard": "c11", |
|||
"cppStandard": "c++17" |
|||
}, |
|||
{ |
|||
"name": "Win32", |
|||
"includePath": [ |
|||
"C:/msys64/mingw32/include/c++/7.4.0", |
|||
"C:/msys64/mingw32/i686-w64-mingw32/include", |
|||
"${workspaceRoot}/../../../libs", |
|||
"${workspaceRoot}/../../../addons", |
|||
"${workspaceRoot}/../../../libs/openFrameworks", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/3d", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/app", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/communication", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/events", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/gl", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/graphics", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/math", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/sound", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/types", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/utils", |
|||
"${workspaceRoot}/../../../libs/openFrameworks/video", |
|||
"${workspaceRoot}/../../../libs/boost/include", |
|||
"${workspaceRoot}/../../../libs/cairo/include", |
|||
"${workspaceRoot}/../../../libs/curl/include", |
|||
"${workspaceRoot}/../../../libs/fmod/include", |
|||
"${workspaceRoot}/../../../libs/FreeImage/include", |
|||
"${workspaceRoot}/../../../libs/freetype/include", |
|||
"${workspaceRoot}/../../../libs/glew/include", |
|||
"${workspaceRoot}/../../../libs/glfw/include", |
|||
"${workspaceRoot}/../../../libs/glm/include", |
|||
"${workspaceRoot}/../../../libs/json/include", |
|||
"${workspaceRoot}/../../../libs/pugixml/include", |
|||
"${workspaceRoot}/../../../libs/rtAudio/include", |
|||
"${workspaceRoot}/../../../libs/tess2/include", |
|||
"${workspaceRoot}/../../../libs/uriparser/include", |
|||
"${workspaceRoot}/../../../libs/utf8/include" |
|||
], |
|||
"browse": { |
|||
"limitSymbolsToIncludedHeaders": true, |
|||
"databaseFilename": "", |
|||
"path": [ |
|||
"${workspaceRoot}/../../../libs", |
|||
"${workspaceRoot}/../../../addons", |
|||
"${workspaceRoot}/../../../libs/openFrameworks" |
|||
] |
|||
}, |
|||
"intelliSenseMode": "clang-x64", |
|||
"compilerPath": "C:/msys64/mingw32/bin/g++.exe", |
|||
"cStandard": "c11", |
|||
"cppStandard": "c++17" |
|||
} |
|||
], |
|||
"version": 4 |
|||
} |
@ -0,0 +1,72 @@ |
|||
{ |
|||
"version": "0.2.0", |
|||
"configurations": [ |
|||
{ |
|||
"name": "C++ Launch", |
|||
"type": "cppdbg", |
|||
"request": "launch", |
|||
"args": [], |
|||
"stopAtEntry": false, |
|||
"cwd": "${workspaceRoot}", |
|||
"environment": [], |
|||
"externalConsole": false, |
|||
"linux": { |
|||
"MIMode": "gdb", |
|||
"setupCommands": [ |
|||
{ |
|||
"description": "Enable pretty-printing for gdb", |
|||
"text": "-enable-pretty-printing", |
|||
"ignoreFailures": true |
|||
} |
|||
], |
|||
"program": "${workspaceRoot}/bin/${workspaceFolderBasename}_debug" |
|||
}, |
|||
"osx": { |
|||
"MIMode": "lldb", |
|||
"program": "${workspaceRoot}/bin/${workspaceFolderBasename}_debug.app/Contents/MacOS/${workspaceFolderBasename}_debug" |
|||
}, |
|||
"windows": { |
|||
"MIMode": "gdb", |
|||
"miDebuggerPath": "gdb.exe", |
|||
"setupCommands": [ |
|||
{ |
|||
"description": "Enable pretty-printing for gdb", |
|||
"text": "-enable-pretty-printing", |
|||
"ignoreFailures": true |
|||
} |
|||
], |
|||
"program": "${workspaceRoot}/bin/${workspaceFolderBasename}_debug" |
|||
} |
|||
}, |
|||
{ |
|||
"name": "C++ Attach", |
|||
"type": "cppdbg", |
|||
"request": "attach", |
|||
"program": "enter program name, for example ${workspaceRoot}/a.out", |
|||
"processId": "${command:pickProcess}", |
|||
"linux": { |
|||
"MIMode": "gdb", |
|||
"setupCommands": [ |
|||
{ |
|||
"description": "Enable pretty-printing for gdb", |
|||
"text": "-enable-pretty-printing", |
|||
"ignoreFailures": true |
|||
} |
|||
] |
|||
}, |
|||
"osx": { |
|||
"MIMode": "lldb" |
|||
}, |
|||
"windows": { |
|||
"MIMode": "gdb", |
|||
"setupCommands": [ |
|||
{ |
|||
"description": "Enable pretty-printing for gdb", |
|||
"text": "-enable-pretty-printing", |
|||
"ignoreFailures": true |
|||
} |
|||
] |
|||
} |
|||
} |
|||
] |
|||
} |
@ -0,0 +1,133 @@ |
|||
{ |
|||
"version": "2.0.0", |
|||
"shell":{ |
|||
"task": true |
|||
}, |
|||
"tasks": [ |
|||
{ |
|||
"type": "shell", |
|||
"label": "Build RELEASE", |
|||
"presentation": { |
|||
"reveal": "always", |
|||
"panel": "shared" |
|||
}, |
|||
"command": "make -j -s 2>&1 && make RunRelease", |
|||
"group": { |
|||
"kind": "build", |
|||
"isDefault": true |
|||
}, |
|||
"problemMatcher": { |
|||
"owner": "cpp", |
|||
"fileLocation": ["relative", "${workspaceFolder}"], |
|||
"pattern": { |
|||
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", |
|||
"file": 1, |
|||
"line": 2, |
|||
"column": 3, |
|||
"severity": 4, |
|||
"message": 5 |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
"type": "shell", |
|||
"label": "Build DEBUG", |
|||
"presentation": { |
|||
"reveal": "always", |
|||
"panel": "shared" |
|||
}, |
|||
"command": "make Debug -j -s 2>&1 || exit 1", |
|||
"group": { |
|||
"kind": "build", |
|||
"isDefault": true |
|||
}, |
|||
"problemMatcher": { |
|||
"owner": "cpp", |
|||
"fileLocation": ["relative", "${workspaceFolder}"], |
|||
"pattern": { |
|||
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", |
|||
"file": 1, |
|||
"line": 2, |
|||
"column": 3, |
|||
"severity": 4, |
|||
"message": 5 |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
"type": "shell", |
|||
"label": "Clean DEBUG", |
|||
"presentation": { |
|||
"reveal": "always", |
|||
"panel": "shared" |
|||
}, |
|||
"command": "make CleanDebug", |
|||
"group": { |
|||
"kind": "build", |
|||
"isDefault": true |
|||
}, |
|||
"problemMatcher": { |
|||
"owner": "cpp", |
|||
"fileLocation": ["relative", "${workspaceFolder}"], |
|||
"pattern": { |
|||
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", |
|||
"file": 1, |
|||
"line": 2, |
|||
"column": 3, |
|||
"severity": 4, |
|||
"message": 5 |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
"type": "shell", |
|||
"label": "Clean RELEASE", |
|||
"presentation": { |
|||
"reveal": "always", |
|||
"panel": "shared" |
|||
}, |
|||
"command": "make CleanRelease", |
|||
"group": { |
|||
"kind": "build", |
|||
"isDefault": true |
|||
}, |
|||
"problemMatcher": { |
|||
"owner": "cpp", |
|||
"fileLocation": ["relative", "${workspaceFolder}"], |
|||
"pattern": { |
|||
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", |
|||
"file": 1, |
|||
"line": 2, |
|||
"column": 3, |
|||
"severity": 4, |
|||
"message": 5 |
|||
} |
|||
} |
|||
}, |
|||
{ |
|||
"type": "shell", |
|||
"label": "Clean ALL", |
|||
"presentation": { |
|||
"reveal": "always", |
|||
"panel": "shared" |
|||
}, |
|||
"command": "make clean", |
|||
"group": { |
|||
"kind": "build", |
|||
"isDefault": true |
|||
}, |
|||
"problemMatcher": { |
|||
"owner": "cpp", |
|||
"fileLocation": ["relative", "${workspaceFolder}"], |
|||
"pattern": { |
|||
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", |
|||
"file": 1, |
|||
"line": 2, |
|||
"column": 3, |
|||
"severity": 4, |
|||
"message": 5 |
|||
} |
|||
} |
|||
} |
|||
] |
|||
} |
@ -0,0 +1,101 @@ |
|||
{ |
|||
"folders": [ |
|||
{ |
|||
"path": "." |
|||
}, |
|||
{ |
|||
"path": "${workspaceRoot}/../../../../libs/openFrameworks" |
|||
}, |
|||
{ |
|||
"path": "${workspaceRoot}/../../../../addons" |
|||
} |
|||
], |
|||
"settings": { |
|||
"files.associations": { |
|||
"ostream": "cpp", |
|||
"cctype": "cpp", |
|||
"clocale": "cpp", |
|||
"cmath": "cpp", |
|||
"csignal": "cpp", |
|||
"cstdarg": "cpp", |
|||
"cstddef": "cpp", |
|||
"cstdio": "cpp", |
|||
"cstdlib": "cpp", |
|||
"cstring": "cpp", |
|||
"ctime": "cpp", |
|||
"cwchar": "cpp", |
|||
"cwctype": "cpp", |
|||
"any": "cpp", |
|||
"array": "cpp", |
|||
"atomic": "cpp", |
|||
"strstream": "cpp", |
|||
"bit": "cpp", |
|||
"*.tcc": "cpp", |
|||
"bitset": "cpp", |
|||
"cfenv": "cpp", |
|||
"charconv": "cpp", |
|||
"chrono": "cpp", |
|||
"codecvt": "cpp", |
|||
"compare": "cpp", |
|||
"complex": "cpp", |
|||
"concepts": "cpp", |
|||
"condition_variable": "cpp", |
|||
"cstdint": "cpp", |
|||
"deque": "cpp", |
|||
"forward_list": "cpp", |
|||
"list": "cpp", |
|||
"map": "cpp", |
|||
"set": "cpp", |
|||
"string": "cpp", |
|||
"unordered_map": "cpp", |
|||
"unordered_set": "cpp", |
|||
"vector": "cpp", |
|||
"exception": "cpp", |
|||
"expected": "cpp", |
|||
"algorithm": "cpp", |
|||
"functional": "cpp", |
|||
"iterator": "cpp", |
|||
"memory": "cpp", |
|||
"memory_resource": "cpp", |
|||
"numeric": "cpp", |
|||
"optional": "cpp", |
|||
"random": "cpp", |
|||
"ratio": "cpp", |
|||
"regex": "cpp", |
|||
"source_location": "cpp", |
|||
"string_view": "cpp", |
|||
"system_error": "cpp", |
|||
"tuple": "cpp", |
|||
"type_traits": "cpp", |
|||
"utility": "cpp", |
|||
"fstream": "cpp", |
|||
"future": "cpp", |
|||
"initializer_list": "cpp", |
|||
"iomanip": "cpp", |
|||
"iosfwd": "cpp", |
|||
"iostream": "cpp", |
|||
"istream": "cpp", |
|||
"limits": "cpp", |
|||
"mutex": "cpp", |
|||
"new": "cpp", |
|||
"numbers": "cpp", |
|||
"ranges": "cpp", |
|||
"semaphore": "cpp", |
|||
"shared_mutex": "cpp", |
|||
"span": "cpp", |
|||
"sstream": "cpp", |
|||
"stdexcept": "cpp", |
|||
"stop_token": "cpp", |
|||
"streambuf": "cpp", |
|||
"thread": "cpp", |
|||
"cinttypes": "cpp", |
|||
"typeindex": "cpp", |
|||
"typeinfo": "cpp", |
|||
"valarray": "cpp", |
|||
"variant": "cpp", |
|||
"format": "cpp", |
|||
"stdfloat": "cpp", |
|||
"__nullptr": "cpp" |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,71 @@ |
|||
import qbs |
|||
import qbs.Process |
|||
import qbs.File |
|||
import qbs.FileInfo |
|||
import qbs.TextFile |
|||
import "../../../libs/openFrameworksCompiled/project/qtcreator/ofApp.qbs" as ofApp |
|||
|
|||
Project{ |
|||
property string of_root: "../../.." |
|||
|
|||
ofApp { |
|||
name: { return FileInfo.baseName(sourceDirectory) } |
|||
|
|||
files: [ |
|||
'src/Player.cpp', |
|||
'src/Player.h', |
|||
'src/main.cpp', |
|||
'src/ofApp.cpp', |
|||
'src/ofApp.h', |
|||
] |
|||
|
|||
of.addons: [ |
|||
'ofxGui', |
|||
'ofxGui', |
|||
] |
|||
|
|||
// additional flags for the project. the of module sets some |
|||
// flags by default to add the core libraries, search paths... |
|||
// this flags can be augmented through the following properties: |
|||
of.pkgConfigs: [] // list of additional system pkgs to include |
|||
of.includePaths: [] // include search paths |
|||
of.cFlags: [] // flags passed to the c compiler |
|||
of.cxxFlags: [] // flags passed to the c++ compiler |
|||
of.linkerFlags: [] // flags passed to the linker |
|||
of.defines: [] // defines are passed as -D to the compiler |
|||
// and can be checked with #ifdef or #if in the code |
|||
of.frameworks: [] // osx only, additional frameworks to link with the project |
|||
of.staticLibraries: [] // static libraries |
|||
of.dynamicLibraries: [] // dynamic libraries |
|||
|
|||
// other flags can be set through the cpp module: http://doc.qt.io/qbs/cpp-module.html |
|||
// eg: this will enable ccache when compiling |
|||
// |
|||
// cpp.compilerWrapper: 'ccache' |
|||
|
|||
Depends{ |
|||
name: "cpp" |
|||
} |
|||
|
|||
// common rules that parse the include search paths, core libraries... |
|||
Depends{ |
|||
name: "of" |
|||
} |
|||
|
|||
// dependency with the OF library |
|||
Depends{ |
|||
name: "openFrameworks" |
|||
} |
|||
} |
|||
|
|||
property bool makeOF: true // use makfiles to compile the OF library |
|||
// will compile OF only once for all your projects |
|||
// otherwise compiled per project with qbs |
|||
|
|||
|
|||
property bool precompileOfMain: false // precompile ofMain.h |
|||
// faster to recompile when including ofMain.h |
|||
// but might use a lot of space per project |
|||
|
|||
references: [FileInfo.joinPaths(of_root, "/libs/openFrameworksCompiled/project/qtcreator/openFrameworks.qbs")] |
|||
} |
@ -0,0 +1,13 @@ |
|||
# Attempt to load a config.make file.
|
|||
# If none is found, project defaults in config.project.make will be used.
|
|||
ifneq ($(wildcard config.make),) |
|||
include config.make |
|||
endif |
|||
|
|||
# make sure the the OF_ROOT location is defined
|
|||
ifndef OF_ROOT |
|||
OF_ROOT=$(realpath ../../..) |
|||
endif |
|||
|
|||
# call the project makefile!
|
|||
include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk |
@ -0,0 +1,2 @@ |
|||
ofxGui |
|||
ofxGui |
@ -0,0 +1,142 @@ |
|||
################################################################################ |
|||
# CONFIGURE PROJECT MAKEFILE (optional) |
|||
# This file is where we make project specific configurations. |
|||
################################################################################ |
|||
|
|||
################################################################################ |
|||
# OF ROOT |
|||
# The location of your root openFrameworks installation |
|||
# (default) OF_ROOT = ../../.. |
|||
################################################################################ |
|||
OF_ROOT = ../../.. |
|||
|
|||
################################################################################ |
|||
# PROJECT ROOT |
|||
# The location of the project - a starting place for searching for files |
|||
# (default) PROJECT_ROOT = . (this directory) |
|||
# |
|||
################################################################################ |
|||
# PROJECT_ROOT = . |
|||
|
|||
################################################################################ |
|||
# PROJECT SPECIFIC CHECKS |
|||
# This is a project defined section to create internal makefile flags to |
|||
# conditionally enable or disable the addition of various features within |
|||
# this makefile. For instance, if you want to make changes based on whether |
|||
# GTK is installed, one might test that here and create a variable to check. |
|||
################################################################################ |
|||
# None |
|||
|
|||
################################################################################ |
|||
# PROJECT EXTERNAL SOURCE PATHS |
|||
# These are fully qualified paths that are not within the PROJECT_ROOT folder. |
|||
# Like source folders in the PROJECT_ROOT, these paths are subject to |
|||
# exlclusion via the PROJECT_EXLCUSIONS list. |
|||
# |
|||
# (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) |
|||
# |
|||
# Note: Leave a leading space when adding list items with the += operator |
|||
################################################################################ |
|||
# PROJECT_EXTERNAL_SOURCE_PATHS = |
|||
|
|||
################################################################################ |
|||
# PROJECT EXCLUSIONS |
|||
# These makefiles assume that all folders in your current project directory |
|||
# and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations |
|||
# to look for source code. The any folders or files that match any of the |
|||
# items in the PROJECT_EXCLUSIONS list below will be ignored. |
|||
# |
|||
# Each item in the PROJECT_EXCLUSIONS list will be treated as a complete |
|||
# string unless teh user adds a wildcard (%) operator to match subdirectories. |
|||
# GNU make only allows one wildcard for matching. The second wildcard (%) is |
|||
# treated literally. |
|||
# |
|||
# (default) PROJECT_EXCLUSIONS = (blank) |
|||
# |
|||
# Will automatically exclude the following: |
|||
# |
|||
# $(PROJECT_ROOT)/bin% |
|||
# $(PROJECT_ROOT)/obj% |
|||
# $(PROJECT_ROOT)/%.xcodeproj |
|||
# |
|||
# Note: Leave a leading space when adding list items with the += operator |
|||
################################################################################ |
|||
# PROJECT_EXCLUSIONS = |
|||
|
|||
################################################################################ |
|||
# PROJECT LINKER FLAGS |
|||
# These flags will be sent to the linker when compiling the executable. |
|||
# |
|||
# (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs |
|||
# |
|||
# Note: Leave a leading space when adding list items with the += operator |
|||
################################################################################ |
|||
|
|||
# Currently, shared libraries that are needed are copied to the |
|||
# $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to |
|||
# add a runtime path to search for those shared libraries, since they aren't |
|||
# incorporated directly into the final executable application binary. |
|||
# TODO: should this be a default setting? |
|||
# PROJECT_LDFLAGS=-Wl,-rpath=./libs |
|||
|
|||
################################################################################ |
|||
# PROJECT DEFINES |
|||
# Create a space-delimited list of DEFINES. The list will be converted into |
|||
# CFLAGS with the "-D" flag later in the makefile. |
|||
# |
|||
# (default) PROJECT_DEFINES = (blank) |
|||
# |
|||
# Note: Leave a leading space when adding list items with the += operator |
|||
################################################################################ |
|||
# PROJECT_DEFINES = |
|||
|
|||
################################################################################ |
|||
# PROJECT CFLAGS |
|||
# This is a list of fully qualified CFLAGS required when compiling for this |
|||
# project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS |
|||
# defined in your platform specific core configuration files. These flags are |
|||
# presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. |
|||
# |
|||
# (default) PROJECT_CFLAGS = (blank) |
|||
# |
|||
# Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in |
|||
# your platform specific configuration file will be applied by default and |
|||
# further flags here may not be needed. |
|||
# |
|||
# Note: Leave a leading space when adding list items with the += operator |
|||
################################################################################ |
|||
# PROJECT_CFLAGS = |
|||
|
|||
################################################################################ |
|||
# PROJECT OPTIMIZATION CFLAGS |
|||
# These are lists of CFLAGS that are target-specific. While any flags could |
|||
# be conditionally added, they are usually limited to optimization flags. |
|||
# These flags are added BEFORE the PROJECT_CFLAGS. |
|||
# |
|||
# PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets. |
|||
# |
|||
# (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank) |
|||
# |
|||
# PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets. |
|||
# |
|||
# (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank) |
|||
# |
|||
# Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the |
|||
# PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration |
|||
# file will be applied by default and further optimization flags here may not |
|||
# be needed. |
|||
# |
|||
# Note: Leave a leading space when adding list items with the += operator |
|||
################################################################################ |
|||
# PROJECT_OPTIMIZATION_CFLAGS_RELEASE = |
|||
# PROJECT_OPTIMIZATION_CFLAGS_DEBUG = |
|||
|
|||
################################################################################ |
|||
# PROJECT COMPILERS |
|||
# Custom compilers can be set for CC and CXX |
|||
# (default) PROJECT_CXX = (blank) |
|||
# (default) PROJECT_CC = (blank) |
|||
# Note: Leave a leading space when adding list items with the += operator |
|||
################################################################################ |
|||
# PROJECT_CXX = |
|||
# PROJECT_CC = |
@ -0,0 +1,66 @@ |
|||
#include "ImageViewer.h" |
|||
|
|||
ImageViewer::ImageViewer(){ |
|||
|
|||
} |
|||
|
|||
void ImageViewer::setup(){ |
|||
fbo.allocate(ofGetWindowWidth() / 2, ofGetWindowHeight() / 2, GL_RGBA); |
|||
} |
|||
|
|||
void ImageViewer::update(string imagePath){ |
|||
currentImage = imagePath; |
|||
if (currentImage != lastImage){ |
|||
setImage(currentImage); |
|||
lastImage = currentImage; |
|||
} |
|||
} |
|||
|
|||
void ImageViewer::draw(){ |
|||
if(displayImage.isAllocated()) |
|||
calcImageScalePos(); |
|||
} |
|||
|
|||
void ImageViewer::setImage(std::string imagePath){ |
|||
if(displayImage.isAllocated()) |
|||
displayImage.clear(); |
|||
displayImage.load("images/rte-archive-football/" + imagePath); |
|||
} |
|||
|
|||
void ImageViewer::calcImageScalePos(){ |
|||
// Get the window dimensions
|
|||
int windowWidth = ofGetWidth(); |
|||
int windowHeight = ofGetHeight(); |
|||
|
|||
// Calculate the target width and height for the bottom left quadrant
|
|||
int targetWidth = windowWidth / 3; |
|||
int targetHeight = windowHeight / 3; |
|||
|
|||
// Calculate scaling factors to cover the entire quadrant
|
|||
float scaleX = (float)targetWidth / (float)displayImage.getWidth(); |
|||
float scaleY = (float)targetHeight / (float)displayImage.getHeight(); |
|||
|
|||
// Choose the larger scale factor to ensure the image covers the quadrant
|
|||
float scale = std::max(scaleX, scaleY); |
|||
|
|||
// Calculate the scaled width and height of the image
|
|||
int scaledWidth = displayImage.getWidth() * scale; |
|||
int scaledHeight = displayImage.getHeight() * scale; |
|||
|
|||
// Calculate the position offsets to center the image in the quadrant
|
|||
int offsetX = (scaledWidth - targetWidth) / 2; |
|||
int offsetY = (scaledHeight - targetHeight) / 2; |
|||
|
|||
// Begin drawing into the FBO
|
|||
fbo.begin(); |
|||
ofClear(0, 0, 0, 0); // Clear the FBO with a transparent color
|
|||
|
|||
// Draw the image, scaled and centered, into the FBO
|
|||
displayImage.draw(-offsetX, -offsetY, scaledWidth, scaledHeight); |
|||
|
|||
// End drawing into the FBO
|
|||
fbo.end(); |
|||
|
|||
// Draw the FBO onto the screen at the bottom-left quadrant
|
|||
fbo.draw(0, 2 * windowHeight / 3); |
|||
} |
@ -0,0 +1,27 @@ |
|||
#ifndef _IMAGEVIEWER |
|||
#define _IMAGEVIEWER |
|||
|
|||
#include "ofMain.h" |
|||
|
|||
class ImageViewer { |
|||
|
|||
public: |
|||
|
|||
void setup(); |
|||
void update(string imagePath); |
|||
void draw(); |
|||
|
|||
void setImage(std::string imageName); |
|||
void calcImageScalePos(); |
|||
|
|||
ofImage displayImage; |
|||
ofFbo fbo; |
|||
|
|||
string currentImage; |
|||
string lastImage; |
|||
|
|||
ImageViewer(); |
|||
|
|||
}; |
|||
|
|||
#endif |
@ -0,0 +1,152 @@ |
|||
#include "Player.h" |
|||
|
|||
Player::Player(){ |
|||
hasVideo = false; |
|||
playerVideoIndex = 0; |
|||
req.setup("192.168.0.54", 2000, "search"); |
|||
|
|||
resp.filename = "fingers.mp4"; |
|||
resp.frame = 50; |
|||
resp.index = 0; |
|||
} |
|||
|
|||
void Player::setup(){ |
|||
videoPlayer.setLoopState(OF_LOOP_NONE); |
|||
setupGUI(); |
|||
|
|||
int windowW = ofGetWindowWidth(); |
|||
int windowH = ofGetWindowHeight(); |
|||
|
|||
fbo.allocate(windowW * 2 / 3, windowH, GL_RGBA); |
|||
} |
|||
|
|||
void Player::update(){ |
|||
if(videoPlayer.isLoaded()) |
|||
hasVideo = true; |
|||
updateGUI(); |
|||
videoPlayer.update(); |
|||
playerCurrentFrame = videoPlayer.getCurrentFrame(); |
|||
} |
|||
|
|||
void Player::draw(){ |
|||
if(videoPlayer.isLoaded()){ |
|||
// Begin drawing into the FBO
|
|||
fbo.begin(); |
|||
ofClear(0, 0, 0, 0); // Clear the FBO with a transparent color
|
|||
|
|||
// Draw the video, scaled and centered, into the FBO
|
|||
videoPlayer.draw(centerPosition.x, centerPosition.y, videoPlayer.getWidth() * std::max(fbo.getWidth() / videoPlayer.getWidth(), fbo.getHeight() / videoPlayer.getHeight()), videoPlayer.getHeight() * std::max(fbo.getWidth() / videoPlayer.getWidth(), fbo.getHeight() / videoPlayer.getHeight())); |
|||
|
|||
// End drawing into the FBO
|
|||
fbo.end(); |
|||
|
|||
// Draw the FBO onto the screen, at 1/3 from the left (i.e., right 2/3 of the screen)
|
|||
fbo.draw(ofGetWidth() / 3, 0); |
|||
} |
|||
|
|||
gui.draw(); |
|||
} |
|||
|
|||
void Player::setVideo(VPQuery query){ |
|||
videoPath = query.filename; |
|||
videoPlayer.load("movies/" + videoPath); |
|||
|
|||
videoPlayer.setFrame(query.frame); |
|||
setVideoPosition(); |
|||
|
|||
currentVideoLabel = query.filename; |
|||
currentIndexLabel = ofToString(query.index); |
|||
|
|||
videoPlayer.play(); |
|||
} |
|||
|
|||
void Player::setVideoPosition(){ |
|||
int playerW = videoPlayer.getWidth(); |
|||
int playerH = videoPlayer.getHeight(); |
|||
|
|||
// Calculate the scaling to fit the 2/3 width and full height area
|
|||
float targetWidth = fbo.getWidth(); |
|||
float targetHeight = fbo.getHeight(); |
|||
|
|||
float scaleX = targetWidth / playerW; |
|||
float scaleY = targetHeight / playerH; |
|||
|
|||
// Use the larger scaling factor to ensure coverage
|
|||
float scale = std::max(scaleX, scaleY); |
|||
|
|||
// Calculate scaled dimensions
|
|||
int scaledWidth = playerW * scale; |
|||
int scaledHeight = playerH * scale; |
|||
|
|||
// Center the video within the FBO
|
|||
centerPosition = glm::vec2((targetWidth - scaledWidth) / 2, (targetHeight - scaledHeight) / 2); |
|||
} |
|||
|
|||
void Player::setRandomFrame(){ |
|||
int randomFrame = ofRandom(0, videoPlayer.getTotalNumFrames()); |
|||
videoPlayer.setFrame(randomFrame); |
|||
} |
|||
|
|||
|
|||
string Player::getFrameName(){ |
|||
string imagePath = resp.imagePath; |
|||
return imagePath; |
|||
} |
|||
|
|||
void Player::setupGUI(){ |
|||
gui.setup("Embeddings"); |
|||
|
|||
|
|||
gui.setSize(300, 500); |
|||
|
|||
gui.add(angrySlider.setup("Angry", 0.0, 0.0, 1.0)); |
|||
gui.add(disgustSlider.setup("Disgust", 0.0, 0.0, 1.0)); |
|||
gui.add(fearSlider.setup("Fear", 0.0, 0.0, 1.0)); |
|||
gui.add(happySlider.setup("Happy", 0.0, 0.0, 1.0)); |
|||
gui.add(sadSlider.setup("Sad", 0.0, 0.0, 1.0)); |
|||
gui.add(surpriseSlider.setup("Surprise", 0.0, 0.0, 1.0)); |
|||
gui.add(neutralSlider.setup("Neutral", 0.0, 0.0, 1.0)); |
|||
|
|||
gui.add(currentFrameLabel.setup("Current Frame", ofToString(playerCurrentFrame))); |
|||
gui.add(currentVideoLabel.setup("Video Name", videoPath)); |
|||
gui.add(currentIndexLabel.setup("Index", ofToString(playerVideoIndex))); |
|||
|
|||
currentVector.angry = angrySlider; |
|||
currentVector.disgust = disgustSlider; |
|||
currentVector.fear = fearSlider; |
|||
currentVector.happy = happySlider; |
|||
currentVector.neutral = neutralSlider; |
|||
currentVector.sad = sadSlider; |
|||
currentVector.surprise = surpriseSlider; |
|||
|
|||
lastVector = currentVector; |
|||
|
|||
float guiWidth = gui.getWidth(); |
|||
|
|||
gui.setPosition(ofGetWindowWidth() - guiWidth, 0); |
|||
} |
|||
|
|||
|
|||
// Updates GUI with new values, and if it is different, send a POST query
|
|||
|
|||
void Player::updateGUI(){ |
|||
currentVector.angry = angrySlider; |
|||
currentVector.disgust = disgustSlider; |
|||
currentVector.fear = fearSlider; |
|||
currentVector.happy = happySlider; |
|||
currentVector.neutral = neutralSlider; |
|||
currentVector.sad = sadSlider; |
|||
currentVector.surprise = surpriseSlider; |
|||
|
|||
if(currentVector != lastVector){ |
|||
// Send a request
|
|||
resp = req.query(currentVector); |
|||
if(resp.frame != lastResp.frame){ |
|||
setVideo(resp); |
|||
lastResp = resp; |
|||
} |
|||
lastVector = currentVector; |
|||
} |
|||
|
|||
currentFrameLabel = ofToString(playerCurrentFrame); |
|||
} |
@ -0,0 +1,62 @@ |
|||
#ifndef _PLAYER |
|||
#define _PLAYER |
|||
|
|||
#include "ofMain.h" |
|||
#include "ofxGui.h" |
|||
#include "Request.h" |
|||
|
|||
class Player { |
|||
|
|||
public: |
|||
|
|||
void setup(); |
|||
void update(); |
|||
void draw(); |
|||
void setVideo(VPQuery query); |
|||
void setVideoPosition(); |
|||
void setRandomFrame(); |
|||
void setupGUI(); |
|||
void updateGUI(); |
|||
void updateVector(); |
|||
void checkNewFrame(); |
|||
string getFrameName(); |
|||
|
|||
ofVideoPlayer videoPlayer; |
|||
|
|||
int playerCurrentFrame; |
|||
int playerTotalFrameNum; |
|||
int playerVideoIndex; |
|||
std::string videoPath; |
|||
bool hasVideo; |
|||
|
|||
glm::vec2 centerPosition; |
|||
|
|||
ofxPanel gui; |
|||
|
|||
ofxFloatSlider angrySlider; |
|||
ofxFloatSlider disgustSlider; |
|||
ofxFloatSlider fearSlider; |
|||
ofxFloatSlider happySlider; |
|||
ofxFloatSlider sadSlider; |
|||
ofxFloatSlider surpriseSlider; |
|||
ofxFloatSlider neutralSlider; |
|||
|
|||
ofxLabel currentFrameLabel; |
|||
ofxLabel currentVideoLabel; |
|||
ofxLabel currentIndexLabel; |
|||
|
|||
Vector7D currentVector; |
|||
Vector7D lastVector; |
|||
|
|||
Request req; |
|||
|
|||
VPQuery resp; |
|||
VPQuery lastResp; |
|||
|
|||
ofFbo fbo; |
|||
|
|||
Player(); |
|||
|
|||
}; |
|||
|
|||
#endif |
@ -0,0 +1,33 @@ |
|||
#include "Request.h" |
|||
|
|||
Request::Request(){ |
|||
|
|||
} |
|||
|
|||
void Request::setup(std::string ip, int port, std::string page){ |
|||
request.method = ofHttpRequest::POST; |
|||
request.url = "http://" + ip + ":" + ofToString(port) + "/" + page; |
|||
request.headers["Content-Type"] = "application/json"; |
|||
} |
|||
|
|||
VPQuery Request::query(Vector7D input){ |
|||
request.body = "{\"vector\": [" + |
|||
ofToString(input.angry) + "," + |
|||
ofToString(input.disgust) + "," + |
|||
ofToString(input.fear) + "," + |
|||
ofToString(input.happy) + "," + |
|||
ofToString(input.sad) + "," + |
|||
ofToString(input.surprise) + "," + |
|||
ofToString(input.neutral) + "]}"; |
|||
|
|||
auto response = http.handleRequest(request); |
|||
jsonResponse = ofJson::parse(response.data.getText()); |
|||
|
|||
VPQuery queryResponse; |
|||
queryResponse.filename = jsonResponse["filename"]; |
|||
queryResponse.imagePath = jsonResponse["imagePath"]; |
|||
queryResponse.frame = ofToInt(jsonResponse["frame"]) + 10; |
|||
queryResponse.index = jsonResponse["index"]; |
|||
|
|||
return queryResponse; |
|||
} |
@ -0,0 +1,52 @@ |
|||
#ifndef _REQUEST |
|||
#define _REQUEST |
|||
|
|||
#include "ofMain.h" |
|||
|
|||
// Embeddings structure
|
|||
|
|||
struct Vector7D{ |
|||
float angry; |
|||
float disgust; |
|||
float fear; |
|||
float happy; |
|||
float sad; |
|||
float surprise; |
|||
float neutral; |
|||
|
|||
bool operator!=(const Vector7D &other) const { |
|||
return angry != other.angry || |
|||
disgust != other.disgust || |
|||
fear != other.fear || |
|||
happy != other.happy || |
|||
sad != other.sad || |
|||
surprise != other.surprise || |
|||
neutral != other.neutral; |
|||
} |
|||
}; |
|||
|
|||
// JSON -> Struct
|
|||
|
|||
struct VPQuery{ |
|||
std::string filename; |
|||
std::string imagePath; |
|||
int frame; |
|||
int index; |
|||
}; |
|||
|
|||
class Request { |
|||
|
|||
public: |
|||
|
|||
void setup(std::string ip, int port, std::string page); |
|||
VPQuery query(Vector7D input); |
|||
|
|||
ofHttpRequest request; |
|||
ofURLFileLoader http; |
|||
ofJson jsonResponse; |
|||
|
|||
Request(); |
|||
|
|||
}; |
|||
|
|||
#endif |
@ -0,0 +1,137 @@ |
|||
#include "TSNEMap.h" |
|||
|
|||
TSNEMap::TSNEMap(){ |
|||
image.load("images/happy.jpeg"); |
|||
zoomLevel = 1.0; |
|||
} |
|||
|
|||
void TSNEMap::setup(){ |
|||
for (int i = 0; i < 5; ++i) { |
|||
|
|||
ofImage img; |
|||
ImageObject obj; |
|||
ofPlanePrimitive plane; |
|||
|
|||
img.load("images/happy.png"); |
|||
|
|||
int imageW = image.getWidth(); |
|||
int imageH = image.getHeight(); |
|||
|
|||
// Maximum allowed dimensions for the plane
|
|||
int maxWidth = 100; |
|||
int maxHeight = 100; |
|||
|
|||
// Calculate aspect ratio
|
|||
float aspectRatio = (float)imageW / (float)imageH; |
|||
|
|||
// Determine plane dimensions based on aspect ratio and constraints
|
|||
float planeW, planeH; |
|||
if (aspectRatio > (float)maxWidth / maxHeight) { |
|||
// Image is wider relative to the max constraints
|
|||
planeW = maxWidth; |
|||
planeH = maxWidth / aspectRatio; |
|||
} else { |
|||
// Image is taller relative to the max constraints
|
|||
planeH = maxHeight; |
|||
planeW = maxHeight * aspectRatio; |
|||
} |
|||
|
|||
// Ensure that dimensions do not exceed constraints
|
|||
if (planeH > maxHeight) { |
|||
planeH = maxHeight; |
|||
planeW = maxHeight * aspectRatio; |
|||
} |
|||
if (planeW > maxWidth) { |
|||
planeW = maxWidth; |
|||
planeH = maxWidth / aspectRatio; |
|||
} |
|||
|
|||
plane.set(planeW, planeH); // Random width and height
|
|||
plane.setPosition(ofRandom(-200, 200), ofRandom(-200, 200), 0); // Random position on XZ plane
|
|||
plane.setResolution(2, 2); |
|||
plane.mapTexCoordsFromTexture(img.getTexture()); |
|||
|
|||
obj.texture = img; |
|||
obj.plane = plane; |
|||
obj.speedX = ofRandom(1, 5); // Random speed
|
|||
obj.speedY = ofRandom(1, 5); // Random speed
|
|||
obj.amplitudeX = ofRandom(0.01, 0.02); // Random amplitude
|
|||
obj.amplitudeY = ofRandom(0.01, 0.02); // Random amplitude
|
|||
obj.phaseX = ofRandom(0, TWO_PI); // Random phase
|
|||
obj.phaseY = ofRandom(0, TWO_PI); // Random phase
|
|||
|
|||
objects.push_back(obj); |
|||
} |
|||
|
|||
// Setup FBO
|
|||
fbo.allocate(ofGetWindowWidth() / 3, ofGetWindowHeight() / 3 * 2, GL_RGBA); |
|||
cam.removeAllInteractions(); |
|||
cam.addInteraction(ofEasyCam::TRANSFORM_TRANSLATE_XY,OF_MOUSE_BUTTON_LEFT); |
|||
cam.enableOrtho(); |
|||
// Setup top-down orthographic camera
|
|||
cam.setNearClip(-1000000); |
|||
cam.setFarClip(1000000); |
|||
} |
|||
|
|||
void TSNEMap::update(){ |
|||
if (!image.isAllocated()){ |
|||
ofLogError() << "Image not found"; |
|||
} |
|||
|
|||
// Update oscillation
|
|||
float time = ofGetElapsedTimef(); |
|||
for (size_t i = 0; i < objects.size(); ++i) { |
|||
auto& object = objects[i]; |
|||
|
|||
float offsetX = object.amplitudeX * sin(object.speedX * time ); |
|||
float offsetY = object.amplitudeY * sin(object.speedY * time ); |
|||
|
|||
object.plane.setPosition(object.plane.getPosition().x + offsetX, object.plane.getPosition().y + offsetY, 0); |
|||
} |
|||
} |
|||
|
|||
void TSNEMap::draw(){ |
|||
|
|||
float time = ofGetElapsedTimef(); |
|||
|
|||
// Render the top-down view into the FBO
|
|||
fbo.begin(); |
|||
ofClear(0, 0, 0, 0); // Clear the FBO
|
|||
|
|||
cam.begin(); |
|||
|
|||
// ofEnableDepthTest();
|
|||
|
|||
// Render the planes
|
|||
for (auto& object : objects) { |
|||
ofPushMatrix(); |
|||
object.texture.getTexture().bind(); |
|||
ofFill(); |
|||
object.plane.draw(); // Draw the wireframe for visibility
|
|||
object.texture.getTexture().unbind();; |
|||
ofPopMatrix(); |
|||
} |
|||
|
|||
// ofDisableDepthTest();
|
|||
|
|||
cam.end(); |
|||
|
|||
fbo.end(); |
|||
|
|||
// Draw the FBO to the screen
|
|||
fbo.draw(0, 0, ofGetWindowWidth() / 3, ofGetWindowHeight() / 3 * 2); |
|||
} |
|||
|
|||
void TSNEMap::setTexture(std::string imagePath){ |
|||
image.load("images/rte-archive-football/" + imagePath); |
|||
} |
|||
|
|||
void TSNEMap::keyPressed(int key) { |
|||
if (key == OF_KEY_UP) { |
|||
zoomLevel *= 0.9; // Zoom in
|
|||
cam.setScale(zoomLevel, zoomLevel, zoomLevel); |
|||
} else if (key == OF_KEY_DOWN) { |
|||
zoomLevel *= 1.1; // Zoom out
|
|||
cam.setScale(zoomLevel, zoomLevel, zoomLevel); |
|||
} |
|||
} |
@ -0,0 +1,40 @@ |
|||
#ifndef _TSNEMAP |
|||
#define _TSNEMAP |
|||
|
|||
#include "ofMain.h" |
|||
|
|||
struct ImageObject { |
|||
float speedX; |
|||
float speedY; |
|||
float amplitudeX; |
|||
float amplitudeY; |
|||
float phaseX; |
|||
float phaseY; |
|||
|
|||
ofPlanePrimitive plane; |
|||
ofImage texture; |
|||
}; |
|||
|
|||
class TSNEMap{ |
|||
|
|||
public: |
|||
|
|||
void setup(); |
|||
void draw(); |
|||
void update(); |
|||
void setTexture(std::string imagePath); |
|||
void updateCameraProjection(); |
|||
void keyPressed(int key); |
|||
|
|||
ofFbo fbo; |
|||
vector<ofPlanePrimitive> planes; |
|||
vector<ImageObject> objects; |
|||
ofEasyCam cam; |
|||
ofTexture demoTex; |
|||
ofImage image; |
|||
float zoomLevel; |
|||
|
|||
TSNEMap(); |
|||
}; |
|||
|
|||
#endif |
@ -0,0 +1,17 @@ |
|||
#include "ofMain.h" |
|||
#include "ofApp.h" |
|||
|
|||
//========================================================================
|
|||
int main( ){ |
|||
|
|||
//Use ofGLFWWindowSettings for more options like multi-monitor fullscreen
|
|||
ofGLWindowSettings settings; |
|||
settings.setSize(1920, 1080); |
|||
settings.windowMode = OF_WINDOW; //can also be OF_FULLSCREEN
|
|||
|
|||
auto window = ofCreateWindow(settings); |
|||
|
|||
ofRunApp(window, make_shared<ofApp>()); |
|||
ofRunMainLoop(); |
|||
|
|||
} |
@ -0,0 +1,83 @@ |
|||
#include "ofApp.h" |
|||
|
|||
//--------------------------------------------------------------
|
|||
|
|||
using namespace glm; |
|||
|
|||
void ofApp::setup(){ |
|||
ofBackground(ofColor(0, 0, 0)); |
|||
ofSetVerticalSync(true); |
|||
player.setup(); |
|||
imageViewer.setup(); |
|||
map.setup(); |
|||
} |
|||
|
|||
//--------------------------------------------------------------
|
|||
void ofApp::update(){ |
|||
player.update(); |
|||
std::string imagePath = player.getFrameName(); |
|||
imageViewer.update(imagePath); |
|||
map.update(); |
|||
} |
|||
|
|||
//--------------------------------------------------------------
|
|||
void ofApp::draw(){ |
|||
player.draw(); |
|||
imageViewer.draw(); |
|||
map.draw(); |
|||
} |
|||
|
|||
//--------------------------------------------------------------
|
|||
void ofApp::keyPressed(int key){ |
|||
map.keyPressed(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::mouseEntered(int x, int y){ |
|||
|
|||
} |
|||
|
|||
//--------------------------------------------------------------
|
|||
void ofApp::mouseExited(int x, int y){ |
|||
|
|||
} |
|||
|
|||
//--------------------------------------------------------------
|
|||
void ofApp::windowResized(int w, int h){ |
|||
|
|||
} |
|||
|
|||
//--------------------------------------------------------------
|
|||
void ofApp::gotMessage(ofMessage msg){ |
|||
|
|||
} |
|||
|
|||
//--------------------------------------------------------------
|
|||
void ofApp::dragEvent(ofDragInfo dragInfo){ |
|||
|
|||
} |
@ -0,0 +1,31 @@ |
|||
#pragma once |
|||
|
|||
#include "ofMain.h" |
|||
#include "Player.h" |
|||
#include "Request.h" |
|||
#include "ImageViewer.h" |
|||
#include "TSNEMap.h" |
|||
|
|||
class ofApp : public ofBaseApp{ |
|||
|
|||
public: |
|||
void setup(); |
|||
void update(); |
|||
void draw(); |
|||
|
|||
void keyPressed(int key); |
|||
void keyReleased(int key); |
|||
void mouseMoved(int x, int y ); |
|||
void mouseDragged(int x, int y, int button); |
|||
void mousePressed(int x, int y, int button); |
|||
void mouseReleased(int x, int y, int button); |
|||
void mouseEntered(int x, int y); |
|||
void mouseExited(int x, int y); |
|||
void windowResized(int w, int h); |
|||
void dragEvent(ofDragInfo dragInfo); |
|||
void gotMessage(ofMessage msg); |
|||
private: |
|||
Player player; |
|||
ImageViewer imageViewer; |
|||
TSNEMap map; |
|||
}; |
Loading…
Reference in new issue