gpt4 book ai didi

c++ - TUIO 光标 + openframeworks

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:54:15 24 4
gpt4 key购买 nike

我正在尝试制作一个应用程序来执行一些 blob 跟踪并使用 TUIO cursor 消息为 Unity3D 发送所有数据,就像 CCV 一样。这是我对消息的了解(“media” 是一个按钮,用于在发送所有 blob 的位置/id 或发送平均值之间切换):

  void testApp::blobOn( int x, int y, int id, int order )
{
cout << "blobOn() - id:" << id << " order:" << order << endl;

ofxOscMessage m;
m.setAddress("/tuio2/2Dcur");
m.addStringArg("set");

if(media == false){
m.addIntArg(id);
m.addFloatArg(newX);
m.addFloatArg(newY);
cout << "Posicao x: " << newX << endl;
cout << "Posicao y: " << newY << endl;
}
else{
m.addIntArg(0);
m.addFloatArg(newMediaX);
m.addFloatArg(newMediaY);
}

m.addFloatArg(0);
m.addFloatArg(0);
m.addFloatArg(0);
m.addFloatArg(0);

ofxOscMessage l;
l.setAddress("/tuio/2Dcur");
l.addStringArg("alive");

if (blobList.size() > 0)
{
if(media == false){
for (std::map<int,blob>::iterator it=blobList.begin(); it!=blobList.end(); ++it){
l.addIntArg(it -> first);
cout << "it first: " << it -> first << endl;
}
}else{
l.addIntArg(0);
}
}

sender.sendMessage(l);
sender.sendMessage(m);
}


//--------------------------------------------------------------



void testApp::blobMoved( int x, int y, int id, int order)
{
cout << "blobMoved() - id:" << id << " order:" << order << endl;

ofCvTrackedBlob blob_ = blobTracker.getById( id );

ofxOscMessage m;
m.setAddress("/tuio/2Dcur");
m.addStringArg("set");
if(media == false){
m.addIntArg(id);
m.addFloatArg(newX);
m.addFloatArg(newY);
cout << "Posicao x: " << newX << endl;
cout << "Posicao y: " << newY << endl;
}
else{
m.addIntArg(0);
m.addFloatArg(newMediaX);
m.addFloatArg(newMediaY);
}


m.addFloatArg(0);
m.addFloatArg(0);
m.addFloatArg(0);
m.addFloatArg(0);

ofxOscMessage n;
n.setAddress("/tuio/2Dcur");
n.addStringArg("alive");

if (blobList.size() > 0)
{

if(media == false){
for (std::map<int,blob>::iterator it=blobList.begin(); it!=blobList.end(); ++it){
n.addIntArg(it -> first);
}
}
else {
n.addIntArg(0);
}
}

sender.sendMessage(n);
sender.sendMessage(m);
}


//--------------------------------------------------------------


void testApp::blobOff( int x, int y, int id, int order )
{
cout << "blobOff() - id:" << id << " order:" << order << endl;

ofxOscMessage m;
m.setAddress("/tuio/2Dcur");
m.addStringArg("alive");

blobList.erase(id);


if (blobList.size() > 0)
{
if(media == false){
for (std::map<int,blob>::iterator it=blobList.begin(); it!=blobList.end(); ++it){
m.addIntArg(it -> first);
}
}
else {
m.addIntArg(0);
}
}

sender.sendMessage(m);
}

我的 Unity 应用程序没有收到我的消息/blob,所以我认为它们的格式不正确。谁能告诉我哪里出了问题?

最佳答案

首先要说的是

m.setAddress("/tuio2/2Dcur");

应该是

m.setAddress("/tuio/2Dcur");

TUIO 标准(1.1 和 1.0)定义 2Dcur 如下:

/tuio/2Dcur set s x y X Y m

在您的代码中,您设置了 s、x 和 y,然后将 0.0 (addFloatArg(0)) 相加四次,因此您实际上会得到如下消息:

/tuio/2Dcur set s x y 0.0 0.0 0.0 0.0

一个 float 太多了。在 OSC 中,您通常会订阅带有完整签名的消息。这就是您在 Unity 应用程序中收不到任何消息的原因。

关于c++ - TUIO 光标 + openframeworks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22567264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com