summaryrefslogtreecommitdiff
path: root/src/testApp.cpp
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2011-12-19 13:44:25 +0000
committerTim Redfern <tim@eclectronics.org>2011-12-19 13:44:25 +0000
commit5523988d1729fe5c2757e046636d219639ee6724 (patch)
tree1d9043ea18ff611bd24f033c61a86f745ca804f8 /src/testApp.cpp
linux osx project initial
Diffstat (limited to 'src/testApp.cpp')
-rw-r--r--src/testApp.cpp409
1 files changed, 409 insertions, 0 deletions
diff --git a/src/testApp.cpp b/src/testApp.cpp
new file mode 100644
index 0000000..439f668
--- /dev/null
+++ b/src/testApp.cpp
@@ -0,0 +1,409 @@
+#include "testApp.h"
+GLfloat lightOnePosition[] = {40.0, 40, 100.0, 0.0};
+GLfloat lightOneColor[] = {0.99, 0.99, 0.99, 0.5};
+
+GLfloat lightTwoPosition[] = {-40.0, 40, 100.0, 0.0};
+GLfloat lightTwoColor[] = {0.99, 0.99, 0.99, 0.5};
+
+//--------------------------------------------------------------
+void testApp::setup(){
+ ofBackground(0,0,0);
+
+ ///ofSetVerticalSync(true);
+
+ //some model / light stuff
+ glEnable (GL_DEPTH_TEST);
+ glShadeModel (GL_SMOOTH);
+
+ /* initialize lighting */
+ glLightfv (GL_LIGHT0, GL_POSITION, lightOnePosition);
+ glLightfv (GL_LIGHT0, GL_DIFFUSE, lightOneColor);
+ glEnable (GL_LIGHT0);
+ glLightfv (GL_LIGHT1, GL_POSITION, lightTwoPosition);
+ glLightfv (GL_LIGHT1, GL_DIFFUSE, lightTwoColor);
+ glEnable (GL_LIGHT1);
+ glEnable (GL_LIGHTING);
+ glColorMaterial (GL_FRONT_AND_BACK, GL_DIFFUSE);
+ glEnable (GL_COLOR_MATERIAL);
+
+ //load the bottle model - the 3ds and the texture file need to be in the same folder
+ bottle.loadModel("bottle.3DS", 1);
+ board.loadModel("box.3DS", 1);
+ //bottle.setRotation(0, 180, 1, 0, 0);
+ //board.setRotation(0, 180, 1, 0, 0);
+
+ //you can create as many rotations as you want
+ //choose which axis you want it to effect
+ //you can update these rotations later on
+ //bottleModel.setRotation(0, -90, 1, 0, 0);
+ //bottleModel.setRotation(1, 270, 0, 0, 1);
+ //bottleModel.setScale(0.9, 0.9, 0.9);
+ bottle.setPosition(ofGetWidth()/2, ofGetHeight()/2, -50);
+ board.setPosition(ofGetWidth()/2, ofGetHeight()/2, -50);
+
+ //ofDisableArbTex();
+
+ texture.loadMovie("gradblend01.mov");
+ texture.play();
+
+ distortFactor=0.0;
+
+ renderFBO.allocate(ofGetWidth(),ofGetHeight(),GL_RGB);
+
+ mode=CALIBRATE;
+
+ //approx 200 x 108 x 60
+ //275:492
+ //vfov = sin t/2 = 30/200 = 0.15
+ fov=17.25;
+ aspect=1.79;
+ near=0;
+ far=3000;
+
+ cx=0;
+ cy=0;
+ cz=-100;
+
+ crx=cry=0;
+
+ ex=0;
+ ey=0;
+ ez=0;
+
+
+
+}
+
+//--------------------------------------------------------------
+void testApp::update(){
+ board.setRotation(1, 270 + ofGetElapsedTimef() * 60, 0, 1, 0);
+ texture.idleMovie();
+}
+
+//--------------------------------------------------------------
+void testApp::draw(){
+ //ofPushView();
+ //glMatrixMode(GL_PROJECTION);
+ //glLoadIdentity();
+ //gluPerspective(fov,aspect,near,far);
+ // glTranslatef(0,0,-1000);
+ //glMatrixMode(GL_MODELVIEW);
+ // glLoadMatrixf(ofMatrix4x4::getInverseOf(getGlobalTransformMatrix()).getPtr());
+
+ //glEnable(GL_LIGHTING);
+ //ofRectangle vp=ofRectangle(0,0,ofGetWidth(),ofGetHeight());
+ //camera.setFov(fov);
+ camera.begin();
+ camera.setPosition(cx, cy, cz);
+ ofRotateY(cry);
+ ofRotateX(crx);
+ camera.setFov(fov);
+ ofVec3f lookAt;
+ lookAt.set(ex,ey,ez);
+ camera.lookAt(lookAt);
+
+ glPushMatrix();
+
+ /*
+
+ //fake back wall
+ ofSetColor(220, 20, 20);
+ glBegin(GL_QUADS);
+ glVertex3f(0.0, ofGetHeight(), -600);
+ glVertex3f(ofGetWidth(), ofGetHeight(), -600);
+ glVertex3f(ofGetWidth(), 0, -600);
+ glVertex3f(0, 0, -600);
+ glEnd();
+
+ //fake wall
+ ofSetColor(50, 150, 50);
+ glBegin(GL_QUADS);
+ glVertex3f(0.0, ofGetHeight(), 0);
+ glVertex3f(ofGetWidth(), ofGetHeight(), 0);
+ glVertex3f(ofGetWidth(), ofGetHeight(), -600);
+ glVertex3f(0, ofGetHeight(), -600);
+ glEnd();
+ */
+ //draw in middle of the screen
+ //glPushMatrix();
+ //glTranslatef(ofGetWidth()/2,ofGetHeight()/2,0);
+/*
+ //lets tumble the world with the mouse
+ glPushMatrix();
+
+
+ //tumble according to mouse
+ glRotatef(-mouseY,1,0,0);
+ glRotatef(mouseX,0,1,0);
+ glTranslatef(-ofGetWidth()/2,-ofGetHeight()/2,0);
+*/
+ ofSetColor(255, 255, 255, 255);
+ ofFill();
+
+ //renderFBO.begin(); //render to FOB
+ ofClear(0,0,0);
+
+ switch(mode) {
+ case CALIBRATE:
+
+ glPushMatrix();
+ glTranslatef(ofGetWidth(),(ofGetHeight())+100,0);
+ //board.draw();
+
+ int cx,cz;
+
+ glFrontFace(GL_CW);
+ glBegin(GL_QUADS);
+ for (int i=0;i<8;i++) {
+ for (int j=0;j<4;j++) {
+ cx=((i%2)*16)+(j*32)-56;
+ cz=(i*16)-56;
+ glVertex3f(cx+8, 0, cz-8);
+ glVertex3f(cx+8, 0, cz+8);
+ glVertex3f(cx-8, 0, cz+8);
+ glVertex3f(cx-8, 0, cz-8);
+
+ }
+ }
+ //glEnd();
+
+
+/*
+ glBegin(GL_QUADS);
+ glVertex3f(-100, 0,-100);
+ glVertex3f(100, 0,-100);
+ glVertex3f(100, 0,100);
+ glVertex3f(-100, 0,100);
+ glEnd();
+ */
+ glPopMatrix();
+ glFrontFace(GL_CCW);
+ bottle.draw();
+
+ break;
+ case DISPLAY:
+
+ board.draw();
+ bindTexture(texture);
+ bottle.draw();
+ unbindTexture(texture);
+ break;
+ }
+ glPopMatrix();
+ camera.end();
+
+
+
+
+ //texture.getTextureReference().bind();
+
+
+/*
+ glBegin(GL_QUAD_STRIP);
+ glTexCoord2f (0.0, 0.0);
+ glVertex3f(ofGetWidth()/4,ofGetHeight()/4,0);
+ glTexCoord2f (0.0, 1.0);
+ glVertex3f(ofGetWidth()/4,(3*ofGetHeight())/4,0);
+ glTexCoord2f (1.0, 0.0);
+ glVertex3f((3*ofGetWidth())/4,ofGetHeight()/4,0);
+ glTexCoord2f (1.0, 1.0);
+ glVertex3f((3*ofGetWidth())/4,(3*ofGetHeight())/4,0);
+ glEnd();
+ */
+
+ //texture.getTextureReference().unbind();
+
+
+/*
+ renderFBO.end();
+
+ //glPopMatrix();
+
+ //renderFBO.draw(0,0);
+
+ glPushMatrix();
+
+ //renderFBO.getTextureReference().bind();
+ 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();
+
+ //renderFBO.getTextureReference().unbind();
+ unbindTexture(renderFBO);
+
+ ofSetHexColor(0x000000);
+ ofDrawBitmapString("fps: "+ofToString(ofGetFrameRate(), 2), 10, 15);
+
+
+ // add polygons here
+ //glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
+ */
+
+}
+
+//--------------------------------------------------------------
+void testApp::keyPressed(int key){
+ switch (key) {
+ case 'q':
+ distortFactor-=0.001f;
+ break;
+ case 'a':
+ distortFactor+=0.001f;
+ break;
+ case 'w':
+ fov*=0.99;
+ break;
+ case 's':
+ fov*=1.01;
+ break;
+ case '1':
+ mode=CALIBRATE;
+ break;
+ case '2':
+ mode=DISPLAY;
+ break;
+
+ //nav stuff
+ case 'g':
+ ex+=0.1;
+ break;
+ case 'd':
+ ex-=0.1;
+ break;
+ case 'r':
+ ey+=0.1;
+ break;
+ case 'v':
+ ey-=0.1;
+ break;
+ case 'c':
+ ez+=0.1;
+ break;
+ case 't':
+ ez-=0.1;
+ break;
+
+ case 'h':
+ crx+1;
+ break;
+ case 'j':
+ cry-=1;
+ break;
+ case 'u':
+ //rotate camera in Y
+ break;
+ case 'n':
+ //rotate camera in Y
+ break;
+
+ case 'o':
+ //dolly IN
+ break;
+ case 'l':
+ //dolly OUT
+ break;
+
+
+
+ }
+ printf("fov: %f, mode: %d, distortion: %f\n",fov,mode,distortFactor);
+
+}
+
+//--------------------------------------------------------------
+void testApp::keyReleased(int key){
+
+}
+
+//--------------------------------------------------------------
+void testApp::mouseMoved(int x, int y ){
+
+}
+
+//--------------------------------------------------------------
+void testApp::mouseDragged(int x, int y, int button){
+
+}
+
+//--------------------------------------------------------------
+void testApp::mousePressed(int x, int y, int button){
+
+}
+
+//--------------------------------------------------------------
+void testApp::mouseReleased(int x, int y, int button){
+
+}
+
+//--------------------------------------------------------------
+void testApp::windowResized(int w, int h){
+
+}
+
+//--------------------------------------------------------------
+void testApp::gotMessage(ofMessage msg){
+
+}
+
+//--------------------------------------------------------------
+void testApp::dragEvent(ofDragInfo dragInfo){
+
+}
+void testApp::bindTexture(ofBaseHasTexture &t) {
+ ofTexture &tex = t.getTextureReference();
+ tex.bind();
+
+ glMatrixMode(GL_TEXTURE);
+ glPushMatrix();
+ glLoadIdentity();
+
+ ofTextureData texData = tex.getTextureData();
+ if(texData.textureTarget == GL_TEXTURE_RECTANGLE_ARB) {
+ glScalef(tex.getWidth(), tex.getHeight(), 1.0f);
+ } else {
+ glScalef(tex.getWidth() / texData.tex_w, tex.getHeight() / texData.tex_h, 1.0f);
+ }
+
+ glMatrixMode(GL_MODELVIEW);
+}
+void testApp::unbindTexture(ofBaseHasTexture &t) {
+ t.getTextureReference().unbind();
+
+ glMatrixMode(GL_TEXTURE);
+ glPopMatrix();
+ glMatrixMode(GL_MODELVIEW);
+}
+ofPoint testApp::distort(ofPoint pt,float d){
+ //normalised coords -1..1, d
+ float r=pow(pow(pow(pt.x,2.0f)+pow(pt.y,2.0f),0.5f),1.0f+d);
+ float a=atan2f(pt.x,pt.y);
+ return ofPoint(r*sin(a),r*cos(a));
+};
+