summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/keyVar.cpp8
-rw-r--r--src/keyVar.h3
-rw-r--r--src/main.cpp4
-rw-r--r--src/testApp.cpp23
-rw-r--r--src/testApp.h1
-rw-r--r--src/viewpoint.cpp73
-rw-r--r--src/viewpoint.h4
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;
+
};