AAGui.cpp
Go to the documentation of this file.
00001 /*********************************************************************
00002 * Software License Agreement (BSD License)
00003 *
00004 *  Copyright (c) 2010, LABUST, UNIZG-FER
00005 *  All rights reserved.
00006 *
00007 *  Redistribution and use in source and binary forms, with or without
00008 *  modification, are permitted provided that the following conditions
00009 *  are met:
00010 *
00011 *   * Redistributions of source code must retain the above copyright
00012 *     notice, this list of conditions and the following disclaimer.
00013 *   * Redistributions in binary form must reproduce the above
00014 *     copyright notice, this list of conditions and the following
00015 *     disclaimer in the documentation and/or other materials provided
00016 *     with the distribution.
00017 *   * Neither the name of the LABUST nor the names of its
00018 *     contributors may be used to endorse or promote products derived
00019 *     from this software without specific prior written permission.
00020 *
00021 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00024 *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00025 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00026 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00027 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00028 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029 *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00030 *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00031 *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032 *  POSSIBILITY OF SUCH DAMAGE.
00033 *
00034 *  Created on: 13.06.2013.
00035 *  Author: Dula Nad
00036 *********************************************************************/
00037 #include <labust/gui/AAGui.hpp>
00038 #include <GL/glut.h>
00039 #include <SOIL/SOIL.h>
00040 #include <fmod/fmod.hpp>
00041 #include <fmod/fmod_errors.h>
00042 #include <fmod/fmod_event.hpp>
00043 #include <fmod/fmod_event_net.hpp>
00044 #include <iostream>
00045 #include <fstream>
00046 #include <cmath>
00047 
00048 using labust::gui::AAGui;
00049 
00050 //int width = 500;
00051 //int height = 500;
00052 //
00054 //GLuint texture;
00055 //GLuint skyboxTexture[6];
00056 //
00058 //struct Polygon
00059 //{
00060 //      int numVertices;
00061 //      int indicesOffset;
00062 //      float directOcclusion;
00063 //      float reverbOcclusion;
00064 //      FMOD_VECTOR normal;
00065 //};
00066 //
00067 //struct Mesh
00068 //{
00069 //      int numVertices;
00070 //      FMOD_VECTOR *vertices;
00071 //      float (*texcoords)[2];
00072 //      int numPolygons;
00073 //      Polygon* polygons;
00074 //      int numIndices;
00075 //      int *indices;
00076 //      FMOD::Geometry *geometry;
00077 //};
00078 //
00079 //class GlutCloseClass
00080 //{
00081 //  public:
00082 //    GlutCloseClass() {};
00083 //   ~GlutCloseClass();
00084 //};
00085 //
00086 //GlutCloseClass gCloseObject;
00087 //
00088 //Mesh walls;
00089 //Mesh rotatingMesh;
00090 //
00091 //void display(void);
00092 //void reshapeFunc(int w, int h);
00093 //void mouseFunc(int button, int state, int x, int y);
00094 //void motionFunc(int x, int y);
00095 //void specialKeyUpFunc(int key, int x, int y);
00096 void specialKeyFunc(int key, int x, int y);
00097 //void keyboardUpFunc(unsigned char key, int x, int y);
00098 //void keyboardFunc(unsigned char key, int x, int y);
00099 //void timerFunc(int nValue);
00100 GLuint loadTexture(const char *filename);
00101 GLuint loadTexturePNG(const char *filename);
00102 //void initGeometry(const char* szFileName, Mesh& mesh, bool alter = false);
00103 //void ERRCHECK(FMOD_RESULT result);
00104 
00105 int INTERFACE_UPDATETIME = 15;
00106 
00107 AAGui::AAGui()
00108 {
00109         this->init();
00110 }
00111 
00112 void AAGui::start()
00113 {
00114         glutMainLoop();
00115 }
00116 
00117 AAGui::AAGui(const std::string& path)
00118 {
00119         this->init();
00120         this->loadTextures(path);
00121 }
00122 
00123 int width = 500;
00124 int height = 500;
00125 
00126 void AAGui::init()
00127 {
00128         int argc(0);
00129         char* argv[0];
00130         //No glut configuration is needed really
00131         glutInit(&argc, argv);
00132 
00133         glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
00134         glutInitWindowSize(width, height);
00135         glutCreateWindow("Audio guidance");
00136 //      glutDisplayFunc(display);
00137 //      glutReshapeFunc(reshapeFunc);
00138 //      glutMouseFunc(mouseFunc);
00139 //      glutMotionFunc(motionFunc);
00140 //      glutKeyboardFunc(keyboardFunc);
00141 //      glutKeyboardUpFunc(keyboardUpFunc);
00142     glutSpecialFunc(specialKeyFunc);
00143 //  glutSpecialUpFunc(specialKeyUpFunc);
00144 }
00145 
00146 void AAGui::loadTextures(const std::string& path)
00147 {
00148   std::cout<<"Loading textures from "<<path<<std::endl;
00149         texture = loadTexture((path + "/texture.img").c_str());
00150   skyboxTexture[0] = loadTexturePNG((path + "/front.png").c_str());
00151   skyboxTexture[1] = loadTexturePNG((path + "/right.png").c_str());
00152   skyboxTexture[2] = loadTexturePNG((path + "/back.png").c_str());
00153   skyboxTexture[3] = loadTexturePNG((path + "/left.png").c_str());
00154   skyboxTexture[4] = loadTexturePNG((path + "/top.png").c_str());
00155   skyboxTexture[5] = loadTexturePNG((path + "/bottom.png").c_str());
00156   std::cout<<"done.\n";
00157 
00158         // setup lighting
00159         GLfloat lightDiffuse[] = {1.0, 1.0, 1.0, 1.0};
00160         GLfloat lightPosition[] = {300.0, 1000.0, 400.0, 0.0};
00161         GLfloat lightAmbiant[] = {1.25, 1.25, 1.25, 1.0};
00162         glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse);
00163         glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
00164         glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbiant);
00165         glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, 1.0f);
00166         glEnable(GL_LIGHT0);
00167         glEnable(GL_LIGHTING);
00168 
00169    // setup fog(water)
00170    GLfloat      fogColor[4] = {0.0f,0.1f,0.9f,1.0f};
00171 
00172         glFogi(GL_FOG_MODE, GL_EXP);        // Fog Mode
00173         glFogfv(GL_FOG_COLOR, fogColor);    // Set Fog Color
00174         glFogf(GL_FOG_DENSITY, 0.15f);      // How Dense Will The Fog Be
00175         glHint(GL_FOG_HINT, GL_DONT_CARE);      // Fog Hint Value
00176         glFogf(GL_FOG_START, 0.0f);                     // Fog Start Depth
00177         glFogf(GL_FOG_END, 1.0f);                       // Fog End Depth
00178 
00179         glEnable(GL_DEPTH_TEST);
00180 
00181         glMatrixMode(GL_MODELVIEW);
00182         glLoadIdentity();
00183 }
00184 
00185 void AAGui::drawSkyBox(float xListenerPos, float yListenerPos)
00186 {
00187         glPushMatrix();
00188         glTranslatef(xListenerPos, 0.0f, yListenerPos);
00189         glDisable(GL_LIGHTING);
00190         /*
00191           Walls
00192          */
00193         glBindTexture(GL_TEXTURE_2D, skyboxTexture[0]);
00194         glBegin(GL_QUADS);
00195         glTexCoord2f(1.0f, 1.0f); glVertex3f(-150.0f, -150.0f, -150.0f);
00196         glTexCoord2f(1.0f, 0.0f); glVertex3f(-150.0f, 150.0f, -150.0f);
00197         glTexCoord2f(0.0f, 0.0f); glVertex3f(150.0f, 150.0f, -150.0f);
00198         glTexCoord2f(0.0f, 1.0f);  glVertex3f(150.0f, -150.0f, -150.0f);
00199         glEnd();
00200 
00201         glBindTexture(GL_TEXTURE_2D, skyboxTexture[1]);
00202         glBegin(GL_QUADS);
00203         glTexCoord2f(1.0f, 1.0f); glVertex3f(150.0f, -150.0f, -150.0f);
00204         glTexCoord2f(1.0f, 0.0f); glVertex3f(150.0f, 150.0f,-150.0f);
00205         glTexCoord2f(0.0f, 0.0f); glVertex3f(150.0f, 150.0f, 150.0f);
00206         glTexCoord2f(0.0f, 1.0f); glVertex3f(150.0f, -150.0f, 150.0f);
00207         glEnd();
00208 
00209         glBindTexture(GL_TEXTURE_2D, skyboxTexture[2]);
00210         glBegin(GL_QUADS);
00211         glTexCoord2f(0.0f, 1.0f); glVertex3f(-150.0f, -150.0f, 150.0f);
00212         glTexCoord2f(0.0f, 0.0f); glVertex3f(-150.0f, 150.0f, 150.0f);
00213         glTexCoord2f(1.0f, 0.0f); glVertex3f(150.0f, 150.0f, 150.0f);
00214         glTexCoord2f(1.0f, 1.0f); glVertex3f(150.0f, -150.0f, 150.0f);
00215         glEnd();
00216 
00217         glBindTexture(GL_TEXTURE_2D, skyboxTexture[3]);
00218         glBegin(GL_QUADS);
00219         glTexCoord2f(0.0f, 1.0f); glVertex3f(-150.0f, -150.0f, -150.0f);
00220         glTexCoord2f(0.0f, 0.0f); glVertex3f(-150.0f, 150.0f, -150.0f);
00221         glTexCoord2f(1.0f, 0.0f); glVertex3f(-150.0f, 150.0f, 150.0f);
00222         glTexCoord2f(1.0f, 1.0f); glVertex3f(-150.0f, -150.0f, 150.0f);
00223         glEnd();
00224 
00225         /*
00226           Top
00227          */
00228         glBindTexture(GL_TEXTURE_2D, skyboxTexture[4]);
00229         glBegin(GL_QUADS);
00230         glTexCoord2f(1.0f, 0.0f); glVertex3f(-150.0f, 150.0f, -150.0f);
00231         glTexCoord2f(1.0f, 1.0f); glVertex3f(150.0f, 150.0f, -150.0f);
00232         glTexCoord2f(0.0f, 1.0f); glVertex3f(150.0f, 150.0f, 150.0f);
00233         glTexCoord2f(0.0f, 0.0f); glVertex3f(-150.0f, 150.0f, 150.0f);
00234         glEnd();
00235 
00236         /*
00237           Bottom
00238          */
00239         glBindTexture(GL_TEXTURE_2D, skyboxTexture[5]);
00240         glBegin(GL_QUADS);
00241         glTexCoord2f(0.0f, 1.0f); glVertex3f(-150.0f, -150.0f, -150.0f);
00242         glTexCoord2f(0.0f, 0.0f); glVertex3f(150.0f, -150.0f, -150.0f);
00243         glTexCoord2f(1.0f, 0.0f); glVertex3f(150.0f, -150.0f, 150.0f);
00244         glTexCoord2f(1.0f, 1.0f); glVertex3f(-150.0f, -150.0f, 150.0f);
00245         glEnd();
00246 
00247         glEnable(GL_LIGHTING);
00248         glPopMatrix();
00249 }
00250 
00251 //
00252 //void display(void)
00253 //{
00254 //    // Show listener position
00255 //    {
00256 //        char text[64];
00257 //
00258 //        sprintf(text, "Listener Pos: (%.2f, %.2f, %.2f)", xListenerPos, yListenerPos, zListenerPos);
00259 //        #ifdef SHOW_GUI_DEBUG_TEXT
00260 //        debugText.push(std::string(text));
00261 //        #endif
00262 //    }
00263 //    // Show cpu usage position
00264 //    {
00265 //        char text[64];
00266 //        float dsp, stream, geometry, update, total;
00267 //
00268 //        fmodSystem->getCPUUsage(&dsp, &stream, &geometry, &update, &total);
00269 //        sprintf(text, "CPU Usage : (%.2f, %.2f, %.2f, %.2f, %.2f)", dsp, stream, geometry, update, total);
00270 //        #ifdef SHOW_GUI_DEBUG_TEXT
00271 //        debugText.push(std::string(text));
00272 //        #endif
00273 //    }
00274 //
00275 //    /*
00276 //        3D RENDERING
00277 //    */
00278 //
00279 //      // update view
00280 //      glMatrixMode(GL_PROJECTION);
00281 //      glLoadIdentity();
00282 //      gluPerspective(
00283 //              60.0,                                                           // fov
00284 //              (float)width / (float)height,           // aspect
00285 //              0.1,                                                            // near
00286 //              500.0                                                           // far
00287 //              );
00288 //
00289 //
00290 //      glRotatef(xRotation, 1.0f, 0.0f, 0.0f);
00291 //      glRotatef(yRotation, 0.0f, 1.0f, 0.0f);
00292 //      glTranslatef(-xListenerPosRel, -yListenerPos, -zListenerPosRel);
00293 //      glMatrixMode(GL_MODELVIEW);
00294 //      glLoadIdentity();
00295 //
00296 //      // clear
00297 //      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
00298 //      glClearColor(0.4, 0.6f, 1.0f, 0.0f);
00299 //
00300 //      glEnable(GL_TEXTURE_2D);
00301 //      glBindTexture( GL_TEXTURE_2D, texture );
00302 //
00303 //      // draw geometry
00304 //      drawGeometry(walls);
00305 //      drawGeometry(rotatingMesh);
00306 //
00307 //    // draw skybox
00308 //    drawSkyBox();
00309 //
00310 //      glDisable(GL_TEXTURE_2D);
00311 //
00312 //      // draw sound objects
00313 //      int object;
00314 //      if (TaskMode == 3)
00315 //              {object=6;}
00316 //      else
00317 //              {object=0;}
00318 //      //for (object = 0; object < NUM_OBJECTS-6; object++)
00319 //      {
00320 //        char txt[256];
00321 //
00322 //
00323 //              float directOcclusion = 1.0f;
00324 //              float reverbOcclusion = 1.0f;
00325 //
00326 //              // set colour baced on direct occlusion
00328 //              float intensity = 1.0f;// - directOcclusion;
00329 //
00330 //              glPolygonMode(GL_FRONT_AND_BACK, rendermode);
00331 //              glPushMatrix();
00332 //              //glTranslatef(objects[object].xPos, objects[object].yPos, objects[object].zPos);
00333 //              glTranslatef(0, objects[object].yPos, 0);
00334 //
00335 //        sprintf(txt, "Sound object (%d): %.2f, %.2f, %.2f", object, objects[object].xPos, objects[object].yPos, objects[object].zPos);
00336 //        #ifdef SHOW_GUI_DEBUG_TEXT
00337 //        debugText.push(std::string(txt));
00338 //        #endif
00339 //
00340 //              glPushAttrib(GL_LIGHTING_BIT);
00341 //
00342 //              intensity *= 0.75f;
00343 //              float color[4] = { intensity, intensity, 0.0f, 0.0f };
00344 //              if(object == 0)
00345 //              {//objekt broj 0 je ofarban crveno
00346 //                      color[1] = 0;
00347 //                      //std::cout<<objects[0].zPos<<"  "<<objects[0].xPos<<std::endl;
00348 //                      //std::cout<<std::endl;
00349 //              }
00350 //              glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, color);
00351 //              intensity *= 0.5f;
00352 //              float ambient[4] = { intensity, intensity, 0.0f, 0.0f };
00353 //              if(object == 0)
00354 //              {//objekt broj 0 je ofarban crveno
00355 //                      ambient[1] = 0;
00356 //              }
00357 //
00358 //              glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
00359 //
00360 //
00361 //              glRotatef(accumulatedTime * 200.0f, 0.0f, 1.0f, 0.0f);
00362 //        {
00363 //            FMOD_VECTOR soundorientation;
00364 //            float rad = (accumulatedTime * 200.0f);
00365 //
00366 //            rad *= 3.14159f;
00367 //            rad /= 180.0f;
00368 //
00369 //            soundorientation.x = 0;//sinf(rad);
00370 //            soundorientation.y = 0;
00371 //            soundorientation.z = 0;//cosf(rad);
00372 //
00373 //            objects[object].event->set3DAttributes(0, 0, &soundorientation);
00374 //        }
00375 //
00376 //              glutSolidTeapot(1.f);//SolidTorus(0.15f, 0.6f, 8, 16);
00377 //              glPopAttrib();
00378 //              glPopMatrix();
00379 //      }
00380 //
00381 //    /*
00382 //        Draw blue transparent blue quads to entry to water room
00383 //    */
00384 //    drawWaterRoom();
00385 //
00386 //    /*
00387 //        Do water effects if we are in the water room
00388 //    */
00389 //    inWater();
00390 //
00391 //
00392 //    /*
00393 //        2D RENDERING
00394 //    */
00395 //      glMatrixMode(GL_PROJECTION);
00396 //      glLoadIdentity();
00397 //      gluOrtho2D(0.0f, (GLsizei)width, 0.0f, (GLsizei)height);
00398 //      glMatrixMode(GL_MODELVIEW);
00399 //      glLoadIdentity();
00400 //
00401 //      glDisable(GL_LIGHTING);
00402 //      glDisable(GL_NORMALIZE);
00403 //    glDisable(GL_DEPTH_TEST);
00404 //
00405 //    /*
00406 //        Render text
00407 //    */
00408 //    renderUiText();
00409 //
00410 //
00411 //    glEnable(GL_DEPTH_TEST);
00412 //      glEnable(GL_LIGHTING);
00413 //      glEnable(GL_LIGHT0);
00414 //      glEnable(GL_NORMALIZE);
00415 //      glShadeModel(GL_SMOOTH);
00416 //      glPolygonMode(GL_FRONT_AND_BACK, rendermode);
00417 //
00418 //      // finish
00419 //      glutSwapBuffers();
00420 //}
00421 //
00422 //void reshapeFunc(int w, int h)
00423 //{
00424 //      width = w;
00425 //      height = h;
00426 //      glViewport(0, 0, (GLsizei)w, (GLsizei)h);
00427 //}
00428 //
00429 //void mouseFunc(int button, int state, int x, int y)
00430 //{
00431 //      switch (button)
00432 //      {
00433 //      case GLUT_LEFT_BUTTON:
00434 //              if (state == GLUT_DOWN)
00435 //              {
00436 //                      doRotate = true;
00437 //                      xMouse = x;
00438 //                      yMouse = y;
00439 //              }
00440 //              else
00441 //              if (state == GLUT_UP)
00442 //              {
00443 //                      doRotate = false;
00444 //              }
00445 //              break;
00446 //
00447 //      default:
00448 //              break;
00449 //      }
00450 //}
00451 //
00452 //void motionFunc(int x, int y)
00453 //{
00454 //      //TONI s misom se moze rotirati a ne kretati naprijed-nazad
00455 //      std::string SingleLog;
00456 //      int test = 0;
00457 //
00458 //      int dx = x - xMouse;
00459 //      int dy = y - yMouse;
00460 //
00461 //      // view rotation about y-axis
00462 //      yRotation += (float)dx * 0.5f;
00463 //      if (yRotation > 180.0f)
00464 //              yRotation -= 360.0f;
00465 //      else
00466 //      if (yRotation < -180.0f)
00467 //              yRotation += 360.0f;
00468 //
00469 //      // view rotation about x-axis
00470 //      const float xExtent = 88.0f;
00471 //      //TONI izmjena u redu ispod, da se ne mice gore-dolje vec samo lijevo-desno
00472 //      xRotation += 0.0f;//(float)dy * 0.5f;
00473 //      if (xRotation > xExtent)
00474 //              xRotation = xExtent;
00475 //      else
00476 //      if (xRotation < -xExtent)
00477 //              xRotation = -xExtent;
00478 //
00479 //      xMouse = x;
00480 //      yMouse = y;
00481 //}
00482 //
00483 //void keyboardFunc(unsigned char key, int x, int y)
00484 //{
00485 //      key1 = key;
00486 //      switch (key)
00487 //      {
00488 //      case 'w':
00489 //              moveForward = true;
00490 //              break;
00491 //      case 's':
00492 //              moveBackward = true;
00493 //              break;
00494 //      case 'j':
00495 //              moveRotateAntiClock = true;
00496 //              break;
00497 //      case 'l':
00498 //              moveRotateClock = true;
00499 //              break;
00500 //      case 'a':
00501 //              moveLeft = true;
00502 //              break;
00503 //      case 'd':
00504 //              moveRight = true;
00505 //              break;
00506 //      case ' ':
00507 //              moveUp = true;
00508 //              break;
00509 //      case 'c':
00510 //              moveDown = true;
00511 //        break;
00512 //    case 'z' :
00513 //        ambientVolDown = true;
00514 //        break;
00515 //    case 'Z' :
00516 //        ambientVolUp = true;
00517 //        break;
00518 //    case 'v':
00519 //        masterVolDown = true;
00520 //        break;
00521 //    case 'V':
00522 //        masterVolUp = true;
00523 //        break;
00524 //
00525 //    case 'p':
00526 //        {
00527 //            float value;
00528 //
00529 //            fmodEventParameter->getValue(&value);
00530 //
00531 //            fmodEventParameter->setValue(value - 20.0f);
00532 //        }
00533 //        break;
00534 //
00535 //    case 'P':
00536 //        {
00537 //            float value;
00538 //
00539 //            fmodEventParameter->getValue(&value);
00540 //
00541 //            fmodEventParameter->setValue(value + 20.0f);
00542 //        }
00543 //        break;
00544 //
00545 //    case 'f':
00546 //        moveFast = true;
00547 //        break;
00548 //      }
00549 //}
00550 //
00551 //void keyboardUpFunc(unsigned char key, int x, int y)
00552 //{
00553 //      key1 = 0;
00554 //      switch (key)
00555 //      {
00556 //      case 'w':
00557 //              moveForward = false;
00558 //              break;
00559 //      case 's':
00560 //              moveBackward = false;
00561 //              break;
00562 //      case 'j':
00563 //              moveRotateAntiClock = false;
00564 //              break;
00565 //      case 'l':
00566 //              moveRotateClock = false;
00567 //      case 'a':
00568 //              moveLeft = false;
00569 //              break;
00570 //      case 'd':
00571 //              moveRight = false;
00572 //        break;
00573 //      case ' ':
00574 //              moveUp = false;
00575 //              break;
00576 //      case 'c':
00577 //              moveDown = false;
00578 //        break;
00579 //    case 'z' :
00580 //        ambientVolDown = false;
00581 //        break;
00582 //    case 'Z' :
00583 //        ambientVolUp = false;
00584 //        break;
00585 //    case 'v':
00586 //        masterVolDown = false;
00587 //        break;
00588 //    case 'V':
00589 //        masterVolUp = false;
00590 //        break;
00591 //    case 'f':
00592 //        moveFast = false;
00593 //        break;
00594 //    case 27:
00595 //        exit(1);
00596 //        break;
00597 //      }
00598 //}
00599 //
00600 void specialKeyFunc(int key, int x, int y)
00601 {
00602   /*  switch (key)
00603     {
00604 
00605     }*/
00606 
00607     //key = key;
00608 }
00609 //
00610 //void specialKeyUpFunc(int key, int x, int y)
00611 //{
00612 //    switch (key)
00613 //    {
00614 //    case GLUT_KEY_F1:
00615 //        showhelp = !showhelp;
00616 //        break;
00617 //    case GLUT_KEY_F2:
00618 //        if(fullscreen)
00619 //        {
00620 //            glutPositionWindow(20,40);
00621 //            glutReshapeWindow(500,500);
00622 //            fullscreen = false;
00623 //        }
00624 //        else
00625 //        {
00626 //            glutFullScreen();
00627 //            fullscreen = true;
00628 //        }
00629 //        break;
00630 //    case GLUT_KEY_F3:
00631 //        rendermode = (rendermode == GL_LINE ? GL_FILL : GL_LINE);
00632 //        break;
00633 //    case GLUT_KEY_F11:
00634 //        showdebug = !showdebug;
00635 //        break;
00636 //    case GLUT_KEY_F8:
00637 //        rotatingMesh.geometry->setActive(false);
00638 //        walls.geometry->setActive(false);
00639 //        break;
00640 //    case GLUT_KEY_F9:
00641 //        rotatingMesh.geometry->setActive(true);
00642 //        walls.geometry->setActive(true);
00643 //        break;
00644 //    }
00645 //}
00646 //
00647 //void timerFunc(int nValue)
00648 //{
00649 //    std::string TimeLog;
00650 //      static bool firsttime = true;
00651 //      FMOD_RESULT result;
00652 //
00653 //      //doGeometryMovement();
00654 //
00655 //      doSoundMovement();
00656 //      doListenerMovement();
00657 //    doUpdateVolume();
00658 //
00659 //    result = FMOD::NetEventSystem_Update();
00660 //      ERRCHECK(result);
00661 //    result = fmodEventSystem->update();
00662 //      ERRCHECK(result);
00663 //
00664 //      accumulatedTime += (float)INTERFACE_UPDATETIME / 1000.0f;
00665 //
00666 //      glutPostRedisplay();
00667 //      glutTimerFunc(INTERFACE_UPDATETIME, timerFunc, 0);
00668 //
00669 //#if 0
00670 //    if (firsttime)
00671 //    {
00672 //        SetWindowPos(
00673 //          GetForegroundWindow(),    // handle to window
00674 //          HWND_TOPMOST,             // placement-order handle
00675 //          0,                        // horizontal position
00676 //          0,                        // vertical position
00677 //          width,                    // width
00678 //          height,                   // height
00679 //          SWP_NOMOVE
00680 //        );
00681 //        firsttime = false;
00682 //    }
00683 //#endif
00684 //}
00685 //
00686 GLuint loadTexturePNG(const char *filename)
00687 {
00688     GLuint texture = SOIL_load_OGL_texture(filename, 0, 0, 0);
00689     glBindTexture(GL_TEXTURE_2D, texture);
00690     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
00691     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
00692 
00693     return texture;
00694 }
00695 
00696 GLuint loadTexture(const char *filename)
00697 {
00698     GLuint texture;
00699     int width;
00700         int height;
00701     unsigned char *data;
00702     FILE *file;
00703 
00704     // open texture data
00705     file = fopen( filename, "rb" );
00706     if ( file == NULL )
00707                 return 0;
00708 
00709     width = 128;
00710     height = 128;
00711     data = (unsigned char*)malloc(width * height * 3);
00712 
00713     fread(data, width * height * 3, 1, file );
00714     fclose(file);
00715 
00716     glGenTextures(1, &texture);
00717     glBindTexture(GL_TEXTURE_2D, texture);
00718 
00719     glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
00720     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST );
00721     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
00722     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
00723     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
00724 
00725     gluBuild2DMipmaps(
00726                 GL_TEXTURE_2D,
00727                 3,
00728                 width,
00729                 height,
00730         GL_RGB,
00731                 GL_UNSIGNED_BYTE,
00732                 data);
00733 
00734     free(data);
00735 
00736     return texture;
00737 }
00738 //
00739 //void initGeometry(const char* szFileName, Mesh& mesh, bool alter)
00740 //{
00741 //      FMOD_RESULT result;
00742 //
00743 //      FILE* file = fopen(szFileName, "rb");
00744 //      if (file)
00745 //      {
00746 //              // read vertices
00747 //              fread(&mesh.numVertices, sizeof (mesh.numVertices), 1, file);
00748 //              mesh.vertices = new FMOD_VECTOR[mesh.numVertices];
00749 //              mesh.texcoords = new float[mesh.numVertices][2];
00750 //              fread(mesh.vertices, sizeof (float) * 3, mesh.numVertices, file);
00751 //              fread(mesh.texcoords, sizeof (float) * 2, mesh.numVertices, file);
00752 //
00753 //
00754 //              fread(&mesh.numIndices, sizeof (mesh.numIndices), 1, file);
00755 //              mesh.indices = new int[mesh.numIndices];
00756 //              fread(mesh.indices, sizeof (int), mesh.numIndices, file);
00757 //
00758 //
00759 //              fread(&mesh.numPolygons, sizeof (mesh.numPolygons), 1, file);
00760 //              mesh.polygons = new Polygon[mesh.numPolygons];
00761 //
00762 //              // read polygons
00763 //              for (int poly = 0; poly < mesh.numPolygons; poly++)
00764 //              {
00765 //                      Polygon* polygon = &mesh.polygons[poly];
00766 //
00767 //
00768 //                      fread(&polygon->numVertices, sizeof (polygon->numVertices), 1, file);
00769 //                      fread(&polygon->indicesOffset, sizeof (polygon->indicesOffset), 1, file);
00770 //                      fread(&polygon->directOcclusion, sizeof (polygon->directOcclusion), 1, file);
00771 //                      fread(&polygon->reverbOcclusion, sizeof (polygon->reverbOcclusion), 1, file);
00772 //
00773 //                      int* indices = &mesh.indices[polygon->indicesOffset];
00774 //
00775 //                      // calculate polygon normal
00776 //                      float xN = 0.0f;
00777 //                      float yN = 0.0f;
00778 //                      float zN = 0.0f;
00779 //                      // todo: return an error if a polygon has less then 3 vertices.
00780 //                      for (int vertex = 0; vertex < polygon->numVertices - 2; vertex++)
00781 //                      {
00782 //                              float xA = mesh.vertices[indices[vertex + 1]].x -mesh.vertices[indices[0]].x;
00783 //                              float yA = mesh.vertices[indices[vertex + 1]].y -mesh.vertices[indices[0]].y;
00784 //                              float zA = mesh.vertices[indices[vertex + 1]].z -mesh.vertices[indices[0]].z;
00785 //                              float xB = mesh.vertices[indices[vertex + 2]].x -mesh.vertices[indices[0]].x;
00786 //                              float yB = mesh.vertices[indices[vertex + 2]].y -mesh.vertices[indices[0]].y;
00787 //                              float zB = mesh.vertices[indices[vertex + 2]].z -mesh.vertices[indices[0]].z;
00788 //                              // cross product
00789 //                              xN += yA * zB - zA * yB;
00790 //                              yN += zA * xB - xA * zB;
00791 //                              zN += xA * yB - yA * xB;
00792 //                      }
00793 //                      float fMagnidued = (float)sqrt(xN * xN + yN * yN + zN * zN);
00794 //                      if (fMagnidued > 0.0f) // a tollerance here might be called for
00795 //                      {
00796 //                              xN /= fMagnidued;
00797 //                              yN /= fMagnidued;
00798 //                              zN /= fMagnidued;
00799 //                      }
00800 //                      polygon->normal.x = xN;
00801 //                      polygon->normal.y = yN;
00802 //                      polygon->normal.z = zN;
00803 //              }
00804 //              fclose(file);
00805 //      }
00806 //
00807 //      result = fmodSystem->createGeometry(mesh.numPolygons, mesh.numIndices, &mesh.geometry);
00808 //      ERRCHECK(result);
00809 //
00810 //    /*
00811 //        Tell FMOD about the geometry
00812 //    */
00813 //      for (int poly = 0; poly < mesh.numPolygons; poly++)
00814 //      {
00815 //              Polygon* polygon = &mesh.polygons[poly];
00816 //              FMOD_VECTOR vertices[16];
00817 //              for (int i = 0; i < polygon->numVertices; i++)
00818 //                      vertices[i] = mesh.vertices[mesh.indices[polygon->indicesOffset + i]];
00819 //              int polygonIndex = 0;
00820 //
00821 //        if (alter && polygon->directOcclusion == 0.85f)
00822 //        {
00823 //     //       polygon->directOcclusion = 0.95f;
00824 //        }
00825 //
00826 //              result = mesh.geometry->addPolygon(
00827 //                      polygon->directOcclusion,
00828 //                      polygon->reverbOcclusion,
00829 //                      false, // single sided
00830 //                      polygon->numVertices,
00831 //                      vertices,
00832 //                      &polygonIndex);
00833 //              ERRCHECK(result);
00834 //      }
00835 //}
00836 //
00837 //void ERRCHECK(FMOD_RESULT result)
00838 //{
00839 //    if (result != FMOD_OK)
00840 //    {
00841 //        printf("FMOD error! (%d) %s\n", result, FMOD_ErrorString(result));
00842 //        exit(-1);
00843 //    }
00844 //}
00845 //


acoustic_vr
Author(s):
autogenerated on Fri Feb 7 2014 11:37:09