Ignore:
Timestamp:
06/13/08 18:06:32 (16 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/CHC_revisited/chcdemo.cpp

    r2753 r2756  
    11// occquery.cpp : Defines the entry point for the console application. 
    22// 
    3 #if TOIMPLEMENT 
    4  
    53#include <math.h> 
    64#include <time.h> 
     5#include "common.h" 
    76#include "glInterface.h" 
    87#include "RenderTraverser.h" 
    9  
    10  
    11  
    12 bool arbQuerySupport = false; 
    13 bool nvQuerySupport = false; 
    14  
    15 double nearDist = 0.1; // eye near plane distance 
     8#include "SceneEntity.h" 
     9#include "Vector3.h" 
     10#include "Matrix4x4.h" 
     11#include "BinaryLoader.h" 
     12#include "Bvh.h" 
     13#include "Camera.h" 
     14#include "Geometry.h" 
     15 
     16 
     17using namespace std; 
     18using namespace CHCDemo; 
     19 
     20 
     21 
     22/// the renderable scene geometry 
     23SceneEntityContainer sceneEntities; 
     24// traverses and renders the hierarchy 
     25RenderTraverser *traverser; 
     26/// the hierarchy 
     27Bvh *bvh; 
     28/// the scene camera 
     29Camera *camera; 
     30/// the scene bounding box 
     31AxisAlignedBox3 sceneBox; 
     32 
     33// eye near plane distance 
     34float nearDist = 0.1f;  
    1635int winWidth, winHeight; 
    17 int objectType = Geometry::TEAPOT; 
    18 int nextObjectType = objectType; 
    1936 
    2037float visZoomFactor = 1.5f; 
     
    2643bool showCreateParams = false; 
    2744 
    28 // traverses and renders the hierarchy 
    29 RenderTraverser traverser; 
    30  
    31 Vector3 eyePos = {0.0, 0.0, 3.0};  // eye position  
    32 Vector3 viewDir = {0.0, 0.0, -1.0};  // eye view dir  
    33 Vector3 lightDir = {0.0, 0.0, 1.0};  // light dir  
     45 
     46Vector3 eyePos = Vector3(0.0f, 0.0f, 3.0f);    // eye position  
     47Vector3 viewDir = Vector3(0.0f, 0.0f, -1.0f);  // eye view dir  
     48Vector3 lightDir = Vector3(0.0f, 0.0f, 1.0f);  // light dir  
    3449 
    3550Matrix4x4 eyeView; // eye view matrix 
     
    4156//mouse navigation state 
    4257int xEyeBegin, yEyeBegin, yMotionBegin, verticalMotionBegin, horizontalMotionBegin = 0; 
    43 int renderMode = RenderTraverser::RENDER_COHERENT; 
     58//int renderMode = RenderTraverser::RENDER_COHERENT; 
    4459 
    4560// relative size of an object 
     
    5166 
    5267// this defines the volume where objects can be drawn 
    53 Vector3 minTranslation = {-2.5f, -2.5f, -3.0f}; 
    54 Vector3 maxTranslation = {2.5f, 2.5f, -3.0 - zLength}; 
     68Vector3 minTranslation(-2.5f, -2.5f, -3.0f); 
     69Vector3 maxTranslation(2.5f, 2.5f, -3.0 - zLength); 
    5570 
    5671const float minAngle = 0; 
     
    6277int renderTimesValid = 0; 
    6378 
    64 typedef vector<Geometry *> GeometryList; 
    65 GeometryList geometry; 
    66  
    6779bool useOptimization = true; 
    68 bool useArbQueries = false; 
     80 
    6981 
    7082Vector3 amb[2]; 
     
    7284Vector3 spec[2]; 
    7385 
     86void InitExtensions(void); 
     87void DisplayVisualization(); 
     88void InitGLstate(void); 
     89void CleanUp(void); 
     90void SetupEyeView(void); 
     91void UpdateEyeMtx(void); 
     92 
     93 
    7494void begin2D(void); 
    7595void end2D(void); 
    76 void output(const int x, const int y, const char *string); 
    77 void initGLstate(void); 
    78 void keyboard(const unsigned char c, const int x, const int y); 
     96void output(int x, int y, const char *string); 
     97void keyboard(const unsigned char c, int x, int y); 
    7998void drawHelpMessage(void); 
    8099void drawStatistics(void); 
    81100void display(void); 
    82 void special(const int c, const int x, const int y); 
    83 void reshape(const int w, const int h); 
     101void special(int c, int x, int y); 
     102void reshape(int w, int h); 
    84103void mouse(int button, int state, int x, int y); 
    85 void initExtensions(void); 
    86104void leftMotion(int x, int y); 
    87 //void rightMotion(int x, int y); 
    88105void middleMotion(int x, int y); 
    89106void drawEyeView(void); 
    90 void setupEyeView(void); 
    91107void setupVisView(void); 
    92 void updateEyeMtx(void); 
    93108long calcRenderTime(void); 
    94109void resetTimer(void); 
    95 void cleanUp(void); 
    96 void calcDecimalPoint(string &str, int d); 
    97  
    98 HierarchyNode* generateHierarchy(int numObjects); 
    99 Geometry *generateGeometry(Vector3 translateRatio, float xRotRatio,  
    100                                                    float yRotRatio, float zRotRatio, int materialIdx); 
    101 void displayVisualization(); 
    102  
    103 void deleteGeometry(); 
    104  
    105 #endif 
     110void calcDecimalPoint(std::string &str, int d); 
     111 
     112 
     113 
     114void SetupProjection(int w, int h, float angle, const AxisAlignedBox3 &sceneBox) 
     115{ 
     116        glViewport(0, 0, w, h); 
     117        glMatrixMode(GL_PROJECTION); 
     118        glLoadIdentity(); 
     119 
     120        gluPerspective(angle, 1.0, 1.0f, 2.0 * Magnitude(sceneBox.Diagonal())); 
     121        glMatrixMode(GL_MODELVIEW); 
     122} 
     123 
    106124 
    107125int main(int argc, char* argv[]) 
    108126{ 
    109 #if 0 
    110         glutInitWindowSize(800,600); 
    111         glutInit(&argc,argv); 
     127        glutInitWindowSize(800, 600); 
     128        glutInit(&argc, argv); 
    112129        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); 
    113          
     130 
    114131        glutCreateWindow("Coherent Hierarchical Culling"); 
    115132 
     
    120137        glutMouseFunc(mouse); 
    121138        glutIdleFunc(display); 
    122         initExtensions(); 
    123         initGLstate(); 
    124  
    125         leftMotion(0,0); 
    126         middleMotion(0,0); 
    127          
    128         HierarchyNode *hierarchy = generateHierarchy(numObjects); 
    129         traverser.SetHierarchy(hierarchy); 
     139         
     140        InitExtensions(); 
     141        InitGLstate(); 
     142 
     143        leftMotion(0, 0); 
     144        middleMotion(0, 0); 
     145 
     146        BinaryLoader loader; 
     147 
     148        const string filename("house_test.dem"); 
     149        //const string filename("city.dem"); 
     150 
     151        camera = new Camera(800, 600); 
     152 
     153        if (loader.Load(filename, sceneEntities)) 
     154                cout << "scene " << filename << " loaded" << endl; 
     155        else 
     156                cerr << "loading scene " << filename << " failed" << endl; 
     157 
     158        sceneBox.Initialize(); 
     159 
     160        SceneEntityContainer::const_iterator it, it_end = sceneEntities.end(); 
     161 
     162        for (it = sceneEntities.begin(); it != it_end; ++ it) 
     163                sceneBox.Include((*it)->GetBoundingBox()); 
     164 
     165        Debug << "scene box: " << sceneBox << endl; 
     166 
     167        SetupProjection(800, 600, 60, sceneBox); 
     168        camera->LookAtBox(sceneBox); 
     169        //camera->LookInBox(sceneBox); 
     170        //camera->SetPosition(Vector3(0, 0, -3)); 
     171        //camera->SetDirection(Vector3(0, 0, 1)); 
    130172 
    131173        /// initialise rendertime array 
     
    136178 
    137179        // clean up 
    138         cleanUp(); 
    139 #endif 
     180        CleanUp(); 
     181 
    140182        return 0; 
    141183} 
    142184 
    143 #if 0 
    144 void initGLstate(void)  
    145 { 
    146         glClearColor(0.6, 0.6, 0.8, 1.0); 
     185 
     186void InitGLstate(void)  
     187{ 
     188        glClearColor(0.0f, 1.0f, 0.0f, 0.0); 
    147189         
    148190        glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
    149191        glPixelStorei(GL_PACK_ALIGNMENT,1);  
    150192         
    151         glDepthRange(0.0, 1.0); 
    152         glClearDepth(1.0); 
    153193        glDepthFunc(GL_LESS); 
    154194 
    155195        glEnable(GL_LIGHTING); 
    156196        glEnable(GL_LIGHT0); 
    157  
     197        //glDisable(GL_LIGHTING); 
     198 
     199        glColor3f(1.0f, 0.0f, 0.0f); 
    158200        glShadeModel(GL_SMOOTH); 
    159201         
    160         GLfloat ambient[] = { 0.0, 0.0, 0.0, 1.0 }; 
    161         GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; 
    162         GLfloat specular[] = { 1.0, 1.0, 1.0, 1.0 }; 
    163         GLfloat position[] = { 0.0, 3.0, 3.0, 0.0 }; 
     202        GLfloat ambient[] = {0.5, 0.5, 0.5, 1.0}; 
     203        GLfloat diffuse[] = {1.0, 1.0, 1.0, 1.0}; 
     204        GLfloat specular[] = {1.0, 1.0, 1.0, 1.0}; 
     205        GLfloat position[] = {0.0, 3.0, 3.0, 0.0}; 
    164206     
    165         GLfloat lmodel_ambient[] = { 0.2, 0.2, 0.2, 1.0 }; 
    166         GLfloat local_view[] = { 0.0 }; 
     207        GLfloat lmodel_ambient[] = {0.2, 0.2, 0.2, 1.0}; 
     208        GLfloat local_view[] = {0.0}; 
    167209 
    168210        glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); 
     
    179221        glCullFace(GL_BACK); 
    180222        glEnable(GL_CULL_FACE); 
    181          
    182         glClearColor(0.2, 0.2, 0.8, 0.0); 
    183  
    184         setupVisView(); 
     223        //glDisable(GL_CULL_FACE); 
     224         
     225        GLfloat ambientColor[] = {0.5, 0.5, 0.5, 1.0}; 
     226        GLfloat diffuseColor[] = {1.0, 0.0, 0.0, 1.0}; 
     227        GLfloat specularColor[] = {1.0, 1.0, 1.0, 1.0}; 
     228 
     229        glMaterialfv(GL_FRONT, GL_AMBIENT, ambientColor); 
     230        glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuseColor); 
     231        glMaterialfv(GL_FRONT, GL_SPECULAR, specularColor); 
     232 
     233        glColor3f(1.0f, 0.0f, 0.0f); 
     234        //setupVisView(); 
    185235} 
    186236 
     
    226276        }; 
    227277         
    228         int i; 
     278         
    229279        int x = 40, y = 42; 
     280 
    230281        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    231282        glEnable(GL_BLEND); 
    232         glColor4f(0.0,1.0,0.0,0.2);  // 20% green.  
     283        glColor4f(0.0f, 1.0f , 0.0f, 0.2f);  // 20% green.  
    233284 
    234285        // Drawn clockwise because the flipped Y axis flips CCW and CW.  
     
    237288        glDisable(GL_BLEND); 
    238289         
    239  
    240         glColor3f(1.0,1.0,1.0); 
    241         for(i = 0; message[i] != 0; i++) { 
    242                 if(message[i][0] == '\0') { 
     290        glColor3f(1.0f, 1.0f, 1.0f); 
     291         
     292        for(int i = 0; message[i] != 0; i++)  
     293        { 
     294                if(message[i][0] == '\0')  
     295                { 
    243296                        y += 7; 
    244                 } else { 
    245                         output(x,y,message[i]); 
     297                }  
     298                else  
     299                { 
     300                        output(x, y, message[i]); 
    246301                        y += 14; 
    247302                } 
     
    250305} 
    251306 
    252 // generates a teapot, all parameters between zero and one 
    253 Geometry *generateGeometry(Vector3 translationRatio, float xRotRatio,  
    254                                                    float yRotRatio, float zRotRatio, int materialIdx) 
    255 { 
    256         float xRot = minAngle + xRotRatio * (maxAngle - minAngle); 
    257         float yRot = minAngle + yRotRatio * (maxAngle - minAngle); 
    258         float zRot = minAngle + zRotRatio * (maxAngle - minAngle); 
    259  
    260         Vector3 translation; 
    261         translation[0] = minTranslation[0] + translationRatio[0] * (maxTranslation[0] - minTranslation[0]); 
    262         translation[1] = minTranslation[1] + translationRatio[1] * (maxTranslation[1] - minTranslation[1]); 
    263         translation[2] = minTranslation[2] + translationRatio[2] * (maxTranslation[2] - minTranslation[2]); 
    264  
    265         Geometry *result = new Geometry(translation, xRot, yRot, zRot, objectSize, objectType); 
    266  
    267         result->SetAmbientColor(amb[materialIdx][0], amb[materialIdx][1], amb[materialIdx][2]); 
    268         result->SetDiffuseColor(dif[materialIdx][0], dif[materialIdx][1], dif[materialIdx][2]); 
    269         result->SetSpecularColor(spec[materialIdx][0], spec[materialIdx][1], spec[materialIdx][2]); 
    270  
    271         return result; 
    272 } 
    273  
    274 // generates a the scene hierarchy with random values 
    275 HierarchyNode* generateHierarchy(int numObjects) 
    276 { 
    277     HierarchyNode *hierarchy = new HierarchyNode(); 
    278  
    279         // initialise materials 
    280         copyVector3Values(amb[0], 0.0215, 0.1745, 0.0215); 
    281         copyVector3Values(dif[0], 0.727811, 0.633, 0.6); 
    282         copyVector3Values(spec[0], 0.633, 0.727811, 0.633); 
    283  
    284         copyVector3Values(amb[1], 0.1745, 0.01175, 0.01175); 
    285         copyVector3Values(dif[1], 0.61424, 0.04136, 0.04136); 
    286         copyVector3Values(spec[1], 0.727811, 0.626959, 0.626959); 
    287  
    288         srand (time (0)); 
    289          
    290         printf("generating geometry with random position and orientation ... "); 
    291  
    292         for(int i=0; i < numObjects; i++) 
    293         { 
    294                 float xRotRatio = rand() / (float) RAND_MAX; 
    295                 float yRotRatio = rand() / (float) RAND_MAX; 
    296                 float zRotRatio = rand() / (float) RAND_MAX; 
    297  
    298                 Vector3 translationRatio = {rand() / (float) RAND_MAX,  
    299                                                                         rand() / (float) RAND_MAX,  
    300                                                                         rand() / (float) RAND_MAX}; 
    301  
    302                 int materialIdx = int(2 * rand() / (float) RAND_MAX); 
    303                          
    304                 Geometry *geo = generateGeometry(translationRatio, xRotRatio,  
    305                                                                              yRotRatio, zRotRatio, materialIdx); 
    306                 hierarchy->AddGeometry(geo); 
    307  
    308                 // put into global geometry list for later deletion 
    309                 geometry.push_back(geo); 
    310         } 
    311  
    312         printf("finished\n"); 
    313         printf("generating new kd-tree hierarchy ... "); 
    314         HierarchyNode::InitKdTree(hierarchy); 
    315         hierarchy->GenerateKdTree(); 
    316         printf("finished\n"); 
    317  
    318         return hierarchy; 
    319 } 
    320  
    321  
    322 void updateEyeMtx(void)  
    323 { 
    324         const Vector3 up = {0.0, 1.0, 0.0}; 
     307 
     308void UpdateEyeMtx(void)  
     309{ 
     310        /*const Vector3 up(0.0, 1.0, 0.0); 
    325311 
    326312        look(eyeView, eyePos, viewDir, up); 
    327313        mult(eyeProjView, eyeProjection, eyeView); //eyeProjView = eyeProjection*eyeView 
    328314        invert(invEyeProjView, eyeProjView); //invert matrix 
    329 } 
    330  
    331  
    332 void setupEyeView(void) 
    333 { 
    334         glMatrixMode(GL_PROJECTION); 
    335         glLoadMatrixd(eyeProjection); 
    336  
     315        */ 
     316} 
     317 
     318 
     319void SetupEyeView(void) 
     320{ 
     321        SetupProjection(800,600,60,sceneBox); 
    337322        glMatrixMode(GL_MODELVIEW); 
    338         glLoadMatrixd(eyeView); 
     323        camera->SetupCameraView(); 
     324 
     325/*      glMatrixMode(GL_PROJECTION); 
     326        glLoadMatrixf((float *)eyeProjection.x); 
     327 
     328        glMatrixMode(GL_MODELVIEW); 
     329        glLoadMatrixf((float *)eyeView.x); 
     330        */ 
    339331} 
    340332 
     
    353345        char msg8[100]; 
    354346 
     347/* 
    355348        sprintf_s(msg2, "Traversed: %4d, frustum culled: %4d, query culled: %4d (of %d nodes)", 
    356349                        traverser.GetNumTraversedNodes(), traverser.GetNumFrustumCulledNodes(), 
    357350                        traverser.GetNumQueryCulledNodes(),  
    358351                        traverser.GetHierarchy()->GetNumHierarchyNodes()); 
    359          
     352 
    360353        char *optstr[2] = {"", ", using optimization"}; 
    361354        char *querystr[2] = {"NV", "ARB"}; 
     
    384377        sprintf_s(msg7, "Next object type: %s", objectTypeStr[nextObjectType]); 
    385378        sprintf_s(msg8, "Next object size: %3.3f", objectSize); 
     379*/ 
    386380 
    387381        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    388382 
    389         updateEyeMtx(); // bring eye modelview matrix up-to-date 
    390         setupEyeView(); 
    391  
     383        // bring eye modelview matrix up-to-date 
     384        UpdateEyeMtx();  
     385        SetupEyeView(); 
     386 
     387        glEnableClientState(GL_VERTEX_ARRAY); 
     388        glEnableClientState(GL_NORMAL_ARRAY); 
     389 
     390        bool usesTextures = false; 
     391 
     392        SceneEntityContainer::const_iterator sit, sit_end = sceneEntities.end(); 
     393 
     394        for (sit = sceneEntities.begin(); sit != sit_end; ++ sit) 
     395        { 
     396                SceneEntity *entity = *sit; 
     397 
     398                if (!usesTextures && entity->GetGeometry()->HasTexture()) 
     399                { 
     400                        glEnable(GL_TEXTURE_2D); 
     401                        glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
     402                        usesTextures = true; 
     403                } 
     404                else if (usesTextures && !entity->GetGeometry()->HasTexture()) 
     405                { 
     406                        glDisable(GL_TEXTURE_2D); 
     407                        glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
     408                        usesTextures = false; 
     409                } 
     410 
     411                entity->Render(); 
     412        } 
     413 
     414        glDisableClientState(GL_VERTEX_ARRAY); 
     415        glDisableClientState(GL_NORMAL_ARRAY); 
     416 
     417        glDisable(GL_TEXTURE_2D); 
     418        glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
     419 
     420        /* 
    392421        traverser.SetViewpoint(eyePos); 
    393422        traverser.SetProjViewMatrix(eyeProjView); 
    394423        traverser.Render(renderMode); 
    395  
    396424        // cycle through rendertime array 
    397425        renderTimes[renderTimesIdx] = traverser.GetRenderTime(); 
     
    402430 
    403431        if(visMode) 
    404         { 
    405432                displayVisualization(); 
    406         } 
     433        */ 
     434 
    407435         
    408436        begin2D(); 
     437         
    409438        if(showHelp) 
     439        {        
    410440                drawHelpMessage(); 
     441        } 
    411442        else 
    412443        { 
    413444                glColor3f(1.0,1.0,1.0); 
    414                 output(10,winHeight-10, msg[renderMode]); 
     445                //output(10, winHeight-10, msg[renderMode]); 
    415446 
    416447                if(showStatistics) 
     
    428459                } 
    429460        } 
     461 
    430462        end2D(); 
    431463 
     
    437469void keyboard(const unsigned char c, const int x, const int y)  
    438470{ 
    439         int threshold; 
    440         HierarchyNode *hierarchy; 
     471        //int threshold; 
     472        //HierarchyNode *hierarchy; 
    441473 
    442474        switch(c)  
     
    446478                break; 
    447479        case 32: //space 
    448                 renderMode = (renderMode + 1) % RenderTraverser::NUM_RENDERMODES; 
     480         
     481                //      renderMode = (renderMode + 1) % RenderTraverser::NUM_RENDERMODES; 
    449482                 
    450483                resetTimer(); 
    451                 traverser.Render(renderMode);           // render once so stats are updated 
     484                //traverser.Render(renderMode);         // render once so stats are updated 
    452485                break; 
    453486        case 'h': 
     
    458491        case 'V': 
    459492                showBoundingVolumes = !showBoundingVolumes; 
    460                 HierarchyNode::SetRenderBoundingVolume(showBoundingVolumes); 
     493                //HierarchyNode::SetRenderBoundingVolume(showBoundingVolumes); 
    461494                break; 
    462495        case 's': 
     
    465498                break; 
    466499        case '+': 
    467                 threshold = traverser.GetVisibilityThreshold() + 10; 
    468                 traverser.SetVisibilityThreshold(threshold); 
     500                //threshold = traverser.GetVisibilityThreshold() + 10; 
     501                //traverser.SetVisibilityThreshold(threshold); 
    469502                break; 
    470503        case '-': 
    471                 threshold = traverser.GetVisibilityThreshold() - 10; 
    472                 if(threshold < 0) threshold = 0; 
    473  
    474                 traverser.SetVisibilityThreshold(threshold);             
     504                //threshold = traverser.GetVisibilityThreshold() - 10; 
     505                //if(threshold < 0) threshold = 0; 
     506 
     507                //traverser.SetVisibilityThreshold(threshold);           
    475508                break; 
    476509        case '1': 
     
    495528        case 'G': 
    496529                useOptimization = !useOptimization; 
    497                 traverser.SetUseOptimization(useOptimization); 
    498                 break; 
    499         case 'n': 
    500         case 'N': 
    501                 useArbQueries = !useArbQueries; 
    502                 traverser.SetUseArbQueries(useArbQueries); 
    503                 break; 
     530                //traverser.SetUseOptimization(useOptimization); 
     531                break; 
     532                /* 
    504533        case 'c': 
    505534        case 'C':        
    506                  
    507535                hierarchy = traverser.GetHierarchy(); 
    508536                // delete old hierarchy 
    509                 if(hierarchy) delete hierarchy;  
     537                if (hierarchy) delete hierarchy;  
    510538                deleteGeometry(); 
    511539 
     
    522550                resetTimer(); 
    523551                break; 
    524  
     552                */ 
    525553        default: 
    526554                return; 
     
    534562{ 
    535563        // used to avoid vertical motion with the keys 
    536         Vector3 hvec = {viewDir[0], 0, viewDir[2]}; 
     564        Vector3 hvec = Vector3(viewDir[0], 0, viewDir[2]); 
    537565         
    538566        switch(c)  
     
    542570                break; 
    543571        case GLUT_KEY_F2: 
    544                 numNextObjects -= 100; 
    545                 if(numNextObjects < 100) numNextObjects = 100; 
     572                //numNextObjects -= 100; 
     573                //if(numNextObjects < 100) numNextObjects = 100; 
    546574                break; 
    547575        case GLUT_KEY_F3: 
    548         numNextObjects += 100; 
     576       // numNextObjects += 100; 
    549577                break; 
    550578        case GLUT_KEY_F4: 
     
    563591                break; 
    564592        case GLUT_KEY_F8: 
    565                 nextObjectType = (nextObjectType + 1) % Geometry::NUM_OBJECTS; 
     593                //nextObjectType = (nextObjectType + 1) % Geometry::NUM_OBJECTS; 
    566594                break; 
    567595        case GLUT_KEY_LEFT: 
    568                 rotateVectorY(viewDir, 0.2); 
     596        //      rotateVectorY(viewDir, 0.2); 
    569597                break; 
    570598        case GLUT_KEY_RIGHT: 
    571                 rotateVectorY(viewDir, -0.2); 
     599                //rotateVectorY(viewDir, -0.2); 
    572600                break; 
    573601        case GLUT_KEY_UP: 
    574                 linCombVector3(eyePos, eyePos, hvec, 0.6); 
     602        //      linCombVector3(eyePos, eyePos, hvec, 0.6); 
    575603                break; 
    576604        case GLUT_KEY_DOWN: 
    577                 linCombVector3(eyePos, eyePos, hvec, -0.6); 
     605                //linCombVector3(eyePos, eyePos, hvec, -0.6); 
    578606                break; 
    579607        default: 
     
    598626        if(w) winAspectRatio = (double) h / (double) w; 
    599627 
    600         perspectiveDeg(eyeProjection, 60.0, 1.0/winAspectRatio, nearDist, 150.0); 
     628        //perspectiveDeg(eyeProjection, 60.0, 1.0/winAspectRatio, nearDist, 150.0); 
    601629 
    602630        glutPostRedisplay(); 
     
    631659        static double eyeXAngle = 0.0; 
    632660        // not move in the vertical direction 
    633         Vector3 horView = {viewDir[0], 0, viewDir[2]}; 
    634          
    635         eyeXAngle = 0.6 *  PI * (xEyeBegin - x) / 180.0; 
     661        Vector3 horView = Vector3(viewDir[0], 0, viewDir[2]); 
     662         
     663        eyeXAngle = 0.6 *  M_PI * (xEyeBegin - x) / 180.0; 
     664 
     665        /* 
    636666        linCombVector3(eyePos, eyePos, horView, (yMotionBegin - y) * 0.1); 
    637667         
     
    640670        xEyeBegin = x; 
    641671        yMotionBegin = y; 
    642  
     672        */ 
    643673        glutPostRedisplay(); 
    644674} 
     
    649679        // the 90 degree rotated view vector  
    650680        // y zero so we don't move in the vertical 
    651         Vector3 rVec = {viewDir[0], 0, viewDir[2]}; 
    652          
    653         rotateVectorY(rVec, PI / 2.0); 
     681        Vector3 rVec = Vector3(viewDir[0], 0, viewDir[2]); 
     682         
     683        /*rotateVectorY(rVec, PI / 2.0); 
    654684        linCombVector3(eyePos, eyePos, rVec, (horizontalMotionBegin - x) * 0.1); 
    655685         
     
    658688        horizontalMotionBegin = x; 
    659689        verticalMotionBegin = y; 
    660  
     690*/ 
    661691        glutPostRedisplay(); 
    662692} 
    663693 
    664694 
    665 void initExtensions(void)  
     695void InitExtensions(void)  
    666696{ 
    667697        GLenum err = glewInit(); 
     698 
    668699        if (GLEW_OK != err)  
    669700        { 
     
    672703                exit(1); 
    673704        } 
    674  
    675         if (GLEW_ARB_occlusion_query)  
    676                 arbQuerySupport = true; 
    677          
    678         if (GLEW_NV_occlusion_query)  
    679                 nvQuerySupport = true; 
    680          
    681  
    682         if  (!arbQuerySupport && !nvQuerySupport) 
    683         { 
    684                 printf("I require the GL_ARB_occlusion_query or the GL_NV_occlusion_query OpenGL extension to work.\n"); 
     705        if  (!GLEW_ARB_occlusion_query) 
     706        { 
     707                printf("I require the GL_ARB_occlusion_query to work.\n"); 
    685708                exit(1); 
    686709        } 
     
    729752} 
    730753 
    731 // explicitly deletes geometry generated for hierarchy  
    732 // (deleting the hierarchy does not delete the geometry) 
    733 void deleteGeometry() 
    734 { 
    735         for (GeometryList::iterator it = geometry.begin(); it != geometry.end(); it++) 
    736                 if(*it) delete (*it); 
    737          
    738         geometry.clear(); 
    739 } 
    740  
    741754// displays the visualisation of the kd tree node culling 
    742755void displayVisualization() 
     
    753766        glViewport(winWidth / 2, winHeight / 2, winWidth, winHeight); 
    754767        glPushMatrix(); 
    755         glLoadMatrixd(visView); 
     768        glLoadMatrixf((float *)visView.x); 
    756769         
    757770        glClear(GL_DEPTH_BUFFER_BIT); 
    758771 
    759772        // --- visualization of the occlusion culling 
    760         HierarchyNode::SetRenderBoundingVolume(true); 
     773        /*HierarchyNode::SetRenderBoundingVolume(true); 
    761774        traverser.RenderVisualization(); 
    762775        HierarchyNode::SetRenderBoundingVolume(showBoundingVolumes); 
    763  
     776*/ 
    764777        glPopMatrix(); 
    765778        glViewport(0, 0, winWidth, winHeight); 
    766779} 
    767780 
    768 /** 
    769         sets up view matrix in order to get a good position  
     781/** Sets up view matrix in order to get a good position  
    770782        for viewing the kd tree node culling 
    771783*/ 
    772784void setupVisView() 
    773785{ 
    774         const Vector3 up = {0.0, 1.0, 0.0}; 
    775          
    776         Vector3 visPos = {24, 23, -6}; 
     786        const Vector3 up(0.0, 1.0, 0.0); 
     787         
     788        Vector3 visPos(24, 23, -6); 
    777789         
    778790        visPos[0] *= visZoomFactor;  
     
    780792        visPos[2] *= visZoomFactor; 
    781793 
    782         Vector3 visDir = {-1.3,-1,-1}; 
    783          
    784         normalize(visDir); 
    785         look(visView, visPos, visDir, up); 
     794        Vector3 visDir = Vector3(-1.3, -1, -1); 
     795         
     796        //normalize(visDir); 
     797        //look(visView, visPos, visDir, up); 
    786798} 
    787799 
     
    810822 
    811823// cleanup routine after the main loop 
    812 void cleanUp() 
    813 { 
    814         if(traverser.GetHierarchy())  
    815                 delete traverser.GetHierarchy(); 
    816  
    817         deleteGeometry(); 
    818  
    819         Geometry::CleanUp(); 
     824void CleanUp() 
     825{ 
     826        CLEAR_CONTAINER(sceneEntities); 
     827        DEL_PTR(traverser); 
     828 
     829        DEL_PTR(bvh); 
    820830} 
    821831 
     
    846856        } 
    847857} 
    848  
    849 #endif 
Note: See TracChangeset for help on using the changeset viewer.