From 6eb389d8c8b9a6f75e291d359a7708d2944a156d Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Wed, 11 Jan 2012 15:08:39 +0000 Subject: added rotation - need to address gimbal lock --- src/viewpoint.cpp | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) (limited to 'src/viewpoint.cpp') diff --git a/src/viewpoint.cpp b/src/viewpoint.cpp index d354edd..1635cfd 100644 --- a/src/viewpoint.cpp +++ b/src/viewpoint.cpp @@ -14,7 +14,7 @@ void viewpoint::setup(map&settings){ near=1; far=20; - vars=new keyVar[8]; + 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); @@ -22,8 +22,9 @@ void viewpoint::setup(map&settings){ 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('o','l',ofToFloat(settings["dolly"]),1,1.0,3.0); - vars[7].set('q','a',ofToFloat(settings["distort"]),.00001,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); light.enable(); light.setDirectional(); @@ -39,15 +40,16 @@ double viewpoint::getSetting(const string& setting){ 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[7].getVal(); + if (setting=="distort") return vars[8].getVal(); return 0.0; } //-------------------------------------------------------------- void viewpoint::setLight(){ target.setPosition(vars[1].getVal(),vars[2].getVal(),vars[3].getVal()); - camera.orbit(vars[5].getVal(), vars[4].getVal(), vars[6].getVal(), target); - camera.lookAt(target,ofVec3f(0,1,0)); + camera.orbit(vars[5].getVal(), vars[4].getVal(), vars[7].getVal(), target); + camera.lookAt(target,ofVec3f(0,1,0).rotate(vars[6].getVal(),ofVec3f(0,0,1))); light.setPosition(camera.getGlobalPosition()); } void viewpoint::setDefaults(){ @@ -57,8 +59,9 @@ void viewpoint::setDefaults(){ vars[3].setVal(0.0); vars[4].setVal(0.0); vars[5].setVal(0.0); - vars[6].setVal(1000.0); - vars[7].setVal(0.0); + vars[6].setVal(0.0); + vars[7].setVal(1000.0); + vars[8].setVal(0.0); } //-------------------------------------------------------------- void viewpoint::begin(){ @@ -69,9 +72,9 @@ void viewpoint::begin(){ camera.setFov(vars[0].getVal()); } //-------------------------------------------------------------- -void viewpoint::end(){ - camera.end(); +void viewpoint::end(bool showStats){ + camera.end(); renderFBO.end(); ofPushMatrix(); @@ -92,8 +95,8 @@ void viewpoint::end(){ ofPoint p0; ofPoint p1; for (float j = -1; j < 1.001; j+=(2.0f/gridX)){ - p0=distort(ofPoint(j,i-(2.0f/gridY)),vars[7].getVal()); - p1=distort(ofPoint(j,i),vars[7].getVal()); + p0=distort(ofPoint(j,i-(2.0f/gridY)),vars[8].getVal()); + p1=distort(ofPoint(j,i),vars[8].getVal()); glTexCoord2f((j+1)*0.5,((i-(2.0f/gridY))+1)*0.5); glVertex3f(p0.x*xStep,p0.y*yStep,-0.1); glTexCoord2f((j+1)*0.5,(i+1)*0.5); @@ -106,9 +109,11 @@ void viewpoint::end(){ unbindTexture(renderFBO); ofPopMatrix(); - ofSetHexColor(0xFFFFFF); - ofDrawBitmapString("camera: "+ofToString(camera.getX(), 2)+","+ofToString(camera.getY(), 2)+","+ofToString(camera.getZ(), 2), 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); + if (showStats) { + ofSetHexColor(0xFFFFFF); + ofDrawBitmapString("camera: "+ofToString(camera.getX(), 2)+","+ofToString(camera.getY(), 2)+","+ofToString(camera.getZ(), 2), 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); + } } //-------------------------------------------------------------- void viewpoint::keyPressed(int key){ -- cgit v1.2.3