summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorWim Vriend <facetracknoir@gmail.com>2013-02-26 16:42:25 +0000
committerWim Vriend <facetracknoir@gmail.com>2013-02-26 16:42:25 +0000
commit01720c57d9a4b30582e0f2f47ab9879dfdca9d3a (patch)
tree5dcda5520dbfea67b5177ca0d4e30f83b36fc642
parent36f82a4f0dc4f002123cc313eab7c845dcd13572 (diff)
Updating before branching. Last revision is v170 beta1.
git-svn-id: svn+ssh://svn.code.sf.net/p/facetracknoir/code@271 19e81ba0-9b1a-49c3-bd6c-561e1906d5fb
-rw-r--r--FTNoIR_Protocol_FT/FTNoIR_Protocol_FT.cpp1
-rw-r--r--FTNoIR_Protocol_FT/ftnoir_protocol_FT_dialog.cpp17
-rw-r--r--FTNoIR_Tracker_HT/ftnoir_tracker_ht.cpp246
-rw-r--r--FTNoIR_Tracker_HT/ftnoir_tracker_ht.h50
-rw-r--r--FTNoIR_Tracker_HT/ftnoir_tracker_ht_dll.h7
-rw-r--r--FTNoIR_Tracker_HT/stdafx.h29
-rw-r--r--FaceTrackNoIR/FTNoIR_KeyboardShortcuts.ui2
-rw-r--r--FaceTrackNoIR/FaceTrackNoIR.cpp4
-rw-r--r--FaceTrackNoIR/tracker.cpp4
-rw-r--r--List of compatible games.xlsbin41472 -> 41984 bytes
-rw-r--r--QFunctionConfigurator/QFunctionConfigurator/QFunctionConfigurator.vcproj4
-rw-r--r--bin/FreeTrackClient.dllbin10240 -> 10240 bytes
-rw-r--r--bin/NPClient.dllbin13824 -> 14336 bytes
-rw-r--r--bin/NPClient64.dllbin14848 -> 14848 bytes
-rw-r--r--bin/QtOpenGL4.dllbin638976 -> 634880 bytes
-rw-r--r--bin/TIRViews.dllbin109568 -> 109568 bytes
-rw-r--r--bin/tracker-ht/cleye.config4
-rw-r--r--bin/tracker-ht/head.raw192
-rw-r--r--bin/tracker-ht/headtracker-ftnoir.exebin13753344 -> 2071040 bytes
-rw-r--r--bin/tracker-ht/thanks.txt5
20 files changed, 260 insertions, 305 deletions
diff --git a/FTNoIR_Protocol_FT/FTNoIR_Protocol_FT.cpp b/FTNoIR_Protocol_FT/FTNoIR_Protocol_FT.cpp
index f33f92c5..b8461993 100644
--- a/FTNoIR_Protocol_FT/FTNoIR_Protocol_FT.cpp
+++ b/FTNoIR_Protocol_FT/FTNoIR_Protocol_FT.cpp
@@ -120,6 +120,7 @@ QStringList gameLine;
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
QString strError( "Cannot load file: FaceTrackNoIR Supported Games.csv" );
sprintf_s(pMemData->ProgramName, 99, strError.toAscii());
+ sprintf_s(pMemData->FTNVERSION, 9, "V160");
//
// Return true anyway, because maybe it's V160 compatible.
diff --git a/FTNoIR_Protocol_FT/ftnoir_protocol_FT_dialog.cpp b/FTNoIR_Protocol_FT/ftnoir_protocol_FT_dialog.cpp
index 9f6fdcb1..2e6c91f7 100644
--- a/FTNoIR_Protocol_FT/ftnoir_protocol_FT_dialog.cpp
+++ b/FTNoIR_Protocol_FT/ftnoir_protocol_FT_dialog.cpp
@@ -51,29 +51,36 @@ QWidget()
// Connect Qt signals to member-functions
connect(ui.btnOK, SIGNAL(clicked()), this, SLOT(doOK()));
connect(ui.btnCancel, SIGNAL(clicked()), this, SLOT(doCancel()));
- connect(ui.chkTIRViews, SIGNAL(stateChanged(int)), this, SLOT(chkTIRViewsChanged()));
+ connect(ui.bntLocateNPClient, SIGNAL(clicked()), this, SLOT(selectDLL()));
+ connect(ui.chkTIRViews, SIGNAL(stateChanged(int)), this, SLOT(settingChanged()));
connect(ui.chkStartDummy, SIGNAL(stateChanged(int)), this, SLOT(settingChanged()));
connect(ui.cbxSelectInterface, SIGNAL(currentIndexChanged(int)), this, SLOT(settingChanged( int )));
- connect(ui.bntLocateNPClient, SIGNAL(clicked()), this, SLOT(selectDLL()));
ui.cbxSelectInterface->addItem("Enable both");
ui.cbxSelectInterface->addItem("Use FreeTrack, hide TrackIR");
ui.cbxSelectInterface->addItem("Use TrackIR, hide FreeTrack");
+ theProtocol = NULL;
+
+ // Load the settings from the current .INI-file
+ loadSettings();
+
+
aFileName = QCoreApplication::applicationDirPath() + "/TIRViews.dll";
if ( !QFile::exists( aFileName ) ) {
ui.chkTIRViews->setChecked( false );
ui.chkTIRViews->setEnabled ( false );
+
+ //
+ // Best do this save() last, or it will continually reset the settings... :-(
+ //
save();
}
else {
ui.chkTIRViews->setEnabled ( true );
}
- theProtocol = NULL;
- // Load the settings from the current .INI-file
- loadSettings();
}
//
diff --git a/FTNoIR_Tracker_HT/ftnoir_tracker_ht.cpp b/FTNoIR_Tracker_HT/ftnoir_tracker_ht.cpp
index 6adad5db..336ede2d 100644
--- a/FTNoIR_Tracker_HT/ftnoir_tracker_ht.cpp
+++ b/FTNoIR_Tracker_HT/ftnoir_tracker_ht.cpp
@@ -1,19 +1,24 @@
#include "stdafx.h"
-#include "..\ftnoir_tracker_base\ftnoir_tracker_base.h"
+#include "../ftnoir_tracker_base/ftnoir_tracker_base.h"
#include "headtracker-ftnoir.h"
#include "ftnoir_tracker_ht.h"
#include "ftnoir_tracker_ht_dll.h"
-#include "UI_TRACKERCONTROLS.h"
-
-static TCHAR shmName[] = TEXT(HT_SHM_NAME);
-static TCHAR mutexName[] = TEXT(HT_MUTEX_NAME);
+#include "ui_trackercontrols.h"
+#include "../facetracknoir/global-settings.h"
#define WIDGET_WIDTH 250
-#define WIDGET_HEIGHT 170
+#define WIDGET_HEIGHT 188
+
+#if defined(_WIN32) || defined(__WIN32)
+#include <dshow.h>
+#else
+#include <unistd.h>
+#endif
// delicious copypasta
static QList<QString> get_camera_names(void) {
- QList<QString> ret;
+ QList<QString> ret;
+#if defined(_WIN32) || defined(__WIN32)
// Create the System Device Enumerator.
HRESULT hr;
ICreateDevEnum *pSysDevEnum = NULL;
@@ -59,7 +64,18 @@ static QList<QString> get_camera_names(void) {
pEnumCat->Release();
}
pSysDevEnum->Release();
- return ret;
+#else
+ for (int i = 0; i < 16; i++) {
+ char buf[128];
+ sprintf(buf, "/dev/video%d", i);
+ if (access(buf, R_OK | W_OK) == 0) {
+ ret.append(buf);
+ } else {
+ break;
+ }
+ }
+#endif
+ return ret;
}
typedef struct {
@@ -68,6 +84,7 @@ typedef struct {
} resolution_tuple;
static resolution_tuple resolution_choices[] = {
+ { 0, 0 },
{ 640, 480 },
{ 320, 240 },
{ 320, 200 },
@@ -94,14 +111,14 @@ static void load_settings(ht_config_t* config, Tracker* tracker)
config->force_fps = iniFile.value("fps", 0).toInt();
config->camera_index = iniFile.value("camera-index", -1).toInt();
config->ransac_num_iters = 100;
- config->ransac_max_reprojection_error = 5.5f;
- config->ransac_max_inlier_error = 5.5f;
- config->ransac_max_mean_error = 4.0f;
- config->ransac_abs_max_mean_error = 6.0f;
+ config->ransac_max_reprojection_error = 6.5f;
+ config->ransac_max_inlier_error = 6.5f;
+ config->ransac_max_mean_error = 4.0f;
+ config->ransac_abs_max_mean_error = 7.0f;
config->debug = 0;
config->ransac_min_features = 0.75f;
- int res = iniFile.value("resolution", 0).toInt();
- if (res < 0 || res >= sizeof(*resolution_choices) / sizeof(resolution_tuple))
+ int res = iniFile.value("resolution", 0).toInt();
+ if (res < 0 || res >= (int)(sizeof(*resolution_choices) / sizeof(resolution_tuple)))
res = 0;
resolution_tuple r = resolution_choices[res];
config->force_width = r.width;
@@ -118,152 +135,95 @@ static void load_settings(ht_config_t* config, Tracker* tracker)
iniFile.endGroup();
}
-Tracker::Tracker()
+Tracker::Tracker() : lck_shm(HT_SHM_NAME, HT_MUTEX_NAME, sizeof(ht_shm_t)), fresh(false)
{
videoWidget = NULL;
layout = NULL;
enableRX = enableRY = enableRZ = enableTX = enableTY = enableTZ = true;
- hMutex = CreateMutex(NULL, false, mutexName);
- hMapFile = CreateFileMapping(
- INVALID_HANDLE_VALUE,
- NULL,
- PAGE_READWRITE,
- 0,
- sizeof(ht_shm_t),
- shmName);
- shm = (ht_shm_t*) MapViewOfFile(hMapFile,
- FILE_MAP_READ | FILE_MAP_WRITE,
- 0,
- 0,
- sizeof(ht_shm_t));
- paused = false;
+ shm = (ht_shm_t*) lck_shm.mem;
+ shm->terminate = 0;
load_settings(&shm->config, this);
+ shm->result.filled = false;
}
Tracker::~Tracker()
{
+ subprocess.kill();
+ if (shm)
+ shm->terminate = true;
if (layout)
delete layout;
if (videoWidget)
delete videoWidget;
- UnmapViewOfFile(shm);
- CloseHandle(hMapFile);
- CloseHandle(hMutex);
}
-void Tracker::Initialize(QFrame *videoframe)
+void Tracker::StartTracker(QFrame* videoframe)
{
- videoframe->setAttribute(Qt::WA_NativeWindow);
- videoframe->show();
- videoWidget = new VideoWidget(videoframe);
- QHBoxLayout* layout = new QHBoxLayout();
- layout->setContentsMargins(0, 0, 0, 0);
- layout->addWidget(videoWidget);
- if (videoframe->layout())
- delete videoframe->layout();
- videoframe->setLayout(layout);
- videoWidget->resize(WIDGET_WIDTH, WIDGET_HEIGHT);
- videoWidget->show();
- this->layout = layout;
+ videoframe->setAttribute(Qt::WA_NativeWindow);
+ videoframe->show();
+ videoWidget = new VideoWidget(videoframe);
+ QHBoxLayout* layout = new QHBoxLayout();
+ layout->setContentsMargins(0, 0, 0, 0);
+ layout->addWidget(videoWidget);
+ if (videoframe->layout())
+ delete videoframe->layout();
+ videoframe->setLayout(layout);
+ videoWidget->resize(WIDGET_WIDTH, WIDGET_HEIGHT);
+ videoWidget->show();
+ this->layout = layout;
+ load_settings(&shm->config, this);
+ shm->frame.channels = shm->frame.width = shm->frame.height = 0;
+ shm->pause = shm->terminate = shm->running = false;
+ shm->timer = 0;
+ subprocess.setWorkingDirectory(QCoreApplication::applicationDirPath() + "/tracker-ht");
+#if defined(_WIN32) || defined(__WIN32)
+ subprocess.start("\"" + QCoreApplication::applicationDirPath() + "/tracker-ht/headtracker-ftnoir" + "\"");
+#else
+ subprocess.start(QCoreApplication::applicationDirPath() + "/tracker-ht/headtracker-ftnoir");
+#endif
+ connect(&timer, SIGNAL(timeout()), this, SLOT(paint_widget()));
+ timer.start(15);
}
-void Tracker::StartTracker(HWND parent)
-{
- if (paused)
- {
- shm->pause = false;
- }
- else
- {
- load_settings(&shm->config, this);
- shm->frame.channels = shm->frame.width = shm->frame.height = 0;
- shm->pause = shm->terminate = shm->running = false;
- shm->timer = 0;
- subprocess.setWorkingDirectory(QCoreApplication::applicationDirPath() + "/tracker-ht");
- subprocess.start("\"" + QCoreApplication::applicationDirPath() + "/tracker-ht/headtracker-ftnoir.exe" + "\"");
- }
-}
-
-void Tracker::StopTracker(bool exit)
-{
- if (exit)
- {
- shm->terminate = true;
- subprocess.kill();
- }
- else
- {
- shm->pause = true;
- }
+void Tracker::paint_widget() {
+ if (fresh) {
+ fresh = false;
+ videoWidget->update();
+ }
}
bool Tracker::GiveHeadPoseData(THeadPoseData* data)
{
bool ret = false;
- if (WaitForSingleObject(hMutex, 100) == WAIT_OBJECT_0)
- {
- shm->timer = 0;
- if (WaitForSingleObject(videoWidget->hMutex, 10) == WAIT_OBJECT_0)
- {
- memcpy(&videoWidget->videoFrame, &shm->frame, sizeof(ht_video_t));
- ReleaseMutex(videoWidget->hMutex);
- }
- if (shm->result.filled) {
- if (enableRX)
- data->yaw = shm->result.rotx * 57.295781;
- if (enableRY)
- data->pitch = shm->result.roty * 57.295781;
- if (enableRZ)
- data->roll = shm->result.rotz * 57.295781;
- if (enableTX)
- data->x = shm->result.tx;
- if (enableTY)
- data->y = shm->result.ty;
- if (enableTZ)
- data->z = shm->result.tz;
- ret = true;
- }
- ReleaseMutex(hMutex);
- }
+ lck_shm.lock();
+ shm->timer = 0;
+ if (shm->frame.width > 0)
+ {
+ videoWidget->updateImage(shm->frame.frame, shm->frame.width, shm->frame.height);
+ //memcpy(foo, shm->frame.frame, shm->frame.width * shm->frame.height * 3);
+ fresh = true;
+ }
+ if (shm->result.filled) {
+ if (enableRX)
+ data->yaw = shm->result.rotx;
+ if (enableRY)
+ data->pitch = shm->result.roty;
+ if (enableRZ)
+ data->roll = shm->result.rotz;
+ if (enableTX)
+ data->x = shm->result.tx;
+ if (enableTY)
+ data->y = shm->result.ty;
+ if (enableTZ)
+ data->z = shm->result.tz;
+ ret = true;
+ }
+ lck_shm.unlock();
return ret;
}
-VideoWidget::VideoWidget(QWidget* parent) : QWidget(parent)
-{
- hMutex = CreateMutex(NULL, false, NULL);
- videoFrame.channels = videoFrame.height = videoFrame.width = 0;
- connect(&timer, SIGNAL(timeout()), this, SLOT(update()));
- timer.start(35);
-}
-
-VideoWidget::~VideoWidget()
-{
- CloseHandle(hMutex);
-}
-
-void VideoWidget::paintEvent(QPaintEvent *e)
-{
- uchar* data = NULL;
- if (WaitForSingleObject(hMutex, 10) == WAIT_OBJECT_0)
- {
- if (videoFrame.width > 0)
- {
- data = new uchar[videoFrame.width * videoFrame.height * 3];
- memcpy(data, videoFrame.frame, videoFrame.width * videoFrame.height * 3);
- }
- ReleaseMutex(hMutex);
- }
- if (data)
- {
- QImage image((uchar*) data, videoFrame.width, videoFrame.height, QImage::Format_RGB888);
- QPainter painter(this);
- painter.drawPixmap(e->rect(), QPixmap::fromImage(image.rgbSwapped()).scaled(WIDGET_WIDTH, WIDGET_HEIGHT, Qt::KeepAspectRatioByExpanding), e->rect());
- delete[] data;
- }
-}
-
//-----------------------------------------------------------------------------
void TrackerDll::getFullName(QString *strToBeFilled)
{
@@ -282,23 +242,23 @@ void TrackerDll::getDescription(QString *strToBeFilled)
void TrackerDll::getIcon(QIcon *icon)
{
- *icon = QIcon(":/images/HT.ico");
+ *icon = QIcon(":/images/ht.png");
}
//-----------------------------------------------------------------------------
-#pragma comment(linker, "/export:GetTrackerDll=_GetTrackerDll@0")
+//#pragma comment(linker, "/export:GetTrackerDll=_GetTrackerDll@0")
-FTNOIR_TRACKER_BASE_EXPORT ITrackerDllPtr __stdcall GetTrackerDll()
+extern "C" FTNOIR_TRACKER_BASE_EXPORT Metadata* CALLING_CONVENTION GetMetadata()
{
return new TrackerDll;
}
-#pragma comment(linker, "/export:GetTracker=_GetTracker@0")
+//#pragma comment(linker, "/export:GetTracker=_GetTracker@0")
-FTNOIR_TRACKER_BASE_EXPORT ITrackerPtr __stdcall GetTracker()
+extern "C" FTNOIR_TRACKER_BASE_EXPORT void* CALLING_CONVENTION GetConstructor()
{
- return new Tracker;
+ return (ITracker*) new Tracker;
}
////////////////////////////////////////////////////////////////////////////////
@@ -308,11 +268,11 @@ FTNOIR_TRACKER_BASE_EXPORT ITrackerPtr __stdcall GetTracker()
// GetTrackerDialog - Undecorated name, which can be easily used with GetProcAddress
// Win32 API function.
// _GetTrackerDialog@0 - Common name decoration for __stdcall functions in C language.
-#pragma comment(linker, "/export:GetTrackerDialog=_GetTrackerDialog@0")
+//#pragma comment(linker, "/export:GetTrackerDialog=_GetTrackerDialog@0")
-FTNOIR_TRACKER_BASE_EXPORT ITrackerDialogPtr __stdcall GetTrackerDialog( )
+extern "C" FTNOIR_TRACKER_BASE_EXPORT void* CALLING_CONVENTION GetDialog( )
{
- return new TrackerControls;
+ return (ITrackerDialog*) new TrackerControls;
}
TrackerControls::TrackerControls()
@@ -382,7 +342,7 @@ void TrackerControls::loadSettings()
ui.tx->setCheckState(iniFile.value("enable-tx", true).toBool() ? Qt::Checked : Qt::Unchecked);
ui.ty->setCheckState(iniFile.value("enable-ty", true).toBool() ? Qt::Checked : Qt::Unchecked);
ui.tz->setCheckState(iniFile.value("enable-tz", true).toBool() ? Qt::Checked : Qt::Unchecked);
- ui.resolution->setCurrentIndex(iniFile.value("resolution", 0).toInt());
+ ui.resolution->setCurrentIndex(iniFile.value("resolution", 0).toInt());
iniFile.endGroup();
settingsDirty = false;
}
@@ -459,4 +419,4 @@ void TrackerControls::doCancel()
else {
this->close();
}
-} \ No newline at end of file
+}
diff --git a/FTNoIR_Tracker_HT/ftnoir_tracker_ht.h b/FTNoIR_Tracker_HT/ftnoir_tracker_ht.h
index 30d62f32..1a449dca 100644
--- a/FTNoIR_Tracker_HT/ftnoir_tracker_ht.h
+++ b/FTNoIR_Tracker_HT/ftnoir_tracker_ht.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013 Stanisław Halik <sthalik@misaki.pl>
+/* Copyright (c) 2013 Stanislaw Halik <sthalik@misaki.pl>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -9,41 +9,43 @@
#define FTNOIR_TRACKER_HT_H
#include "stdafx.h"
-#include "..\ftnoir_tracker_base\ftnoir_tracker_base.h"
+#include "../ftnoir_tracker_base/ftnoir_tracker_base.h"
#include "headtracker-ftnoir.h"
-#include "ui_TrackerControls.h"
+#include "ui_trackercontrols.h"
+#include "video_widget.h"
+#include "../compat/compat.h"
+#include <QObject>
+#include <QTimer>
-class VideoWidget : public QWidget
-{
- Q_OBJECT
-public:
- VideoWidget(QWidget* parent);
- ~VideoWidget();
- ht_video_t videoFrame;
- HANDLE hMutex;
-protected:
- void paintEvent(QPaintEvent* e);
-private:
- QTimer timer;
-};
-
-class Tracker : public ITracker
+class Tracker : public QObject, public ITracker
{
+ Q_OBJECT
public:
Tracker();
~Tracker();
- void Initialize(QFrame *videoframe);
- void StartTracker(HWND parent_window);
- void StopTracker(bool exit);
- bool GiveHeadPoseData(THeadPoseData *data);
+ void StartTracker(QFrame* frame);
+ bool GiveHeadPoseData(THeadPoseData *data);
bool enableTX, enableTY, enableTZ, enableRX, enableRY, enableRZ;
ht_shm_t* shm;
+ bool NeedsTimeToFinish() {
+ return true;
+ }
+ void WaitForExit() {
+ if (shm) {
+ shm->terminate = true;
+ subprocess.waitForFinished(5000);
+ }
+ subprocess.kill();
+ }
private:
- HANDLE hMutex, hMapFile;
- bool paused;
+ QTimer timer;
+ PortableLockedShm lck_shm;
QProcess subprocess;
VideoWidget* videoWidget;
QHBoxLayout* layout;
+ volatile bool fresh;
+private slots:
+ void paint_widget();
};
// Widget that has controls for FTNoIR protocol client-settings.
diff --git a/FTNoIR_Tracker_HT/ftnoir_tracker_ht_dll.h b/FTNoIR_Tracker_HT/ftnoir_tracker_ht_dll.h
index 01b4cfa0..f3bfd381 100644
--- a/FTNoIR_Tracker_HT/ftnoir_tracker_ht_dll.h
+++ b/FTNoIR_Tracker_HT/ftnoir_tracker_ht_dll.h
@@ -5,10 +5,11 @@
* copyright notice and this permission notice appear in all copies.
*/
-#include "..\ftnoir_tracker_base\ftnoir_tracker_base.h"
+#include "../ftnoir_tracker_base/ftnoir_tracker_base.h"
+#include "../facetracknoir/global-settings.h"
//-----------------------------------------------------------------------------
-class TrackerDll : public ITrackerDll
+class TrackerDll : public Metadata
{
// ITrackerDll interface
void Initialize() {}
@@ -16,4 +17,4 @@ class TrackerDll : public ITrackerDll
void getShortName(QString *strToBeFilled);
void getDescription(QString *strToBeFilled);
void getIcon(QIcon *icon);
-}; \ No newline at end of file
+};
diff --git a/FTNoIR_Tracker_HT/stdafx.h b/FTNoIR_Tracker_HT/stdafx.h
index 9cbe1001..0e532c9f 100644
--- a/FTNoIR_Tracker_HT/stdafx.h
+++ b/FTNoIR_Tracker_HT/stdafx.h
@@ -1,31 +1,3 @@
-// stdafx.h : include file for standard system include files,
-// or project specific include files that are used frequently, but
-// are changed infrequently
-//
-
-#pragma once
-
-// Modify the following defines if you have to target a platform prior to the ones specified below.
-// Refer to MSDN for the latest info on corresponding values for different platforms.
-#ifndef WINVER // Allow use of features specific to Windows XP or later.
-#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows.
-#endif
-
-#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
-#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
-#endif
-
-#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.
-#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
-#endif
-
-#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later.
-#define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE.
-#endif
-
-#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
-// Windows Header Files:
-#include <windows.h>
#include <QWidget>
#include <QMessageBox>
#include <QProcess>
@@ -40,4 +12,3 @@
#include <QPaintEvent>
#include <QList>
#include <QString>
-#include <dshow.h> \ No newline at end of file
diff --git a/FaceTrackNoIR/FTNoIR_KeyboardShortcuts.ui b/FaceTrackNoIR/FTNoIR_KeyboardShortcuts.ui
index e9f3facb..2a5ad691 100644
--- a/FaceTrackNoIR/FTNoIR_KeyboardShortcuts.ui
+++ b/FaceTrackNoIR/FTNoIR_KeyboardShortcuts.ui
@@ -686,7 +686,7 @@
<widget class="QCheckBox" name="chkDisableBeep">
<property name="maximumSize">
<size>
- <width>80</width>
+ <width>85</width>
<height>16777215</height>
</size>
</property>
diff --git a/FaceTrackNoIR/FaceTrackNoIR.cpp b/FaceTrackNoIR/FaceTrackNoIR.cpp
index c9a05dc9..0fe22052 100644
--- a/FaceTrackNoIR/FaceTrackNoIR.cpp
+++ b/FaceTrackNoIR/FaceTrackNoIR.cpp
@@ -946,6 +946,10 @@ THeadPoseData newdata;
}
// Tracker::doRefreshVideo();
+ if (_curve_config) {
+ _curve_config->update();
+ }
+
}
/** set the smoothing from the slider **/
diff --git a/FaceTrackNoIR/tracker.cpp b/FaceTrackNoIR/tracker.cpp
index 2c09917b..5396c95b 100644
--- a/FaceTrackNoIR/tracker.cpp
+++ b/FaceTrackNoIR/tracker.cpp
@@ -639,6 +639,7 @@ bool bTracker2Confid = false;
}
if (pTracker) {
bTracker1Confid = pTracker->GiveHeadPoseData(&newpose);
+// qDebug() << "Tracker::run() says Roll = " << newpose.roll;
}
else {
bTracker1Confid = false;
@@ -706,6 +707,7 @@ bool bTracker2Confid = false;
target_camera.pitch = getSmoothFromList( &Pitch.rawList );
target_camera.yaw = getSmoothFromList( &Yaw.rawList );
target_camera.roll = getSmoothFromList( &Roll.rawList );
+// qDebug() << "Tracker::run() says Roll from Smoothing = " << target_camera.roll;
// do the centering
target_camera = target_camera - offset_camera;
@@ -715,9 +717,11 @@ bool bTracker2Confid = false;
//
if (pFilter) {
pFilter->FilterHeadPoseData(&current_camera, &target_camera, &new_camera, Tracker::Pitch.newSample);
+// qDebug() << "Tracker::run() says Roll in Filter = " << current_camera.roll << ", Roll to output = " << new_camera.roll;
}
else {
new_camera = target_camera;
+// qDebug() << "Tracker::run() says Roll to output = " << new_camera.roll;
}
output_camera.x = X.invert * X.curvePtr->getValue(new_camera.x);
output_camera.y = Y.invert * Y.curvePtr->getValue(new_camera.y);
diff --git a/List of compatible games.xls b/List of compatible games.xls
index 0adc680b..bdc55e62 100644
--- a/List of compatible games.xls
+++ b/List of compatible games.xls
Binary files differ
diff --git a/QFunctionConfigurator/QFunctionConfigurator/QFunctionConfigurator.vcproj b/QFunctionConfigurator/QFunctionConfigurator/QFunctionConfigurator.vcproj
index d907e913..29a06271 100644
--- a/QFunctionConfigurator/QFunctionConfigurator/QFunctionConfigurator.vcproj
+++ b/QFunctionConfigurator/QFunctionConfigurator/QFunctionConfigurator.vcproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="8,00"
+ Version="8.00"
Name="QFunctionConfigurator"
ProjectGUID="{2527B683-7EFC-4D51-B25A-843668649C54}"
RootNamespace="QFunctionConfigurator"
@@ -341,7 +341,7 @@
/>
<Global
Name="QtVersion Win32"
- Value="qt-everywhere-opensource-src-4.6.2"
+ Value="$(DefaultQtVersion)"
/>
<Global
Name="RccDir"
diff --git a/bin/FreeTrackClient.dll b/bin/FreeTrackClient.dll
index bf98d2b4..3c1c3963 100644
--- a/bin/FreeTrackClient.dll
+++ b/bin/FreeTrackClient.dll
Binary files differ
diff --git a/bin/NPClient.dll b/bin/NPClient.dll
index ab6175e2..b728cb95 100644
--- a/bin/NPClient.dll
+++ b/bin/NPClient.dll
Binary files differ
diff --git a/bin/NPClient64.dll b/bin/NPClient64.dll
index 1b463229..fef149d4 100644
--- a/bin/NPClient64.dll
+++ b/bin/NPClient64.dll
Binary files differ
diff --git a/bin/QtOpenGL4.dll b/bin/QtOpenGL4.dll
index c6f85c7f..91a04acd 100644
--- a/bin/QtOpenGL4.dll
+++ b/bin/QtOpenGL4.dll
Binary files differ
diff --git a/bin/TIRViews.dll b/bin/TIRViews.dll
index a1fb306f..c9427a2d 100644
--- a/bin/TIRViews.dll
+++ b/bin/TIRViews.dll
Binary files differ
diff --git a/bin/tracker-ht/cleye.config b/bin/tracker-ht/cleye.config
new file mode 100644
index 00000000..bfb37b47
--- /dev/null
+++ b/bin/tracker-ht/cleye.config
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<cleye>
+ <item name="mode" value="advanced" />
+</cleye> \ No newline at end of file
diff --git a/bin/tracker-ht/head.raw b/bin/tracker-ht/head.raw
index d39d6408..c29d70a2 100644
--- a/bin/tracker-ht/head.raw
+++ b/bin/tracker-ht/head.raw
@@ -1,98 +1,94 @@
-0.000000 32.609997 8.104449 -7.347590 39.099613 7.736829 -4.196631 32.696045 6.501138
--34.109997 0.624870 -5.158159 -32.058872 -7.430159 -2.602521 -27.702639 -1.690498 -1.381335
--20.391516 60.684307 3.603310 -32.740498 59.322212 -2.182297 -33.060722 52.414169 -0.334695
--33.060722 52.414169 -0.334695 -27.577549 43.307114 5.057074 -20.391516 60.684307 3.603310
-0.000000 42.603470 8.884142 0.000000 61.893166 4.070037 -13.989014 42.455753 7.970186
-0.000000 -12.754794 35.961197 -7.618367 -10.810278 33.086460 0.000000 -21.047792 19.163965
-0.000000 -4.143512 36.062874 -7.618367 -10.810278 33.086460 0.000000 -12.754794 35.961197
-0.000000 61.893166 4.070037 -20.391516 60.684307 3.603310 -13.989014 42.455753 7.970186
--5.609054 20.582796 13.642222 0.000000 10.760675 25.672352 0.000000 23.673689 13.371145
--7.347590 39.099613 7.736829 0.000000 32.609997 8.104449 0.000000 42.603470 8.884142
--28.960464 -21.419615 0.599514 -26.403934 -21.223911 1.921049 -29.317999 -19.359867 0.315295
--10.585984 -41.068447 15.845928 0.000000 -21.047792 19.163965 0.000000 -42.255722 18.587744
--27.702639 -1.690498 -1.381335 -18.419840 2.454039 3.659557 -14.432987 19.215080 -4.842422
--18.020000 -40.169670 11.722255 -26.403934 -21.223911 1.921049 -28.482496 -24.243999 1.549272
--15.871305 -17.996796 5.583137 -18.020000 -40.169670 11.722255 -10.585984 -41.068447 15.845928
--18.419840 2.454039 3.659557 -27.702639 -1.690498 -1.381335 -15.871305 -17.996796 5.583137
--30.098633 18.459513 -3.714143 -35.892509 18.887854 -7.904358 -35.315048 15.105168 -8.432940
--35.315048 15.105168 -8.432940 -30.677572 12.480466 -5.656359 -30.098633 18.459513 -3.714143
--12.196831 -44.513969 13.330440 -10.585984 -41.068447 15.845928 0.000000 -45.784542 15.657967
--7.347590 39.099613 7.736829 0.000000 42.603470 8.884142 -13.989014 42.455753 7.970186
--7.618367 -10.810278 33.086460 -5.609054 20.582796 13.642222 -12.683728 7.948504 11.716074
--4.196631 32.696045 6.501138 -7.347590 39.099613 7.736829 -9.176074 29.896723 0.762968
--5.609054 20.582796 13.642222 0.000000 23.673689 13.371145 0.000000 32.609997 8.104449
--5.609054 20.582796 13.642222 0.000000 32.609997 8.104449 -4.196631 32.696045 6.501138
--26.403934 -21.223911 1.921049 -15.871305 -17.996796 5.583137 -27.702639 -1.690498 -1.381335
--18.020000 -40.169670 11.722255 -15.871305 -17.996796 5.583137 -26.403934 -21.223911 1.921049
-0.000000 10.760675 25.672352 -7.618367 -10.810278 33.086460 0.000000 -4.143512 36.062874
--26.403934 -21.223911 1.921049 -27.702639 -1.690498 -1.381335 -32.058872 -7.430159 -2.602521
--32.058872 -7.430159 -2.602521 -29.317999 -19.359867 0.315295 -26.403934 -21.223911 1.921049
--7.618367 -10.810278 33.086460 -15.871305 -17.996796 5.583137 0.000000 -21.047792 19.163965
--26.403934 -21.223911 1.921049 -28.960464 -21.419615 0.599514 -28.482496 -24.243999 1.549272
-0.000000 -21.047792 19.163965 -15.871305 -17.996796 5.583137 -10.585984 -41.068447 15.845928
--10.585984 -41.068447 15.845928 0.000000 -42.255722 18.587744 0.000000 -45.784542 15.657967
--12.683728 7.948504 11.716074 -5.609054 20.582796 13.642222 -14.432987 19.215080 -4.842422
--10.585984 -41.068447 15.845928 -18.020000 -40.169670 11.722255 -12.196831 -44.513969 13.330440
--18.419840 2.454039 3.659557 -12.683728 7.948504 11.716074 -14.432987 19.215080 -4.842422
--5.609054 20.582796 13.642222 -7.618367 -10.810278 33.086460 0.000000 10.760675 25.672352
--4.196631 32.696045 6.501138 -9.176074 29.896723 0.762968 -5.609054 20.582796 13.642222
--15.871305 -17.996796 5.583137 -7.618367 -10.810278 33.086460 -12.683728 7.948504 11.716074
--12.683728 7.948504 11.716074 -18.419840 2.454039 3.659557 -15.871305 -17.996796 5.583137
--30.677572 12.480466 -5.656359 -34.799980 9.043473 -7.137754 -34.109997 0.624870 -5.158159
--34.109997 0.624870 -5.158159 -27.702639 -1.690498 -1.381335 -30.677572 12.480466 -5.656359
--30.098633 18.459513 -3.714143 -30.677572 12.480466 -5.656359 -14.432987 19.215080 -4.842422
--30.677572 12.480466 -5.656359 -27.702639 -1.690498 -1.381335 -14.432987 19.215080 -4.842422
--35.315048 15.105168 -8.432940 -34.799980 9.043473 -7.137754 -30.677572 12.480466 -5.656359
--9.176074 29.896723 0.762968 -14.432987 19.215080 -4.842422 -5.609054 20.582796 13.642222
--7.347590 39.099613 7.736829 -13.989014 42.455753 7.970186 -9.176074 29.896723 0.762968
--33.060722 52.414169 -0.334695 -34.288383 44.492290 0.969077 -27.577549 43.307114 5.057074
--27.577549 43.307114 5.057074 -13.989014 42.455753 7.970186 -20.391516 60.684307 3.603310
-0.000000 32.609997 8.104449 4.196631 32.696045 6.501138 7.347590 39.099613 7.736829
-34.109997 0.624870 -5.158159 27.702639 -1.690498 -1.381335 32.058872 -7.430159 -2.602521
-20.391516 60.684307 3.603310 33.060722 52.414169 -0.334695 32.740498 59.322212 -2.182297
-33.060722 52.414169 -0.334695 20.391516 60.684307 3.603310 27.577549 43.307114 5.057074
-0.000000 42.603470 8.884142 13.989014 42.455753 7.970186 0.000000 61.893166 4.070037
-0.000000 -12.754794 35.961197 0.000000 -21.047792 19.163965 7.618367 -10.810278 33.086460
-0.000000 -4.143512 36.062874 0.000000 -12.754794 35.961197 7.618367 -10.810278 33.086460
-0.000000 61.893166 4.070037 13.989014 42.455753 7.970186 20.391516 60.684307 3.603310
-5.609054 20.582796 13.642222 0.000000 23.673689 13.371145 0.000000 10.760675 25.672352
-7.347590 39.099613 7.736829 0.000000 42.603470 8.884142 0.000000 32.609997 8.104449
-28.960464 -21.419615 0.599514 29.317999 -19.359867 0.315295 26.403934 -21.223911 1.921049
-10.585984 -41.068447 15.845928 0.000000 -42.255722 18.587744 0.000000 -21.047792 19.163965
-27.702639 -1.690498 -1.381335 14.432987 19.215080 -4.842422 18.419840 2.454039 3.659557
-18.020000 -40.169670 11.722255 28.482496 -24.243999 1.549272 26.403934 -21.223911 1.921049
-15.871305 -17.996796 5.583137 10.585984 -41.068447 15.845928 18.020000 -40.169670 11.722255
-18.419840 2.454039 3.659557 15.871305 -17.996796 5.583137 27.702639 -1.690498 -1.381335
-30.098633 18.459513 -3.714143 35.315048 15.105168 -8.432940 35.892509 18.887854 -7.904358
-35.315048 15.105168 -8.432940 30.098633 18.459513 -3.714143 30.677572 12.480466 -5.656359
-12.196831 -44.513969 13.330440 0.000000 -45.784542 15.657967 10.585984 -41.068447 15.845928
-7.347590 39.099613 7.736829 13.989014 42.455753 7.970186 0.000000 42.603470 8.884142
-7.618367 -10.810278 33.086460 12.683728 7.948504 11.716074 5.609054 20.582796 13.642222
-4.196631 32.696045 6.501138 9.176074 29.896723 0.762968 7.347590 39.099613 7.736829
-5.609054 20.582796 13.642222 0.000000 32.609997 8.104449 0.000000 23.673689 13.371145
-5.609054 20.582796 13.642222 4.196631 32.696045 6.501138 0.000000 32.609997 8.104449
-26.403934 -21.223911 1.921049 27.702639 -1.690498 -1.381335 15.871305 -17.996796 5.583137
-18.020000 -40.169670 11.722255 26.403934 -21.223911 1.921049 15.871305 -17.996796 5.583137
-0.000000 10.760675 25.672352 0.000000 -4.143512 36.062874 7.618367 -10.810278 33.086460
-26.403934 -21.223911 1.921049 32.058872 -7.430159 -2.602521 27.702639 -1.690498 -1.381335
-32.058872 -7.430159 -2.602521 26.403934 -21.223911 1.921049 29.317999 -19.359867 0.315295
-7.618367 -10.810278 33.086460 0.000000 -21.047792 19.163965 15.871305 -17.996796 5.583137
-26.403934 -21.223911 1.921049 28.482496 -24.243999 1.549272 28.960464 -21.419615 0.599514
-0.000000 -21.047792 19.163965 10.585984 -41.068447 15.845928 15.871305 -17.996796 5.583137
-10.585984 -41.068447 15.845928 0.000000 -45.784542 15.657967 0.000000 -42.255722 18.587744
-12.683728 7.948504 11.716074 14.432987 19.215080 -4.842422 5.609054 20.582796 13.642222
-10.585984 -41.068447 15.845928 12.196831 -44.513969 13.330440 18.020000 -40.169670 11.722255
-18.419840 2.454039 3.659557 14.432987 19.215080 -4.842422 12.683728 7.948504 11.716074
-5.609054 20.582796 13.642222 0.000000 10.760675 25.672352 7.618367 -10.810278 33.086460
-4.196631 32.696045 6.501138 5.609054 20.582796 13.642222 9.176074 29.896723 0.762968
-15.871305 -17.996796 5.583137 12.683728 7.948504 11.716074 7.618367 -10.810278 33.086460
-12.683728 7.948504 11.716074 15.871305 -17.996796 5.583137 18.419840 2.454039 3.659557
-30.677572 12.480466 -5.656359 34.109997 0.624870 -5.158159 34.799980 9.043473 -7.137754
-34.109997 0.624870 -5.158159 30.677572 12.480466 -5.656359 27.702639 -1.690498 -1.381335
-30.098633 18.459513 -3.714143 14.432987 19.215080 -4.842422 30.677572 12.480466 -5.656359
-30.677572 12.480466 -5.656359 14.432987 19.215080 -4.842422 27.702639 -1.690498 -1.381335
-35.315048 15.105168 -8.432940 30.677572 12.480466 -5.656359 34.799980 9.043473 -7.137754
-9.176074 29.896723 0.762968 5.609054 20.582796 13.642222 14.432987 19.215080 -4.842422
-7.347590 39.099613 7.736829 9.176074 29.896723 0.762968 13.989014 42.455753 7.970186
-33.060722 52.414169 -0.334695 27.577549 43.307114 5.057074 34.288383 44.492290 0.969077
-27.577549 43.307114 5.057074 20.391516 60.684307 3.603310 13.989014 42.455753 7.970186
+0.000000 0.046381 0.102409 -0.004673 0.045937 0.102059 -0.005057 0.036518 0.104452
+-0.041739 0.009398 0.086040 -0.038798 -0.004968 0.090329 -0.029317 0.006111 0.093098
+-0.018384 0.071441 0.101492 -0.037933 0.072461 0.092862 -0.026911 0.059041 0.101535
+0.000000 0.053834 0.104081 0.000000 0.071376 0.101241 -0.011053 0.051657 0.102784
+0.000000 -0.004846 0.131352 -0.011024 -0.002516 0.124890 0.000000 -0.014635 0.112559
+0.000000 0.003099 0.131941 -0.011024 -0.002516 0.124890 0.000000 -0.004846 0.131352
+0.000000 0.071376 0.101241 -0.018384 0.071441 0.101492 -0.011053 0.051657 0.102784
+-0.007717 0.025703 0.113210 0.000000 0.019987 0.121199 0.000000 0.034987 0.108182
+-0.004673 0.045937 0.102059 0.000000 0.046381 0.102409 0.000000 0.053834 0.104081
+-0.034447 -0.017321 0.093453 -0.025034 -0.014668 0.096344 -0.038798 -0.004968 0.090329
+-0.009632 -0.036241 0.109342 0.000000 -0.036493 0.110999 0.000000 -0.014635 0.112559
+-0.029317 0.006111 0.093098 -0.018583 0.010280 0.100619 -0.016963 0.030187 0.088877
+-0.029984 -0.025940 0.098166 -0.016650 -0.036445 0.106242 -0.025034 -0.014668 0.096344
+-0.018924 -0.008888 0.098119 -0.016650 -0.036445 0.106242 -0.009632 -0.036241 0.109342
+-0.018583 0.010280 0.100619 -0.029317 0.006111 0.093098 -0.018924 -0.008888 0.098119
+-0.035349 0.028223 0.089096 -0.045770 0.030335 0.082310 -0.033545 0.023614 0.087953
+-0.011896 -0.039241 0.106074 0.000000 -0.039683 0.108257 -0.009632 -0.036241 0.109342
+-0.004673 0.045937 0.102059 0.000000 0.053834 0.104081 -0.011053 0.051657 0.102784
+-0.011024 -0.002516 0.124890 -0.007717 0.025703 0.113210 -0.012957 0.011201 0.112091
+-0.029984 -0.025940 0.098166 -0.018721 -0.037923 0.103775 -0.016650 -0.036445 0.106242
+-0.005057 0.036518 0.104452 -0.004673 0.045937 0.102059 -0.009974 0.039416 0.094960
+0.000000 0.046381 0.102409 -0.005057 0.036518 0.104452 0.000000 0.034987 0.108182
+-0.025034 -0.014668 0.096344 -0.018924 -0.008888 0.098119 -0.029317 0.006111 0.093098
+-0.016650 -0.036445 0.106242 -0.018721 -0.037923 0.103775 -0.011896 -0.039241 0.106074
+-0.016650 -0.036445 0.106242 -0.018924 -0.008888 0.098119 -0.025034 -0.014668 0.096344
+0.000000 0.019987 0.121199 -0.011024 -0.002516 0.124890 0.000000 0.003099 0.131941
+-0.025034 -0.014668 0.096344 -0.029317 0.006111 0.093098 -0.038798 -0.004968 0.090329
+-0.011024 -0.002516 0.124890 -0.018924 -0.008888 0.098119 0.000000 -0.014635 0.112559
+-0.025034 -0.014668 0.096344 -0.034447 -0.017321 0.093453 -0.029984 -0.025940 0.098166
+0.000000 -0.014635 0.112559 -0.018924 -0.008888 0.098119 -0.009632 -0.036241 0.109342
+-0.009632 -0.036241 0.109342 0.000000 -0.039683 0.108257 0.000000 -0.036493 0.110999
+-0.012957 0.011201 0.112091 -0.007717 0.025703 0.113210 -0.016963 0.030187 0.088877
+-0.009632 -0.036241 0.109342 -0.016650 -0.036445 0.106242 -0.011896 -0.039241 0.106074
+-0.018583 0.010280 0.100619 -0.012957 0.011201 0.112091 -0.016963 0.030187 0.088877
+-0.007717 0.025703 0.113210 -0.011024 -0.002516 0.124890 0.000000 0.019987 0.121199
+-0.009974 0.039416 0.094960 -0.016963 0.030187 0.088877 -0.005057 0.036518 0.104452
+-0.018924 -0.008888 0.098119 -0.011024 -0.002516 0.124890 -0.012957 0.011201 0.112091
+-0.012957 0.011201 0.112091 -0.018583 0.010280 0.100619 -0.018924 -0.008888 0.098119
+-0.033545 0.023614 0.087953 -0.041739 0.009398 0.086040 -0.029317 0.006111 0.093098
+-0.035349 0.028223 0.089096 -0.033545 0.023614 0.087953 -0.016963 0.030187 0.088877
+-0.033545 0.023614 0.087953 -0.029317 0.006111 0.093098 -0.016963 0.030187 0.088877
+-0.045770 0.030335 0.082310 -0.041739 0.009398 0.086040 -0.033545 0.023614 0.087953
+-0.005057 0.036518 0.104452 -0.007717 0.025703 0.113210 0.000000 0.034987 0.108182
+-0.004673 0.045937 0.102059 -0.011053 0.051657 0.102784 -0.009974 0.039416 0.094960
+-0.037933 0.072461 0.092862 -0.040919 0.061024 0.093603 -0.026911 0.059041 0.101535
+-0.026911 0.059041 0.101535 -0.011053 0.051657 0.102784 -0.018384 0.071441 0.101492
+-0.016963 0.030187 0.088877 -0.007717 0.025703 0.113210 -0.005057 0.036518 0.104452
+0.000000 0.046381 0.102409 0.005057 0.036518 0.104452 0.004673 0.045937 0.102059
+0.041739 0.009398 0.086040 0.029317 0.006111 0.093098 0.038798 -0.004968 0.090329
+0.018384 0.071441 0.101492 0.026911 0.059041 0.101535 0.037933 0.072461 0.092862
+0.000000 0.053834 0.104081 0.011053 0.051657 0.102784 0.000000 0.071376 0.101241
+0.000000 -0.004846 0.131352 0.000000 -0.014635 0.112559 0.011024 -0.002516 0.124890
+0.000000 -0.004846 0.131352 0.011024 -0.002516 0.124890 0.000000 0.003099 0.131941
+0.000000 0.071376 0.101241 0.011053 0.051657 0.102784 0.018384 0.071441 0.101492
+0.007717 0.025703 0.113210 0.000000 0.034987 0.108182 0.000000 0.019987 0.121199
+0.004673 0.045937 0.102059 0.000000 0.053834 0.104081 0.000000 0.046381 0.102409
+0.034447 -0.017321 0.093453 0.038798 -0.004968 0.090329 0.025034 -0.014668 0.096344
+0.009632 -0.036241 0.109342 0.000000 -0.014635 0.112559 0.000000 -0.036493 0.110999
+0.029317 0.006111 0.093098 0.016963 0.030187 0.088877 0.018583 0.010280 0.100619
+0.029984 -0.025940 0.098166 0.025034 -0.014668 0.096344 0.016650 -0.036445 0.106242
+0.018924 -0.008888 0.098119 0.009632 -0.036241 0.109342 0.016650 -0.036445 0.106242
+0.018583 0.010280 0.100619 0.018924 -0.008888 0.098119 0.029317 0.006111 0.093098
+0.035349 0.028223 0.089096 0.033545 0.023614 0.087953 0.045770 0.030335 0.082310
+0.011896 -0.039241 0.106074 0.009632 -0.036241 0.109342 0.000000 -0.039683 0.108257
+0.004673 0.045937 0.102059 0.011053 0.051657 0.102784 0.000000 0.053834 0.104081
+0.011024 -0.002516 0.124890 0.012957 0.011201 0.112091 0.007717 0.025703 0.113210
+0.029984 -0.025940 0.098166 0.016650 -0.036445 0.106242 0.018721 -0.037923 0.103775
+0.005057 0.036518 0.104452 0.009974 0.039416 0.094960 0.004673 0.045937 0.102059
+0.000000 0.046381 0.102409 0.000000 0.034987 0.108182 0.005057 0.036518 0.104452
+0.025034 -0.014668 0.096344 0.029317 0.006111 0.093098 0.018924 -0.008888 0.098119
+0.016650 -0.036445 0.106242 0.011896 -0.039241 0.106074 0.018721 -0.037923 0.103775
+0.016650 -0.036445 0.106242 0.025034 -0.014668 0.096344 0.018924 -0.008888 0.098119
+0.000000 0.019987 0.121199 0.000000 0.003099 0.131941 0.011024 -0.002516 0.124890
+0.025034 -0.014668 0.096344 0.038798 -0.004968 0.090329 0.029317 0.006111 0.093098
+0.011024 -0.002516 0.124890 0.000000 -0.014635 0.112559 0.018924 -0.008888 0.098119
+0.025034 -0.014668 0.096344 0.029984 -0.025940 0.098166 0.034447 -0.017321 0.093453
+0.000000 -0.014635 0.112559 0.009632 -0.036241 0.109342 0.018924 -0.008888 0.098119
+0.009632 -0.036241 0.109342 0.000000 -0.036493 0.110999 0.000000 -0.039683 0.108257
+0.012957 0.011201 0.112091 0.016963 0.030187 0.088877 0.007717 0.025703 0.113210
+0.009632 -0.036241 0.109342 0.011896 -0.039241 0.106074 0.016650 -0.036445 0.106242
+0.018583 0.010280 0.100619 0.016963 0.030187 0.088877 0.012957 0.011201 0.112091
+0.000000 0.019987 0.121199 0.011024 -0.002516 0.124890 0.007717 0.025703 0.113210
+0.009974 0.039416 0.094960 0.005057 0.036518 0.104452 0.016963 0.030187 0.088877
+0.018924 -0.008888 0.098119 0.012957 0.011201 0.112091 0.011024 -0.002516 0.124890
+0.012957 0.011201 0.112091 0.018924 -0.008888 0.098119 0.018583 0.010280 0.100619
+0.033545 0.023614 0.087953 0.029317 0.006111 0.093098 0.041739 0.009398 0.086040
+0.035349 0.028223 0.089096 0.016963 0.030187 0.088877 0.033545 0.023614 0.087953
+0.033545 0.023614 0.087953 0.016963 0.030187 0.088877 0.029317 0.006111 0.093098
+0.045770 0.030335 0.082310 0.033545 0.023614 0.087953 0.041739 0.009398 0.086040
+0.005057 0.036518 0.104452 0.000000 0.034987 0.108182 0.007717 0.025703 0.113210
+0.004673 0.045937 0.102059 0.009974 0.039416 0.094960 0.011053 0.051657 0.102784
+0.037933 0.072461 0.092862 0.026911 0.059041 0.101535 0.040919 0.061024 0.093603
+0.026911 0.059041 0.101535 0.018384 0.071441 0.101492 0.011053 0.051657 0.102784
+0.016963 0.030187 0.088877 0.005057 0.036518 0.104452 0.007717 0.025703 0.113210
diff --git a/bin/tracker-ht/headtracker-ftnoir.exe b/bin/tracker-ht/headtracker-ftnoir.exe
index a5b0cd77..3570a179 100644
--- a/bin/tracker-ht/headtracker-ftnoir.exe
+++ b/bin/tracker-ht/headtracker-ftnoir.exe
Binary files differ
diff --git a/bin/tracker-ht/thanks.txt b/bin/tracker-ht/thanks.txt
new file mode 100644
index 00000000..42612dfa
--- /dev/null
+++ b/bin/tracker-ht/thanks.txt
@@ -0,0 +1,5 @@
+The following people deserve thanks for their work on libheadtracker:
+
+The awesome head mesh, made using a 3D scanner was made by
+Jed Frechette. I cannot thank him enough, given how much it
+helped improve the program. \ No newline at end of file