summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Redfern <tim@gray.(none)>2012-11-11 00:07:35 +0000
committerTim Redfern <tim@gray.(none)>2012-11-11 00:07:35 +0000
commit61fc4a4da64b82fad53f7080ee47181ab2272221 (patch)
treebdf373109ddb090987217c25cfa70370d482c73b
parentcaace54e8adb8f0ad13303f6f387f3f62e429579 (diff)
adding kinect 3d cameras
-rwxr-xr-xliveengine/bin/data/settings.xml4
-rwxr-xr-xliveengine/liveengine.cbp2
-rwxr-xr-xliveengine/liveengine.layout22
-rwxr-xr-xliveengine/src/testApp.cpp143
-rwxr-xr-xliveengine/src/testApp.h16
-rwxr-xr-xliveengine/src/viewport.cpp156
-rwxr-xr-xliveengine/src/viewport.h46
-rwxr-xr-xtshirtmapping/src/testApp.cpp52
-rwxr-xr-xtshirtmapping/src/testApp.h5
-rwxr-xr-xtshirtmapping/tshirtmapping.layout14
10 files changed, 291 insertions, 169 deletions
diff --git a/liveengine/bin/data/settings.xml b/liveengine/bin/data/settings.xml
index d1af114..42e4a52 100755
--- a/liveengine/bin/data/settings.xml
+++ b/liveengine/bin/data/settings.xml
@@ -1,5 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<liveEngine port="1" channel="0">
- <viewport mapped="1" w="1024" h="768" x="0" y="0" rot="0" ox="-512" oy="-384"/>
+ <viewport mapped="1" w="1024" h="768" x="0" y="0" rot="0" ox="-512" oy="-384">
+ <settings fov="16.801397" roll="88.394318" targX="-35.044685" targY="119.056656" targZ="33.992996" lat="7.887337" lng="-59.895107" dolly="572.621643" />
+ </viewport>
</liveEngine>
diff --git a/liveengine/liveengine.cbp b/liveengine/liveengine.cbp
index 0abe73e..f5c2ae5 100755
--- a/liveengine/liveengine.cbp
+++ b/liveengine/liveengine.cbp
@@ -33,6 +33,8 @@
<Unit filename="config.make">
<Option virtualFolder="build config" />
</Unit>
+ <Unit filename="src/keyVar.cpp" />
+ <Unit filename="src/keyVar.h" />
<Unit filename="src/layers.cpp">
<Option virtualFolder="src/" />
</Unit>
diff --git a/liveengine/liveengine.layout b/liveengine/liveengine.layout
index 636f5d1..131871b 100755
--- a/liveengine/liveengine.layout
+++ b/liveengine/liveengine.layout
@@ -1,25 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_layout_file>
<ActiveTarget name="Debug" />
- <File name="bin/data/settings.xml" open="1" top="0" tabpos="5">
+ <File name="bin/data/settings.xml" open="1" top="0" tabpos="11">
<Cursor position="157" topLine="0" />
</File>
- <File name="config.make" open="1" top="0" tabpos="2">
+ <File name="config.make" open="0" top="0" tabpos="2">
<Cursor position="0" topLine="0" />
</File>
- <File name="src/main.cpp" open="1" top="0" tabpos="6">
+ <File name="src/main.cpp" open="1" top="0" tabpos="12">
<Cursor position="290" topLine="0" />
</File>
- <File name="src/testApp.cpp" open="1" top="0" tabpos="3">
- <Cursor position="1370" topLine="27" />
+ <File name="src/testApp.cpp" open="1" top="1" tabpos="8">
+ <Cursor position="9568" topLine="0" />
</File>
- <File name="src/testApp.h" open="1" top="0" tabpos="1">
- <Cursor position="4449" topLine="196" />
+ <File name="src/testApp.h" open="1" top="0" tabpos="7">
+ <Cursor position="3551" topLine="135" />
</File>
- <File name="src/viewport.cpp" open="1" top="1" tabpos="7">
- <Cursor position="6457" topLine="226" />
+ <File name="src/viewport.cpp" open="1" top="0" tabpos="10">
+ <Cursor position="13003" topLine="382" />
</File>
- <File name="src/viewport.h" open="1" top="0" tabpos="4">
- <Cursor position="1184" topLine="1" />
+ <File name="src/viewport.h" open="1" top="0" tabpos="9">
+ <Cursor position="454" topLine="22" />
</File>
</CodeBlocks_layout_file>
diff --git a/liveengine/src/testApp.cpp b/liveengine/src/testApp.cpp
index 8527f73..d5288c1 100755
--- a/liveengine/src/testApp.cpp
+++ b/liveengine/src/testApp.cpp
@@ -88,7 +88,7 @@ void testApp::setup(){
kw->addListener(kinectWin);
kinectWin->setup();
kinectWin->setParent(this);
-
+
isLive = true;
isTracking = false;
isFiltering = false;
@@ -99,7 +99,7 @@ void testApp::setup(){
farThreshold = 1000;
filterFactor = 10.0f;
-
+
recordContext.setup();
recordDepth.setup(&recordContext);
recordImage.setup(&recordContext);
@@ -110,7 +110,18 @@ void testApp::setup(){
recordUser.setMaxNumberOfUsers(2);
}
viewports.push_back(new viewport(w,h,x,y,rot,ox,oy));
- viewports[viewports.size()-1]->setUG(&recordUser);
+ viewports[i]->setUG(&recordUser);
+
+ XML.pushTag("viewport",i);
+ vector<string>keys;
+ XML.getAttributeNames("settings", keys, 0);
+ map<string,string>settings;
+ for (int k=0;k<keys.size();k++) {
+ settings[keys[k]]=XML.getAttribute("settings",keys[k],"none",0);
+ }
+ viewports[i]->setcam(settings);
+ XML.popTag();
+
}
else viewports.push_back(new viewport(w,h,x,y,rot,ox,oy));
}
@@ -118,7 +129,9 @@ void testApp::setup(){
else printf("no viewports!\n");
}
}
-
+
+ activeView=-1;
+
midiIn.listPorts();
midiIn.openPort(midiPort);
midiIn.addListener(this);
@@ -227,7 +240,7 @@ void testApp::makeColours() {
//--------------------------------------------------------------
void testApp::update(){
//for (int i=0;i<numLayers;i++) layers[i]->update();
-
+
if (useKinect) {
recordContext.update();
recordDepth.update();
@@ -235,7 +248,25 @@ void testApp::update(){
recordUser.update();
}
}
+void testApp::saveSettings(string filename){
+ if(XML.pushTag("liveEngine")) {
+ for (int i=0;i<viewports.size();i++){
+ if (viewports[i]->isMapped) {
+ XML.pushTag("viewport",i);
+ vector<string>keys;
+ XML.getAttributeNames("settings", keys, 0);
+ for (int k=0;k<keys.size();k++) {
+ XML.setAttribute("settings", keys[k], viewports[i]->getSetting(keys[k]),0);
+ }
+ XML.popTag();
+ }
+ }
+ XML.popTag();
+ }
+ XML.saveFile(filename);
+ printf("saved %s\n",filename.c_str());
+}
//--------------------------------------------------------------
void testApp::draw(){
@@ -395,75 +426,38 @@ void testApp::keyPressed(int key, ofxFenster* win){
else keyPressed(key);
}
void testApp::keyPressed(int key){
- if(key == 'q'){
- list.load("insects.xml");
- }
- if(key == 'Q'){
- list.load("birds.xml");
- }
- if(key == 'w'){
- list.load("teamsports.xml");
- }
- if(key == 'W'){
- list.load("american_football.xml");
- }
- if(key == 'e'){
- list.load("organs.xml");
- }
- if(key == 'E'){
- list.load("crests.xml");
- }
- if(key == 'r'){
- list.load("tai_chi.xml");
- }
- if(key == 'R'){
- list.load("cricket.xml");
- }
- if(key == 't'){
- list.load("reptiles.xml");
- }
- if(key == 'T'){
- list.load("tools.xml");
- }
- if(key == 'y'){
- list.load("miltary_ladies.xml");
- }
- if(key == 'Y'){
- list.load("women_ethnic.xml");
- }
- if(key == 'u'){
- list.load("knights.xml");
- }
- if(key == 'U'){
- list.load("food.xml");
- }
- if(key == 'i'){
- list.load("mil_historic.xml");
- }
- if(key == 'I'){
- list.load("mil_ethnic.xml");
- }
- if(key == 'o'){
- list.load("yoga.xml");
- }
- if(key == 'O'){
- list.load("computers.xml");
- }
- if(key == 'p'){
- list.load("dancing.xml");
- }
- if(key == 'P'){
- list.load("trainers.xml");
- }
- if(key == 's'){
- XML.saveFile("settings.xml");
+
+ if (activeView<0) for (int i=0;i<viewports.size();i++) viewports[i]->keyPressed(key);
+ else if (activeView<viewports.size()) viewports[activeView]->keyPressed(key);
+
+
+ if (key>='1' && key <='6'){
+ activeView=min(key-'3',(int)viewports.size());
+ switch (activeView){
+ case -2:
+ printf("deactivating viewport adjustment\n");
+ break;
+ case -1:
+ printf("adjusting all viewports\n");
+ break;
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ printf("adjusting viewport %i\n",activeView );
+ break;
+ }
+ }
+
+ if(key == 'p'){
+ saveSettings("settings.xml");
printf("settings saved!\n");
}
if(key == 'f'){
toggleFPS();
}
- if(key >='0' && key <= '9'){
- mode=key-'0';
+ if(key >='7' && key <= '9'){
+ mode=key-'7';
}
if(key == 267){
xshift--;
@@ -500,14 +494,10 @@ void testApp::keyPressed(int key){
}
- if(key == 'd'){
- debug=!debug;
- }
-
- if (key=='j') {
+ if (key=='.') {
fscale=1.0f;
}
- if (key=='h') {
+ if (key=='/') {
scale=1.0f;
}
@@ -515,7 +505,8 @@ void testApp::keyPressed(int key){
//--------------------------------------------------------------
void testApp::keyReleased(int key){
-
+ if (activeView<0) for (int i=0;i<viewports.size();i++) viewports[i]->keyReleased(key);
+ else if (activeView<viewports.size()) viewports[activeView]->keyReleased(key);
}
//--------------------------------------------------------------
diff --git a/liveengine/src/testApp.h b/liveengine/src/testApp.h
index e0a00cc..2f4b4e1 100755
--- a/liveengine/src/testApp.h
+++ b/liveengine/src/testApp.h
@@ -84,6 +84,7 @@ option to randomise colours on each note
#include "viewport.h"
+
/*
enum PropertyAttribute {
None = 0,
@@ -119,6 +120,8 @@ class testApp : public ofxFensterListener, public ofxMidiListener{
void dragEvent(ofDragInfo dragInfo);
void dragEvent(ofDragInfo dragInfo,ofxFenster* win);
+ void saveSettings(string filename);
+
void mousePressedEvent(ofMouseEventArgs &args);
void keyPressedEvent(ofKeyEventArgs &args);
void windowEvent(ofResizeEventArgs &args);
@@ -154,6 +157,7 @@ class testApp : public ofxFensterListener, public ofxMidiListener{
viewport vp1,vp2;
vector<viewport*> viewports;
+ int activeView;
previewWindow *prevWin;
guiWindow *guiWin;
@@ -168,7 +172,7 @@ class testApp : public ofxFensterListener, public ofxMidiListener{
void newMidiMessage(ofxMidiEventArgs& eventArgs);
playlist list;
-
+
ofxPanel gui;
ofxToggle reversemain;
@@ -180,18 +184,18 @@ class testApp : public ofxFensterListener, public ofxMidiListener{
void resetDrawscalePressed(bool & pressed);
void resetFBscalePressed(bool & pressed);
-
+
//kinect stuff
-
+
bool useKinect;
-
+
bool isLive, isTracking, isMasking, isFiltering, isCloud;
-
+
ofxOpenNIContext recordContext;
ofxDepthGenerator recordDepth;
ofxImageGenerator recordImage;
ofxUserGenerator recordUser;
-
+
int nearThreshold, farThreshold;
float filterFactor;
diff --git a/liveengine/src/viewport.cpp b/liveengine/src/viewport.cpp
index fab77ce..35a4036 100755
--- a/liveengine/src/viewport.cpp
+++ b/liveengine/src/viewport.cpp
@@ -1,4 +1,5 @@
-#include "viewport.h"
+#include "viewport.h"
+#define DEBUG 0
//texture binding with normalised coords
void bindTexture(ofBaseHasTexture &t) {
@@ -74,9 +75,9 @@ void viewport::setup(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy) {
}
void viewport::draw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift){
-
-
-
+
+
+
// test screen shape
/*
ofSetColor(255,0,0);
@@ -86,7 +87,7 @@ void viewport::draw(float a,unsigned char* controllers,int xshift,int yshift,pla
ofRect(0,h/2,w/2,h/2);
ofRect(w/2,0,w/2,h/2);
*/
-
+
rb1.begin();
//can be done with texture offset?
@@ -95,7 +96,7 @@ void viewport::draw(float a,unsigned char* controllers,int xshift,int yshift,pla
while (startx>0) startx-=(w*fscale);
int starty=((h-(h*fscale))/2)+yshift;
while (starty>0) starty-=(h*fscale);
-
+
for (int i=startx;i<w*2;i+=(w*fscale)) {
for (int j=starty;j<h*2;j+=(h*fscale)) {
rb2.draw(i,j,w*fscale,h*fscale);
@@ -138,7 +139,7 @@ void viewport::draw(float a,unsigned char* controllers,int xshift,int yshift,pla
ofSetColor(255,255,255);
rb1.draw(0,0);
rb2.end();
-
+
ofPushMatrix();
ofTranslate(x+(w/2),y+(h/2));
ofRotate(r);
@@ -146,9 +147,9 @@ void viewport::draw(float a,unsigned char* controllers,int xshift,int yshift,pla
ofTranslate(ox,oy);
rb2.draw(0,0);
-
+
ofPopStyle();
-
+
ofPopMatrix();
}
@@ -169,15 +170,61 @@ mappedviewport::mappedviewport(int _w,int _h,int _x,int _y,float _r,int _ox,int
}
void mappedviewport::setUG(ofxUserGenerator *_rUser){
rUser=_rUser;
+}
+void viewport::setcam(map<string,string>&settings){
+
+ vars=new keyVar[9];
+ vars[0].set('w','s',ofToFloat(settings["fov"]),0.2,1.0,3.0);
+ vars[1].set('g','d',ofToFloat(settings["targX"]),1,1.0,3.0);
+ vars[2].set('r','v',ofToFloat(settings["targY"]),1,1.0,3.0);
+ vars[3].set('t','c',ofToFloat(settings["targZ"]),1,1.0,3.0);
+ vars[4].set('u','n',ofToFloat(settings["lat"]),1,1.0,3.0);
+ vars[5].set('j','h',ofToFloat(settings["lng"]),1,1.0,3.0);
+ vars[6].set(',','m',ofToFloat(settings["roll"]),1,1.0,3.0);
+ vars[7].set('o','l',ofToFloat(settings["dolly"]),1,1.0,3.0);
+ vars[8].set('q','a',ofToFloat(settings["distort"]),.00001,1.0,3.0);
+}
+double viewport::getSetting(const string& setting){
+ if (setting=="fov") return vars[0].getVal();
+ if (setting=="targX") return vars[1].getVal();
+ if (setting=="targY") return vars[2].getVal();
+ if (setting=="targZ") return vars[3].getVal();
+ if (setting=="lat") return vars[4].getVal();
+ if (setting=="lng") return vars[5].getVal();
+ if (setting=="roll") return vars[6].getVal();
+ if (setting=="dolly") return vars[7].getVal();
+ if (setting=="distort") return vars[8].getVal();
+ return 0.0;
}
void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift){
- //printf("draw mapped%s\n",ofGetFrameNum());
- rb1.begin();
+
+ ofNode c=ofNode();
+ ofNode t=ofNode();
+ t.setParent(c);
+ t.setPosition(vars[1].getVal(),vars[2].getVal(),vars[3].getVal());
+ //make target controls relative to rotation
+ c.rotate(vars[5].getVal(), ofVec3f(0, 1, 0));
+
+ target.setPosition(t.getGlobalPosition());
+ //camera.orbit(vars[5].getVal(), vars[4].getVal(), vars[7].getVal(), target);
+ camera.setFov(vars[0].getVal());
+ ofVec3f p(0, 0, vars[7].getVal());
+ //p.rotate(ofClamp(vars[2].getVal(), -89, 89), ofVec3f(1, 0, 0));
+ p.rotate(vars[4].getVal(), ofVec3f(1, 0, 0));
+ p.rotate(vars[5].getVal(), ofVec3f(0, 1, 0));
+ p += target.getPosition();
+ camera.setPosition(p);
+ camera.lookAt(target,ofVec3f(0,1,0).rotate(vars[6].getVal(),ofVec3f(0,0,1)).rotate(vars[5].getVal(),ofVec3f(0,1,0)));
+
+ rb1.begin();
+
+ camera.begin();
+
int startx=((w-(w*fscale))/2)+xshift;
while (startx>0) startx-=(w*fscale);
int starty=((h-(h*fscale))/2)+yshift;
while (starty>0) starty-=(h*fscale);
-
+
for (int i=startx;i<w*2;i+=(w*fscale)) {
for (int j=starty;j<h*2;j+=(h*fscale)) {
rb2.draw(i,j,w*fscale,h*fscale);
@@ -212,10 +259,12 @@ void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift,
}
break;
}
- }
+ }
+
+ camera.end();
rb1.end();
-
+
rb2.begin();
ofSetColor(255,255,255);
rb1.draw(0,0);
@@ -225,22 +274,22 @@ void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift,
ofSetColor(255,255,255);
ofBackground(0,0,0);
//rb1.draw(0,0);
-
+
//map onto kinect skeleton
bindTexture(rb1);
-
+
glPushMatrix();
glScalef(ofGetWidth()/640.0f,ofGetHeight()/480.0f, 1);
for (int i=0;i<rUser->getNumberOfTrackedUsers();i++){
ofxTrackedUser* u=(rUser->getTrackedUser(i+1));
-
+
//if (u->skeletonTracking) {
if (u->neck.found) {
// u->debugDraw();
//ofxTrackedUser* u=
//printf("%i\n",(int)recordUser.getTrackedUser(i)->id);
//printf("tracking\n");
-
+
/*
glBegin(GL_QUADS);
glVertex3i(u->hip.position[0].X, u->hip.position[0].Y,u->hip.position[0].Z);
@@ -249,7 +298,7 @@ void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift,
glVertex3i(u->left_shoulder.position[1].X, u->left_shoulder.position[1].Y, u->left_shoulder.position[1].Z);
glEnd();
*/
-
+
/*
glBegin(GL_QUADS);
glVertex3i(u->hip.position[0].X, u->hip.position[0].Y,0);
@@ -258,40 +307,40 @@ void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift,
glVertex3i(u->left_shoulder.position[1].X, u->left_shoulder.position[1].Y,0);
glEnd();
*/
-
+
float ratio=16.0f/9.0f;
float heightratio=0.8f;
float widthratio=0.8f;
-
+
float ax=((float)(u->hip.position[1].X-u->hip.position[0].X)); //hip width x
float ay=((float)(u->hip.position[1].Y-u->hip.position[0].Y)); //hip width y
-
+
float cx=(float)(u->hip.position[0].X)+(ax*0.5f); //centre of hips
float cy=(float)(u->hip.position[0].Y)+(ay*0.5f);
-
+
float hx=(((float)(u->left_shoulder.position[0].X))-cx); //height of torso
float hy=(((float)(u->left_shoulder.position[0].Y))-cy);
-
+
float p1x=cx+(hx*(1.0f-heightratio)*0.5f); //centre of frame bottom
- float p1y=cy+(hy*(1.0f-heightratio)*0.5f);
-
+ float p1y=cy+(hy*(1.0f-heightratio)*0.5f);
+
float p2x=cx+(hx*(1.0f-((1.0f-heightratio)*0.5f))); //centre of frame top
float p2y=cy+(hy*(1.0f-((1.0f-heightratio)*0.5f)));
-
+
ofVec3f c1=ofVec3f(p2x-(ax*0.5*widthratio), p2y-(ay*0.5*widthratio),0);
ofVec3f c2=ofVec3f(p2x+(ax*0.5*widthratio), p2y+(ay*0.5*widthratio),0);
ofVec3f c3=ofVec3f(p1x-(ax*0.5*widthratio), p1y-(ay*0.5*widthratio),0);
ofVec3f c4=ofVec3f(p1x+(ax*0.5*widthratio), p1y+(ay*0.5*widthratio),0);
-
-
+
+
/*
ofVec3f c1=ofVec3f(u->left_shoulder.position[1].X, u->left_shoulder.position[1].Y,0);
ofVec3f c2=ofVec3f(u->right_shoulder.position[1].X, u->right_shoulder.position[1].Y,0);
ofVec3f c3=ofVec3f(u->hip.position[1].X, u->hip.position[1].Y,0);
ofVec3f c4=ofVec3f(u->hip.position[0].X, u->hip.position[0].Y,0);
*/
-
-
+
+
/*
glBegin(GL_QUADS);
glVertex3i(u->hip.position[1].X, u->hip.position[1].Y,0);
@@ -300,8 +349,8 @@ void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift,
glVertex3i(u->right_shoulder.position[1].X, u->right_shoulder.position[1].Y,0);
glEnd();
*/
-
-
+
+
ofMesh targ;
targ.addVertex(c1);
targ.addTexCoord(ofVec2f(0,0));
@@ -316,22 +365,22 @@ void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift,
targ.addVertex(c4);
targ.addTexCoord(ofVec2f(1,1));
targ.draw();
-
-
-
+
+
+
//ofLine(u->left_shoulder.position[1].X,u->left_shoulder.position[1].Y,u->left_shoulder.position[1].Z,u->right_shoulder.position[1].X,u->right_shoulder.position[1].Y,u->right_shoulder.position[1].Z);
ofLine(u->right_shoulder.position[1].X,u->right_shoulder.position[1].Y,u->right_shoulder.position[1].Z,u->right_lower_torso.position[1].X,u->right_lower_torso.position[1].Y,u->right_lower_torso.position[1].Z);
ofLine(u->right_lower_torso.position[1].X,u->right_lower_torso.position[1].Y,u->right_lower_torso.position[1].Z,u->left_lower_torso.position[1].X,u->left_lower_torso.position[1].Y,u->left_lower_torso.position[1].Z);
ofLine(u->left_lower_torso.position[1].X,u->left_lower_torso.position[1].Y,u->left_lower_torso.position[1].Z,u->left_shoulder.position[1].X,u->left_shoulder.position[1].Y,u->left_shoulder.position[1].Z);
-
+
}
}
glPopMatrix();
unbindTexture(rb1);
-
-
+
+
rb3.end();
-
+
ofPushMatrix();
ofTranslate(x+(w/2),y+(h/2));
ofRotate(r);
@@ -339,9 +388,32 @@ void viewport::mapdraw(float a,unsigned char* controllers,int xshift,int yshift,
ofTranslate(ox,oy);
rb3.draw(0,0);
-
+
ofPopStyle();
-
+
ofPopMatrix();
+}
+//--------------------------------------------------------------
+void viewport::setDefaults(){
+ vars[0].setVal(17.25);
+ vars[1].setVal(0.0);
+ vars[2].setVal(112.0);
+ vars[3].setVal(0.0);
+ vars[4].setVal(0.0);
+ vars[5].setVal(0.0);
+ vars[6].setVal(0.0);
+ vars[7].setVal(1000.0);
+ vars[8].setVal(0.0);
+}
+//--------------------------------------------------------------
+
+void viewport::keyPressed(int key){
+ for (int i=0;i<8;i++) vars[i].keyPressed(key);
+ if (DEBUG) printf("fov: %f distort: %f\n",vars[0].getVal(),vars[7].getVal());
+ if (key=='!') setDefaults();
+}
+//--------------------------------------------------------------
+void viewport::keyReleased(int key){
+ for (int i=0;i<8;i++) vars[i].keyReleased(key);
}
diff --git a/liveengine/src/viewport.h b/liveengine/src/viewport.h
index 4c3f948..51c56c8 100755
--- a/liveengine/src/viewport.h
+++ b/liveengine/src/viewport.h
@@ -17,38 +17,52 @@
void bindTexture(ofBaseHasTexture &t);
void unbindTexture(ofBaseHasTexture &t);
void bindTex(ofTexture &tex);
-void unbindTex(ofTexture &tex);
+void unbindTex(ofTexture &tex);
+
+#include "keyVar.h"
class viewport
{
public:
- viewport();
- viewport(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy);
+ viewport();
+ viewport(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy);
void setup(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy);
- void draw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift);
+ void draw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift);
void mapdraw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift);
-
- ofImage testtexture;
- virtual ~viewport();
- void setUG(ofxUserGenerator *_rUser);
- ofFbo rb1,rb2,rb3;
- float r;
- bool isMapped;
+ void setcam(map<string,string>&settings);
+ double getSetting(const string& setting);
+
+ ofImage testtexture;
+ virtual ~viewport();
+ void setUG(ofxUserGenerator *_rUser);
+ ofFbo rb1,rb2,rb3;
+ float r;
+ bool isMapped;
+
+ void setDefaults();
+ void keyPressed(int key);
+ void keyReleased(int key);
+
protected:
int x, y,w,h,ox,oy;
-
ofxUserGenerator *rUser;
private:
-
-
+ keyVar* vars;
+
+ ofCamera camera;
+ ofNode target;
+
};
class mappedviewport: public viewport {
- public:
+ public:
+
mappedviewport(int _w,int _h,int _x,int _y,float _r,int _ox,int _oy);
void setUG(ofxUserGenerator *_rUser);
void mapdraw(float a,unsigned char* controllers,int xshift,int yshift,playlist &list,bool transparentBlack,int note,int mode,ofColor* controller_colours,bool controlColours,float scale,float fscale,float colShift);
- ofxUserGenerator *rUser;
+ ofxUserGenerator *rUser;
+ private:
+
};
#endif // VIEWPORT_H
diff --git a/tshirtmapping/src/testApp.cpp b/tshirtmapping/src/testApp.cpp
index 0172617..dd00b8f 100755
--- a/tshirtmapping/src/testApp.cpp
+++ b/tshirtmapping/src/testApp.cpp
@@ -73,8 +73,8 @@ void testApp::setup(){
recordUser.setUseCloudPoints(draw3D);
recordUser.setMaxNumberOfUsers(2);
- target.setUseTexture(true);
- target.loadImage("target.png");
+ texture.setUseTexture(true);
+ texture.loadImage("target.png");
camRotationY=0;
@@ -90,16 +90,48 @@ void testApp::update(){
recordUser.update();
}
+void testApp::setCam(){
+
+ ofNode c=ofNode();
+ ofNode t=ofNode();
+ t.setParent(c);
+ t.setPosition(vars[1].getVal(),vars[2].getVal(),vars[3].getVal());
+ //make target controls relative to rotation
+ c.rotate(vars[5].getVal(), ofVec3f(0, 1, 0));
+
+ target.setPosition(t.getGlobalPosition());
+ //camera.orbit(vars[5].getVal(), vars[4].getVal(), vars[7].getVal(), target);
+ camera.setFov(vars[0].getVal());
+ if (vertigo) {
+ //distance=width/(2 tan (fov *0.5)
+ //multiply distance by ratio of tans of fov before and after
+ vars[7].setVal((tan((vars[0].readVal()-vars[0].inc)*PI*0.0027777)*vars[7].readVal())/tan(vars[0].readVal()*PI*0.0027777));
+ }
+
+
+
+ ofVec3f p(0, 0, vars[7].getVal());
+ //p.rotate(ofClamp(vars[2].getVal(), -89, 89), ofVec3f(1, 0, 0));
+ p.rotate(vars[4].getVal(), ofVec3f(1, 0, 0));
+ p.rotate(vars[5].getVal(), ofVec3f(0, 1, 0));
+ p += target.getPosition();
+ camera.setPosition(p);
+
+ camera.lookAt(target,ofVec3f(0,1,0).rotate(vars[6].getVal(),ofVec3f(0,0,1)).rotate(vars[5].getVal(),ofVec3f(0,1,0)));
+ light.setPosition(camera.getGlobalPosition());
+
+}
+
//--------------------------------------------------------------
void testApp::draw(){
ofSetColor(255, 255, 255);
- if(draw3D) {
+ if(!draw3D) {
//recordDepth.draw(0,0,ofGetWidth(),ofGetHeight());
recordUser.draw(ofGetWidth(),ofGetHeight());
ofSetColor(255,255,255);
ofSetLineWidth(5);
- bindTexture(target);
+ bindTexture(texture);
ofEnableAlphaBlending();
glPushMatrix();
glScalef(ofGetWidth()/640.0f,ofGetHeight()/480.0f, 1);
@@ -150,16 +182,17 @@ void testApp::draw(){
}
}
glPopMatrix();
- unbindTexture(target);
+ unbindTexture(texture);
}
- else { //3D
- glPushMatrix();
+ else { //3D -- works!
+ glPushMatrix();
int w = recordUser.getWidth();
int h = recordUser.getHeight();
glTranslatef(w, h/2, -500);
ofRotateY(camRotationY);
+ //camera.begin();
glBegin(GL_POINTS);
@@ -180,7 +213,7 @@ void testApp::draw(){
glColor3f(1.0f, 1.0f, 1.0f);
- bindTexture(target);
+ bindTexture(texture);
ofEnableAlphaBlending();
glPushMatrix();
//glScalef(ofGetWidth()/640.0f,ofGetHeight()/480.0f, 1);
@@ -236,8 +269,9 @@ void testApp::draw(){
}
}
glPopMatrix();
- unbindTexture(target);
+ unbindTexture(texture);
+ //camera.end();
glPopMatrix();
diff --git a/tshirtmapping/src/testApp.h b/tshirtmapping/src/testApp.h
index c18b950..9af276a 100755
--- a/tshirtmapping/src/testApp.h
+++ b/tshirtmapping/src/testApp.h
@@ -37,9 +37,12 @@ class testApp : public ofBaseApp{
int mode;
- ofImage target;
+ ofImage texture;
bool draw3D;
float camRotationY;
+
+ ofCamera camera;
+ ofNode target;
};
diff --git a/tshirtmapping/tshirtmapping.layout b/tshirtmapping/tshirtmapping.layout
index ffdc99c..fa3b053 100755
--- a/tshirtmapping/tshirtmapping.layout
+++ b/tshirtmapping/tshirtmapping.layout
@@ -4,19 +4,19 @@
<File name="../../openFrameworks/addons/ofxOpenNI/src/ofxUserGenerator.h" open="0" top="0" tabpos="0">
<Cursor position="2398" topLine="66" />
</File>
- <File name="Makefile" open="1" top="0" tabpos="4">
+ <File name="Makefile" open="0" top="0" tabpos="4">
<Cursor position="20" topLine="0" />
</File>
- <File name="addons.make" open="1" top="0" tabpos="5">
+ <File name="addons.make" open="0" top="0" tabpos="5">
<Cursor position="0" topLine="0" />
</File>
- <File name="config.make" open="1" top="0" tabpos="1">
+ <File name="config.make" open="0" top="0" tabpos="1">
<Cursor position="185" topLine="0" />
</File>
- <File name="src/testApp.cpp" open="1" top="1" tabpos="3">
- <Cursor position="8925" topLine="80" />
+ <File name="src/testApp.cpp" open="1" top="1" tabpos="2">
+ <Cursor position="2252" topLine="84" />
</File>
- <File name="src/testApp.h" open="1" top="0" tabpos="2">
- <Cursor position="987" topLine="11" />
+ <File name="src/testApp.h" open="1" top="0" tabpos="1">
+ <Cursor position="987" topLine="7" />
</File>
</CodeBlocks_layout_file>