From 084c8a9b85b853fa630d5a102cd102b45d543abf Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Tue, 20 Dec 2011 18:31:56 +0000 Subject: building multiple views --- src/viewpoint.cpp | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/viewpoint.cpp (limited to 'src/viewpoint.cpp') diff --git a/src/viewpoint.cpp b/src/viewpoint.cpp new file mode 100644 index 0000000..249084f --- /dev/null +++ b/src/viewpoint.cpp @@ -0,0 +1,88 @@ +#include "viewpoint.h" + +void viewpoint::setup(float w, float h, float x, float y) { + window=ofRectangle(w,h,x,y); + distortFactor=0.0; + renderFBO.allocate(window.width,window.height,GL_RGB); + + //todo: load/save from xml + fov=17.25; + aspect=1.79; + near=1; + far=20; + + camera.setParent(target); + camera.setPosition(0,0,200); + + vars=new keyVar[8]; + + //void set(char _keyInc,char _keyDec,float _val,float _speed,float _accel,float accelTime); + vars[0].set('w','s',17.25,0.5,2.0,3.0); + vars[1].set('g','d',0.0,0.2,3.0,3.0); + vars[2].set('r','v',0.0,0.2,3.0,3.0); + vars[3].set('t','c',0.0,0.2,3.0,3.0); + vars[4].set('u','n',0.0,1.0,3.0,3.0); + vars[5].set('j','h',0.0,1.0,3.0,3.0); + vars[6].set('o','l',0.0,0.2,3.0,3.0); + vars[7].set('q','a',0,0.1,2.0,3.0); +} +//-------------------------------------------------------------- +void viewpoint::begin(){ + camera.begin(); + camera.setFov(vars[0].getVal()); + target.setPosition(vars[1].getVal(),vars[2].getVal(),vars[3].getVal()); + target.rotate(vars[4].getInc(),1,0,0); + target.rotate(vars[5].getInc(),0,1,0); + camera.move(0,0,vars[6].getInc()); + + renderFBO.begin(); + ofClear(0,0,0); +} +//-------------------------------------------------------------- +void viewpoint::end(){ + + renderFBO.end(); + camera.end(); + + glPushMatrix(); + bindTexture(renderFBO); + //draw a grid + //glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); + ofNoFill(); + + ofSetLineWidth(1.0); + //ofSetColor(I_fade1,I_fade1,I_fade1); + int gridX=50; + int gridY=50; + int xStep=ofGetWidth()/2; + int yStep=ofGetHeight()/2; + ofTranslate(ofGetWidth()/2,ofGetHeight()/2); + + for (float i = -1; i < 1.001; i+=(2.0f/gridY)){ + glBegin(GL_QUAD_STRIP); + ofPoint p0; + ofPoint p1; + for (float j = -1; j < 1.001; j+=(2.0f/gridX)){ + p0=distort(ofPoint(j,i-(2.0f/gridY)),distortFactor); + p1=distort(ofPoint(j,i),distortFactor); + glTexCoord2f((j+1)*0.5,((i-(2.0f/gridY))+1)*0.5); + glVertex3f(p0.x*xStep,p0.y*yStep,0); + glTexCoord2f((j+1)*0.5,(i+1)*0.5); + glVertex3f(p1.x*xStep,p1.y*yStep,0); + } + glEnd(); + } + + ofFill(); + glPopMatrix(); + unbindTexture(renderFBO); + +} +//-------------------------------------------------------------- +void viewpoint::keyPressed(int key){ + for (int i=0;i<8;i++) vars[i].keyPressed(key); + } +//-------------------------------------------------------------- +void viewpoint::keyReleased(int key){ + for (int i=0;i<8;i++) vars[i].keyReleased(key); +} -- cgit v1.2.3