copied body example
This commit is contained in:
parent
1292560f26
commit
2351068572
8 changed files with 576 additions and 0 deletions
1
zoneb2/addons.make
Normal file
1
zoneb2/addons.make
Normal file
|
@ -0,0 +1 @@
|
||||||
|
ofxAzureKinect
|
17
zoneb2/bin/data/shaders/render.frag
Normal file
17
zoneb2/bin/data/shaders/render.frag
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#version 150
|
||||||
|
|
||||||
|
// Custom attributes.
|
||||||
|
|
||||||
|
in vec4 vColor;
|
||||||
|
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
if (vColor.a == 0)
|
||||||
|
{
|
||||||
|
discard;
|
||||||
|
}
|
||||||
|
|
||||||
|
fragColor = vColor;
|
||||||
|
}
|
57
zoneb2/bin/data/shaders/render.vert
Normal file
57
zoneb2/bin/data/shaders/render.vert
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
#version 150
|
||||||
|
|
||||||
|
// OF built-in attributes.
|
||||||
|
|
||||||
|
uniform mat4 modelViewProjectionMatrix;
|
||||||
|
|
||||||
|
// Custom attributes.
|
||||||
|
|
||||||
|
#define BODY_INDEX_MAP_BACKGROUND 255
|
||||||
|
|
||||||
|
const vec4[6] COLORS = vec4[]
|
||||||
|
(
|
||||||
|
vec4(211 / 255.0, 248 / 255.0, 226 / 255.0, 1.0),
|
||||||
|
vec4(228 / 255.0, 193 / 255.0, 249 / 255.0, 1.0),
|
||||||
|
vec4(237 / 255.0, 231 / 255.0, 177 / 255.0, 1.0),
|
||||||
|
vec4(246 / 255.0, 148 / 255.0, 193 / 255.0, 1.0),
|
||||||
|
vec4(169 / 255.0, 222 / 255.0, 249 / 255.0, 1.0),
|
||||||
|
vec4(255 / 255.0, 135 / 255.0, 111 / 255.0, 1.0)
|
||||||
|
);
|
||||||
|
|
||||||
|
uniform sampler2DRect uDepthTex; // Sampler for the depth space data
|
||||||
|
uniform sampler2DRect uBodyIndexTex; // Sampler for the body index data
|
||||||
|
uniform sampler2DRect uWorldTex; // Transformation from kinect depth space to kinect world space
|
||||||
|
|
||||||
|
uniform ivec2 uFrameSize;
|
||||||
|
|
||||||
|
uniform int[6] uBodyIDs;
|
||||||
|
|
||||||
|
out vec4 vColor;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
vec2 texCoord = vec2(gl_InstanceID % uFrameSize.x, gl_InstanceID / uFrameSize.x);
|
||||||
|
|
||||||
|
float depth = texture(uDepthTex, texCoord).x;
|
||||||
|
int bodyIndex = int(texture(uBodyIndexTex, texCoord).x * 255);
|
||||||
|
vec4 ray = texture(uWorldTex, texCoord);
|
||||||
|
|
||||||
|
if (depth != 0 &&
|
||||||
|
bodyIndex != BODY_INDEX_MAP_BACKGROUND &&
|
||||||
|
ray.x != 0 && ray.y != 0)
|
||||||
|
{
|
||||||
|
int bodyID = uBodyIDs[bodyIndex];
|
||||||
|
vColor = COLORS[bodyID % 6];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vColor = vec4(0.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;
|
||||||
|
|
||||||
|
gl_Position = modelViewProjectionMatrix * posWorld;
|
||||||
|
}
|
141
zoneb2/config.make
Normal file
141
zoneb2/config.make
Normal 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
zoneb2/icon.rc
Normal file
8
zoneb2/icon.rc
Normal 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
zoneb2/src/main.cpp
Normal file
11
zoneb2/src/main.cpp
Normal 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());
|
||||||
|
}
|
303
zoneb2/src/ofApp.cpp
Normal file
303
zoneb2/src/ofApp.cpp
Normal file
|
@ -0,0 +1,303 @@
|
||||||
|
#include "ofApp.h"
|
||||||
|
|
||||||
|
class Particle
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ofVec3f p;
|
||||||
|
int id;
|
||||||
|
Particle()
|
||||||
|
{
|
||||||
|
p = ofVec3f(ofRandom(-100, 100), ofRandom(-100, 100), ofRandom(-100, 100));
|
||||||
|
id = ofRandom(K4ABT_JOINT_COUNT);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<Particle> particles;
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
void ofApp::setup()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 10000; i++)
|
||||||
|
{
|
||||||
|
particles.push_back(Particle());
|
||||||
|
}
|
||||||
|
|
||||||
|
//ofSetLogLevel(OF_LOG_VERBOSE);
|
||||||
|
|
||||||
|
ofLogNotice(__FUNCTION__) << "Found " << ofxAzureKinect::Device::getInstalledCount() << " installed devices.";
|
||||||
|
|
||||||
|
auto deviceSettings = ofxAzureKinect::DeviceSettings();
|
||||||
|
deviceSettings.syncImages = false;
|
||||||
|
deviceSettings.depthMode = K4A_DEPTH_MODE_NFOV_UNBINNED;
|
||||||
|
deviceSettings.updateIr = false;
|
||||||
|
deviceSettings.updateColor = false;
|
||||||
|
//deviceSettings.colorResolution = K4A_COLOR_RESOLUTION_1080P;
|
||||||
|
deviceSettings.updateWorld = true;
|
||||||
|
deviceSettings.updateVbo = false;
|
||||||
|
auto bodyTrackingSettings = ofxAzureKinect::BodyTrackingSettings();
|
||||||
|
//bodyTrackingSettings.processingMode = K4ABT_TRACKER_PROCESSING_MODE_CPU;
|
||||||
|
bodyTrackingSettings.updateBodies = true;
|
||||||
|
if (kinectDevice.open())
|
||||||
|
{
|
||||||
|
kinectDevice.startCameras(deviceSettings, bodyTrackingSettings);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load shader.
|
||||||
|
auto shaderSettings = ofShaderSettings();
|
||||||
|
shaderSettings.shaderFiles[GL_VERTEX_SHADER] = "shaders/render.vert";
|
||||||
|
shaderSettings.shaderFiles[GL_FRAGMENT_SHADER] = "shaders/render.frag";
|
||||||
|
shaderSettings.intDefines["BODY_INDEX_MAP_BACKGROUND"] = K4ABT_BODY_INDEX_MAP_BACKGROUND;
|
||||||
|
shaderSettings.bindDefaults = true;
|
||||||
|
if (shader.setup(shaderSettings))
|
||||||
|
{
|
||||||
|
ofLogNotice(__FUNCTION__) << "Success loading shader!";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup vbo.
|
||||||
|
std::vector<glm::vec3> verts(1);
|
||||||
|
pointsVbo.setVertexData(verts.data(), verts.size(), GL_STATIC_DRAW);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
void ofApp::exit()
|
||||||
|
{
|
||||||
|
kinectDevice.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
void ofApp::update()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
void ofApp::draw()
|
||||||
|
{
|
||||||
|
ofBackground(0);
|
||||||
|
|
||||||
|
if (kinectDevice.isStreaming())
|
||||||
|
{
|
||||||
|
kinectDevice.getBodyIndexTex().draw(0, 0, 360, 360);
|
||||||
|
}
|
||||||
|
|
||||||
|
camera.begin();
|
||||||
|
{
|
||||||
|
ofPushMatrix();
|
||||||
|
{
|
||||||
|
ofRotateXDeg(180);
|
||||||
|
|
||||||
|
ofEnableDepthTest();
|
||||||
|
|
||||||
|
constexpr int kMaxBodies = 6;
|
||||||
|
int bodyIDs[kMaxBodies];
|
||||||
|
int i = 0;
|
||||||
|
while (i < kinectDevice.getNumBodies())
|
||||||
|
{
|
||||||
|
bodyIDs[i] = kinectDevice.getBodyIDs()[i];
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
while (i < kMaxBodies)
|
||||||
|
{
|
||||||
|
bodyIDs[i] = 0;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
shader.begin();
|
||||||
|
{
|
||||||
|
shader.setUniformTexture("uDepthTex", kinectDevice.getDepthTex(), 1);
|
||||||
|
shader.setUniformTexture("uBodyIndexTex", kinectDevice.getBodyIndexTex(), 2);
|
||||||
|
shader.setUniformTexture("uWorldTex", kinectDevice.getDepthToWorldTex(), 3);
|
||||||
|
shader.setUniform2i("uFrameSize", kinectDevice.getDepthTex().getWidth(), kinectDevice.getDepthTex().getHeight());
|
||||||
|
shader.setUniform1iv("uBodyIDs", bodyIDs, kMaxBodies);
|
||||||
|
|
||||||
|
int numPoints = kinectDevice.getDepthTex().getWidth() * kinectDevice.getDepthTex().getHeight();
|
||||||
|
pointsVbo.drawInstanced(GL_POINTS, 0, 1, numPoints);
|
||||||
|
}
|
||||||
|
shader.end();
|
||||||
|
|
||||||
|
ofDisableDepthTest();
|
||||||
|
|
||||||
|
auto &bodySkeletons = kinectDevice.getBodySkeletons();
|
||||||
|
for (auto &skeleton : bodySkeletons)
|
||||||
|
{
|
||||||
|
// Draw joints.
|
||||||
|
for (int i = 0; i < K4ABT_JOINT_COUNT; ++i)
|
||||||
|
{
|
||||||
|
auto joint = skeleton.joints[i];
|
||||||
|
ofPushMatrix();
|
||||||
|
{
|
||||||
|
glm::mat4 transform = glm::translate(toGlm(joint.position)) * glm::toMat4(toGlm(joint.orientation));
|
||||||
|
ofMultMatrix(transform);
|
||||||
|
|
||||||
|
ofDrawAxis(50.0f);
|
||||||
|
}
|
||||||
|
ofPopMatrix();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw connections.
|
||||||
|
skeletonMesh.setMode(OF_PRIMITIVE_LINES);
|
||||||
|
auto &vertices = skeletonMesh.getVertices();
|
||||||
|
vertices.resize(50);
|
||||||
|
int vdx = 0;
|
||||||
|
|
||||||
|
// Spine.
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_PELVIS].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_SPINE_NAVEL].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_SPINE_NAVEL].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_SPINE_CHEST].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_SPINE_CHEST].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_NECK].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_NECK].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_HEAD].position);
|
||||||
|
|
||||||
|
// Head.
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_HEAD].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_NOSE].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_NOSE].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_EYE_LEFT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_EYE_LEFT].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_EAR_LEFT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_NOSE].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_EYE_RIGHT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_EYE_RIGHT].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_EAR_RIGHT].position);
|
||||||
|
|
||||||
|
// Left Leg.
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_PELVIS].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_HIP_LEFT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_HIP_LEFT].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_KNEE_LEFT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_KNEE_LEFT].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_ANKLE_LEFT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_ANKLE_LEFT].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_FOOT_LEFT].position);
|
||||||
|
|
||||||
|
// Right leg.
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_PELVIS].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_HIP_RIGHT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_HIP_RIGHT].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_KNEE_RIGHT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_KNEE_RIGHT].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_ANKLE_RIGHT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_ANKLE_RIGHT].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_FOOT_RIGHT].position);
|
||||||
|
|
||||||
|
// Left arm.
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_NECK].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_CLAVICLE_LEFT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_CLAVICLE_LEFT].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_SHOULDER_LEFT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_SHOULDER_LEFT].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_ELBOW_LEFT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_ELBOW_LEFT].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_WRIST_LEFT].position);
|
||||||
|
|
||||||
|
// Right arm.
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_NECK].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_CLAVICLE_RIGHT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_CLAVICLE_RIGHT].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_SHOULDER_RIGHT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_SHOULDER_RIGHT].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_ELBOW_RIGHT].position);
|
||||||
|
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_ELBOW_RIGHT].position);
|
||||||
|
vertices[vdx++] = toGlm(skeleton.joints[K4ABT_JOINT_WRIST_RIGHT].position);
|
||||||
|
|
||||||
|
skeletonMesh.draw();
|
||||||
|
|
||||||
|
for (int i = 0; i < particles.size(); i++)
|
||||||
|
{
|
||||||
|
auto& pt = particles.at(i);
|
||||||
|
pt.p.interpolate(vertices[pt.id], 0.01);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i = 0; i < particles.size(); i++)
|
||||||
|
{
|
||||||
|
ofDrawCircle(particles.at(i).p, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ofPopMatrix();
|
||||||
|
}
|
||||||
|
camera.end();
|
||||||
|
|
||||||
|
std::ostringstream oss;
|
||||||
|
oss << ofToString(ofGetFrameRate(), 2) + " FPS" << std::endl;
|
||||||
|
oss << "Joint Smoothing: " << kinectDevice.jointSmoothing;
|
||||||
|
ofDrawBitmapStringHighlight(oss.str(), 10, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
if (button == 1)
|
||||||
|
{
|
||||||
|
kinectDevice.jointSmoothing = ofMap(x, 0, ofGetWidth(), 0.0f, 1.0f, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
}
|
38
zoneb2/src/ofApp.h
Normal file
38
zoneb2/src/ofApp.h
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
#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 camera;
|
||||||
|
|
||||||
|
ofVbo pointsVbo;
|
||||||
|
ofShader shader;
|
||||||
|
|
||||||
|
ofVboMesh skeletonMesh;
|
||||||
|
};
|
Loading…
Reference in a new issue