Mac で 「Kinectを使ってブラウザのWebGL内を動いてみた」
準備
OpenNI
OpenNI をインストールしておいてください。
homebrew な人はこちらのエントリーの手順で。
Mac で Kinnect & OpenNI - Scalaとlift のはずだった ・・・
MacPorts な人はこちらのエントリーの手順で。
OpenNIがMacに対応したようです。NITEも動きます。 - some comments
node.js と Socket.IO
node.js は安定版の v0.2.6 を利用します。node.js は nvm を使ってインストールするのがオススメです。
続・複数のバージョンの node.js をインストールする - Sarabande.jp
nvm で node.js をインストールしたら、npm で Socket.IO をインストールしておきます。
npm install socket.io
OpenNI のサンプルの改変
"OpenNI/Samples/NiUserTracker" を改変します。元ネタでは、OpenNI -> node.js へのネットワーク通信部分が Windows 用なので、これを Mac (Unix) で動くように書き換えれば良いです。
具体的には、元ネタの diff をパッチした後に、network.cpp を以下のように変更します。
#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include "SceneDrawer.h" #include "network.h" Tunnel::Tunnel() { char *dest = "127.0.0.1"; unsigned short port = 8888; this->soc = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in dest_addr; memset(&dest_addr, 0, sizeof(dest_addr)); dest_addr.sin_family = AF_INET; dest_addr.sin_addr.s_addr = inet_addr(dest); dest_addr.sin_port = htons(port); if (connect(soc, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) < 0) { fprintf(stderr, "connection error\n"); return; // todo exception } } Tunnel::~Tunnel() // can't call. glutMainLoop() is never end. { close(this->soc); } void Tunnel::send(char *in_mes) { ::send(this->soc, in_mes, strlen(in_mes), SO_NOSIGPIPE); }
ビルド
普通に make するだけです。
make