diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/keyVar.cpp | 8 | ||||
| -rw-r--r-- | src/keyVar.h | 3 | ||||
| -rw-r--r-- | src/main.cpp | 4 | ||||
| -rw-r--r-- | src/testApp.cpp | 23 | ||||
| -rw-r--r-- | src/testApp.h | 1 | ||||
| -rw-r--r-- | src/viewpoint.cpp | 73 | ||||
| -rw-r--r-- | src/viewpoint.h | 4 |
7 files changed, 75 insertions, 41 deletions
diff --git a/src/keyVar.cpp b/src/keyVar.cpp index 06fd2bd..1bf562a 100644 --- a/src/keyVar.cpp +++ b/src/keyVar.cpp @@ -17,6 +17,7 @@ void keyVar::set(char _keyInc,char _keyDec,float _val,float _speed,float _accel, accelTime=_accelTime; state=0; timePressed=timeCalc=0; + inc=0; } void keyVar::keyPressed(char _key){ @@ -44,10 +45,15 @@ void keyVar::keyReleased(char _key){ } float keyVar::getVal(){ float segment = min(1.0f,(ofGetElapsedTimef()-timePressed)/accelTime); - if (state) val+=pow(segment,accel)*speed*state; //(ofGetElapsedTimef()-timeCalc)* + //if (state) + val+=pow(segment,accel)*speed*state; //(ofGetElapsedTimef()-timeCalc)* + inc=pow(segment,accel)*speed*state; timeCalc=ofGetElapsedTimef(); return val; } +float keyVar::readVal(){ + return val; +} float keyVar::getInc(){ float segment = min(1.0f,(ofGetElapsedTimef()-timePressed)/accelTime); return pow(segment,accel)*speed*state; diff --git a/src/keyVar.h b/src/keyVar.h index c68ffab..043a963 100644 --- a/src/keyVar.h +++ b/src/keyVar.h @@ -18,6 +18,9 @@ class keyVar{ float getVal(); float getInc(); void setVal(float _val); + + float readVal(); + float inc; //for syncing private: char keyInc,keyDec; diff --git a/src/main.cpp b/src/main.cpp index 7391c9e..a0adc83 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -17,8 +17,8 @@ int main( ){ ofAppGlutWindow window; - ofSetupOpenGL(&window, 2048,768, OF_FULLSCREEN); // <-------- setup the GL context - //ofSetupOpenGL(&window, 1024,300, OF_WINDOW); + //ofSetupOpenGL(&window, 2048,768, OF_FULLSCREEN); // <-------- setup the GL context + ofSetupOpenGL(&window, 1024,300, OF_WINDOW); glutIgnoreKeyRepeat(1); glutSetKeyRepeat(GLUT_KEY_REPEAT_OFF); //these don't work!!! printf("key repeat ignore: %i\n",glutDeviceGet(GLUT_DEVICE_IGNORE_KEY_REPEAT)); diff --git a/src/testApp.cpp b/src/testApp.cpp index 6f8b00f..5e0661e 100644 --- a/src/testApp.cpp +++ b/src/testApp.cpp @@ -30,7 +30,7 @@ void testApp::setup(){ //ofDisableArbTex(); - mode=DISPLAY; + mode=CALIBRATE; @@ -40,6 +40,7 @@ void testApp::setup(){ texture.play(); light=true; + } //-------------------------------------------------------------- @@ -95,15 +96,6 @@ void testApp::keyPressed(int key){ if (activeView<0) for (int i=0;i<numViews;i++) views[i].keyPressed(key); else if (activeView<numViews) views[activeView].keyPressed(key); switch (key) { - //'vertigo effect' always affects ALL VIEWPOINTS - case 'i': - for (int i=0;i<numViews;i++) views[i].keyPressed('o'); - for (int i=0;i<numViews;i++) views[i].keyPressed('s'); - break; - case 'k': - for (int i=0;i<numViews;i++) views[i].keyPressed('l'); - for (int i=0;i<numViews;i++) views[i].keyPressed('w'); - break; case '8': mode=CALIBRATE; break; @@ -153,17 +145,6 @@ void testApp::keyPressed(int key){ void testApp::keyReleased(int key){ if (activeView<0) for (int i=0;i<numViews;i++) views[i].keyReleased(key); else if (activeView<numViews) views[activeView].keyReleased(key); - switch (key) { - //'vertigo effect' always affects ALL VIEWPOINTS - case 'i': - for (int i=0;i<numViews;i++) views[i].keyReleased('o'); - for (int i=0;i<numViews;i++) views[i].keyReleased('s'); - break; - case 'k': - for (int i=0;i<numViews;i++) views[i].keyReleased('l'); - for (int i=0;i<numViews;i++) views[i].keyReleased('w'); - break; - } } void testApp::loadSettings(string filename){ diff --git a/src/testApp.h b/src/testApp.h index 2ed8732..24bcbe9 100644 --- a/src/testApp.h +++ b/src/testApp.h @@ -72,4 +72,5 @@ class testApp : public ofBaseApp{ ofxXmlSettings XML; bool light; + }; diff --git a/src/viewpoint.cpp b/src/viewpoint.cpp index 287cf26..fe8bb28 100644 --- a/src/viewpoint.cpp +++ b/src/viewpoint.cpp @@ -11,15 +11,15 @@ void viewpoint::setup(map<string,string>&settings){ window=ofRectangle(ofGetWidth()*x,ofGetHeight()*y,ofGetWidth()*w,ofGetHeight()*h); distortFactor=ofToFloat(settings["distort"]); renderFBO.allocate(window.width,window.height,GL_RGB); - + //todo: load/save from xml fov=17.25; aspect=1.79; near=1; far=20; - + 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); @@ -29,9 +29,11 @@ void viewpoint::setup(map<string,string>&settings){ 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); - + light.enable(); light.setDirectional(); + + vertigo=false; } double viewpoint::getSetting(const string& setting){ if (setting=="x") return x; @@ -53,15 +55,23 @@ double viewpoint::getSetting(const string& setting){ void viewpoint::setLight(){ target.setPosition(vars[1].getVal(),vars[2].getVal(),vars[3].getVal()); //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 viewpoint::setDefaults(){ vars[0].setVal(17.25); @@ -78,18 +88,17 @@ void viewpoint::setDefaults(){ void viewpoint::begin(){ renderFBO.begin(); ofClear(0,0,0); - + camera.begin(); - camera.setFov(vars[0].getVal()); } //-------------------------------------------------------------- void viewpoint::end(bool showStats){ - + camera.end(); renderFBO.end(); - + ofPushMatrix(); - + bindTexture(renderFBO); ofNoFill(); ofSetLineWidth(1.0); @@ -99,7 +108,7 @@ void viewpoint::end(bool showStats){ int xStep=window.width/2; int yStep=window.height/2; ofTranslate(window.x+xStep,window.y+yStep); - + //todo: distort texcoords instead of vertex coords for (float i = -1; i < 1.001; i+=(2.0f/gridY)){ glBegin(GL_QUAD_STRIP); @@ -115,24 +124,54 @@ void viewpoint::end(bool showStats){ } glEnd(); } - + ofFill(); unbindTexture(renderFBO); ofPopMatrix(); - + if (showStats) { ofSetHexColor(0xFFFFFF); - ofDrawBitmapString("camera: "+ofToString(camera.getX(), 2)+","+ofToString(camera.getY(), 2)+","+ofToString(camera.getZ(), 2)+" "+ofToString(vars[5].getVal())+"deg", window.x+10, window.y+window.height-30); - ofDrawBitmapString("light: "+ofToString(light.getX(), 2)+","+ofToString(light.getY(), 2)+","+ofToString(light.getZ(), 2), window.x+10, window.y+window.height-18); - } + //ofDrawBitmapString("camera: "+ofToString(camera.getX(), 2)+","+ofToString(camera.getY(), 2)+","+ofToString(camera.getZ(), 2)+" "+ofToString(vars[5].getVal())+"deg", window.x+10, window.y+window.height-30); + //ofDrawBitmapString("light: "+ofToString(light.getX(), 2)+","+ofToString(light.getY(), 2)+","+ofToString(light.getZ(), 2), window.x+10, window.y+window.height-18); + ofDrawBitmapString("fov: "+ofToString(vars[0].readVal(), 2)+" distance: "+ofToString(vars[7].readVal(), 2)+" distortion: "+ofToString(vars[8].readVal()), window.x+10, window.y+window.height-18); + } } //-------------------------------------------------------------- void viewpoint::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(); - } + switch(key) { + //'vertigo effect' always affects ALL VIEWPOINTS + //distance=width/(2 tan (fov *0.5) + // a way to 'back door' the variables? + // a new class that represents 2 linked variables? + case 'i': + vertigo=true; + //keyPressed('o'); + keyPressed('s'); + break; + case 'k': + vertigo=true; + //keyPressed('l'); + keyPressed('w'); + break; + } +} //-------------------------------------------------------------- void viewpoint::keyReleased(int key){ for (int i=0;i<8;i++) vars[i].keyReleased(key); + switch (key) { + //'vertigo effect' always affects ALL VIEWPOINTS + case 'i': + vertigo=false; + //keyReleased('o'); + keyReleased('s'); + break; + case 'k': + vertigo=false; + //keyReleased('l'); + keyReleased('w'); + break; + } } diff --git a/src/viewpoint.h b/src/viewpoint.h index 5ee9b63..399f84c 100644 --- a/src/viewpoint.h +++ b/src/viewpoint.h @@ -30,6 +30,9 @@ class viewpoint { ofFbo renderFBO; float distortFactor; + + bool vertigo; + private: @@ -50,5 +53,6 @@ class viewpoint { ofLight light; float x,y,w,h; + }; |
