init (copied from ofxAzureKinect/example-shader)

This commit is contained in:
micuat 2020-10-18 12:22:08 +02:00
commit 26e86edebf
10 changed files with 566 additions and 0 deletions

113
.gitignore vendored Normal file
View file

@ -0,0 +1,113 @@
#########################
# general patterns
#########################
docs/html
docs/tagfile.xml
*/bin/*
!*/bin/data/
# for bin folder in root
/bin/*
!/bin/data/
[Bb]uild/
[Oo]bj/
*.o
[Dd]ebug*/
[Rr]elease*/
*.mode*
*.app/
*.pyc
.svn/
#########################
# IDE
#########################
# XCode
*.pbxuser
*.perspective
*.perspectivev3
*.mode1v3
*.mode2v3
#XCode 4
xcuserdata
*.xcworkspace
# Code::Blocks
*.depend
*.layout
*.cbTemp
# Visual Studio
*.sdf
*.opensdf
*.suo
*.pdb
*.ilk
*.aps
.vs
ipch/
# Eclipse
.metadata
local.properties
.externalToolBuilders
# Codelite
*.session
*.tags
*.workspace.*
#########################
# operating system
#########################
# Linux
*~
# KDE
.directory
.AppleDouble
# OSX
.DS_Store
*.swp
*~.nib
# Thumbnails
._*
# Windows
# Windows image file caches
Thumbs.db
# Folder config file
Desktop.ini
#Android
.csettings
#########################
# packages
#########################
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases
*.log
*.sql
*.sqlite
*.qbs
*.sln
Makefile
*.vcxproj*

1
zoneb/addons.make Normal file
View file

@ -0,0 +1 @@
ofxAzureKinect

View file

@ -0,0 +1,14 @@
#version 150
// Custom attributes.
uniform sampler2DRect uColorTex; // Sampler for the color registered data
in vec2 gTexCoord;
out vec4 fragColor;
void main()
{
fragColor = texture(uColorTex, gTexCoord);
}

View file

@ -0,0 +1,41 @@
#version 150
layout (points) in;
layout (triangle_strip) out;
layout (max_vertices = 4) out;
// OF handled uniforms and attributes.
uniform mat4 projectionMatrix;
// App specific uniforms and attributes.
uniform float uSpriteSize;
in vec4 vPosition[];
in vec2 vTexCoord[];
flat in int vValid[];
out vec2 gTexCoord;
void main()
{
if (vValid[0] == 0) return;
gTexCoord = vTexCoord[0];
for (int i = 0; i < gl_in.length(); ++i)
{
gl_Position = projectionMatrix * (vPosition[i] + vec4(1.0, -1.0, 0.0, 0.0) * uSpriteSize);
EmitVertex();
gl_Position = projectionMatrix * (vPosition[i] + vec4(1.0, 1.0, 0.0, 0.0) * uSpriteSize);
EmitVertex();
gl_Position = projectionMatrix * (vPosition[i] + vec4(-1.0, -1.0, 0.0, 0.0) * uSpriteSize);
EmitVertex();
gl_Position = projectionMatrix * (vPosition[i] + vec4(-1.0, 1.0, 0.0, 0.0) * uSpriteSize);
EmitVertex();
EndPrimitive();
}
}

View file

@ -0,0 +1,36 @@
#version 150
// OF built-in attributes.
uniform mat4 modelViewMatrix;
// Custom attributes.
uniform sampler2DRect uDepthTex; // Sampler for the depth space data
uniform sampler2DRect uWorldTex; // Transformation from kinect depth/color space to kinect world space
uniform ivec2 uFrameSize;
out vec4 vPosition;
out vec2 vTexCoord;
flat out int vValid;
void main()
{
vTexCoord = vec2(gl_InstanceID % uFrameSize.x, gl_InstanceID / uFrameSize.x);
float depth = texture(uDepthTex, vTexCoord).x;
vec4 ray = texture(uWorldTex, vTexCoord);
vValid = (depth != 0 && ray.x != 0 && ray.y != 0) ? 1 : 0;
vec4 posWorld = vec4(1);
posWorld.z = depth * 65535.0; // Remap to float range.
posWorld.x = ray.x * posWorld.z;
posWorld.y = ray.y * posWorld.z;
// Flip X as OpenGL and K4A have different conventions on which direction is positive.
posWorld.x *= -1;
vPosition = modelViewMatrix * posWorld;
}

141
zoneb/config.make Normal file
View file

@ -0,0 +1,141 @@
################################################################################
# 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.
################################################################################
# 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 =

8
zoneb/icon.rc Normal file
View file

@ -0,0 +1,8 @@
// Icon Resource Definition
#define MAIN_ICON 102
#if defined(_DEBUG)
MAIN_ICON ICON "icon_debug.ico"
#else
MAIN_ICON ICON "icon.ico"
#endif

11
zoneb/src/main.cpp Normal file
View file

@ -0,0 +1,11 @@
#include "ofApp.h"
int main()
{
ofGLFWWindowSettings settings;
settings.setGLVersion(3, 2);
settings.setSize(1280, 720);
ofCreateWindow(settings);
ofRunApp(new ofApp());
}

164
zoneb/src/ofApp.cpp Normal file
View file

@ -0,0 +1,164 @@
#include "ofApp.h"
//--------------------------------------------------------------
void ofApp::setup()
{
//ofSetLogLevel(OF_LOG_VERBOSE);
ofLogNotice(__FUNCTION__) << "Found " << ofxAzureKinect::Device::getInstalledCount() << " installed devices.";
// Open Kinect.
if (this->kinectDevice.open())
{
auto kinectSettings = ofxAzureKinect::DeviceSettings();
kinectSettings.updateIr = false;
kinectSettings.updateColor = true;
kinectSettings.colorResolution = K4A_COLOR_RESOLUTION_1080P;
kinectSettings.updateVbo = false;
this->kinectDevice.startCameras(kinectSettings);
}
// Load shader.
auto shaderSettings = ofShaderSettings();
shaderSettings.shaderFiles[GL_VERTEX_SHADER] = "shaders/render.vert";
shaderSettings.shaderFiles[GL_GEOMETRY_SHADER] = "shaders/render.geom";
shaderSettings.shaderFiles[GL_FRAGMENT_SHADER] = "shaders/render.frag";
shaderSettings.bindDefaults = true;
if (this->shader.setup(shaderSettings))
{
ofLogNotice(__FUNCTION__) << "Success loading shader!";
}
// Setup vbo.
std::vector<glm::vec3> verts(1);
this->vbo.setVertexData(verts.data(), verts.size(), GL_STATIC_DRAW);
this->pointSize = 1.0f;
this->useColorSpace = false;
}
//--------------------------------------------------------------
void ofApp::exit()
{
this->kinectDevice.close();
}
//--------------------------------------------------------------
void ofApp::update()
{
}
//--------------------------------------------------------------
void ofApp::draw()
{
ofBackground(0);
if (this->kinectDevice.isStreaming())
{
this->cam.begin();
ofEnableDepthTest();
ofDrawAxis(100.0f);
ofPushMatrix();
ofRotateXDeg(180);
this->shader.begin();
this->shader.setUniform1f("uSpriteSize", this->pointSize);
int numPoints;
if (this->useColorSpace)
{
this->shader.setUniformTexture("uDepthTex", this->kinectDevice.getDepthInColorTex(), 1);
this->shader.setUniformTexture("uWorldTex", this->kinectDevice.getColorToWorldTex(), 2);
this->shader.setUniformTexture("uColorTex", this->kinectDevice.getColorTex(), 3);
this->shader.setUniform2i("uFrameSize", this->kinectDevice.getColorTex().getWidth(), this->kinectDevice.getColorTex().getHeight());
numPoints = this->kinectDevice.getColorTex().getWidth() * this->kinectDevice.getColorTex().getHeight();
}
else
{
this->shader.setUniformTexture("uDepthTex", this->kinectDevice.getDepthTex(), 1);
this->shader.setUniformTexture("uWorldTex", this->kinectDevice.getDepthToWorldTex(), 2);
this->shader.setUniformTexture("uColorTex", this->kinectDevice.getColorInDepthTex(), 3);
this->shader.setUniform2i("uFrameSize", this->kinectDevice.getDepthTex().getWidth(), this->kinectDevice.getDepthTex().getHeight());
numPoints = this->kinectDevice.getDepthTex().getWidth() * this->kinectDevice.getDepthTex().getHeight();
}
this->vbo.drawInstanced(GL_POINTS, 0, 1, numPoints);
this->shader.end();
ofPopMatrix();
this->cam.end();
}
ofDrawBitmapStringHighlight(ofToString(ofGetFrameRate(), 2) + " FPS", 10, 20);
}
//--------------------------------------------------------------
void ofApp::keyPressed(int key)
{
if (key == OF_KEY_UP)
{
this->pointSize *= 2;
}
else if (key == OF_KEY_DOWN)
{
this->pointSize /= 2;
}
else if (key == ' ')
{
this->useColorSpace ^= 1;
}
}
//--------------------------------------------------------------
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)
{
}

37
zoneb/src/ofApp.h Normal file
View file

@ -0,0 +1,37 @@
#pragma once
#include "ofMain.h"
#include "ofxAzureKinect.h"
class ofApp
: public ofBaseApp
{
public:
void setup();
void exit();
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:
ofxAzureKinect::Device kinectDevice;
ofEasyCam cam;
ofVbo vbo;
ofShader shader;
float pointSize;
bool useColorSpace;
};