summaryrefslogtreecommitdiff
path: root/src/viewpoint.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/viewpoint.cpp')
-rw-r--r--src/viewpoint.cpp88
1 files changed, 88 insertions, 0 deletions
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);
+}