Ignore:
Timestamp:
08/18/06 19:28:12 (18 years ago)
Author:
mattausch
Message:

added intel ray tracing

Location:
GTP/trunk/Lib/Vis/Preprocessing
Files:
2 added
25 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/Preprocessing/scripts/Preprocessor.vcproj

    r1184 r1221  
    6161                        <Tool 
    6262                                Name="VCCLCompilerTool" 
     63                                Optimization="0" 
    6364                                InlineFunctionExpansion="0" 
    6465                                FavorSizeOrSpeed="0" 
    6566                                OptimizeForWindowsApplication="TRUE" 
    66                                 AdditionalIncludeDirectories="..\include;&quot;$(QTDIR)\include\QtCore&quot;;&quot;$(QTDIR)\include\QtGui&quot;;&quot;$(QTDIR)\include&quot;;&quot;$(QTDIR)\include\QtOpenGl&quot;;..\src;&quot;$(CG_INC_PATH)&quot;;..\..\..\..\..\..\NonGTP\Devil\include;..\..\..\..\..\..\NonGTP\Zlib\include;..\..\..\..\..\..\NonGTP\Xerces;&quot;$(BOOST_INCLUDE)&quot;" 
    67                                 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;" 
     67                                AdditionalIncludeDirectories="..\include;&quot;$(QTDIR)\include\QtCore&quot;;&quot;$(QTDIR)\include\QtGui&quot;;&quot;$(QTDIR)\include&quot;;&quot;$(QTDIR)\include\QtOpenGl&quot;;..\src;&quot;$(CG_INC_PATH)&quot;;..\..\..\..\..\..\NonGTP\Devil\include;..\..\..\..\..\..\NonGTP\Zlib\include;..\..\..\..\..\..\NonGTP\Xerces;&quot;$(BOOST_INCLUDE)&quot;;..\..\Preprocessing\MultiLevelRayTracing" 
     68                                PreprocessorDefinitions="WIN32;NDEBUG;_LIB" 
    6869                                ExceptionHandling="TRUE" 
    6970                                RuntimeLibrary="2" 
     
    245246                        </File> 
    246247                        <File 
     248                                RelativePath="..\src\ObjParser.cpp"> 
     249                        </File> 
     250                        <File 
     251                                RelativePath="..\src\ObjParser.h"> 
     252                        </File> 
     253                        <File 
    247254                                RelativePath="..\src\OcclusionQuery.cpp"> 
    248255                        </File> 
     
    459466                        </File> 
    460467                        <File 
     468                                RelativePath="..\src\VssRay.cpp"> 
     469                        </File> 
     470                        <File 
    461471                                RelativePath="..\src\VssRay.h"> 
    462472                        </File> 
     
    535545                        <File 
    536546                                RelativePath="..\src\Renderer.h"> 
    537                         </File> 
    538                         <File 
    539                                 RelativePath="..\src\VssRay.cpp"> 
    540547                        </File> 
    541548                </Filter> 
  • GTP/trunk/Lib/Vis/Preprocessing/scripts/TestPreprocessor.vcproj

    r1163 r1221  
    7070                        <Tool 
    7171                                Name="VCCLCompilerTool" 
    72                                 AdditionalIncludeDirectories="..\include;&quot;$(BOOST_INCLUDE)&quot;;&quot;$(QTDIR)\include\QtOpenGl&quot;;..\src;&quot;$(CG_INC_PATH)&quot;;..\..\..\..\..\..\NonGTP\Devil\include;..\..\..\..\..\..\NonGTP\Zlib\include;..\..\..\..\..\..\NonGTP\Xerces" 
     72                                Optimization="0" 
     73                                AdditionalIncludeDirectories="..\include;&quot;$(BOOST_INCLUDE)&quot;;&quot;$(QTDIR)\include\QtOpenGl&quot;;..\src;&quot;$(CG_INC_PATH)&quot;;..\..\..\..\..\..\NonGTP\Devil\include;..\..\..\..\..\..\NonGTP\Zlib\include;..\..\..\..\..\..\NonGTP\Xerces;..\..\MultiLevelRayTracing" 
    7374                                PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" 
    7475                                RuntimeLibrary="2" 
     
    8283                        <Tool 
    8384                                Name="VCLinkerTool" 
    84                                 AdditionalDependencies="xerces-c_2.lib glew32.lib zdll.lib zziplib.lib devil.lib glut32.lib OpenGL32.Lib glu32.lib cg.lib cgGL.lib Preprocessor.lib" 
     85                                AdditionalDependencies="xerces-c_2.lib glew32.lib zdll.lib zziplib.lib devil.lib glut32.lib OpenGL32.Lib glu32.lib cg.lib cgGL.lib Preprocessor.lib RTWorld.lib RTScene.lib" 
    8586                                OutputFile="$(OutDir)/Preprocessor.exe" 
    8687                                LinkIncremental="1" 
    87                                 AdditionalLibraryDirectories="..\support\xercesc\lib\;..\support\zlib\lib\;..\support\devil\lib;..\include;..\src\GL;&quot;$(CG_LIB_PATH)&quot;;..\lib\release;..\..\Preprocessing\lib\release;&quot;$(BOOST_LIB)&quot;;..\..\..\..\..\..\NonGTP\Xerces\xercesc\lib;..\..\..\..\..\..\NonGTP\Zlib\lib;..\..\..\..\..\..\NonGTP\Devil\lib" 
     88                                AdditionalLibraryDirectories="..\support\xercesc\lib\;..\support\zlib\lib\;..\support\devil\lib;..\include;..\src\GL;&quot;$(CG_LIB_PATH)&quot;;..\lib\release;..\..\Preprocessing\lib\release;&quot;$(BOOST_LIB)&quot;;..\..\..\..\..\..\NonGTP\Xerces\xercesc\lib;..\..\..\..\..\..\NonGTP\Zlib\lib;..\..\..\..\..\..\NonGTP\Devil\lib;..\..\Preprocessing\MultiLevelRayTracing\RTScene\Release;..\..\Preprocessing\MultiLevelRayTracing\RTWorld\Release" 
    8889                                GenerateDebugInformation="FALSE" 
    8990                                SubSystem="1" 
  • GTP/trunk/Lib/Vis/Preprocessing/src/Environment.cpp

    r1199 r1221  
    10931093                                 "atlanta2.x3d"); 
    10941094 
    1095    
    10961095  RegisterOption("Unigraphics.meshGrouping", 
    10971096                                 optInt, 
     
    10991098                                 "0"); 
    11001099   
     1100   RegisterOption("ObjParser.meshGrouping", 
     1101                                 optInt, 
     1102                                 "objparser_mesh_grouping=", 
     1103                                 "0"); 
    11011104 
    11021105  RegisterOption("KdTree.Termination.minCost", 
     
    17371740                                        "1000"); 
    17381741 
     1742        RegisterOption("Preprocessor.rayCastMethod",  
     1743                                        optInt, 
     1744                                        "preprocessor_ray_cast_method=", 
     1745                                        "0"); 
     1746 
    17391747        RegisterOption("Preprocessor.histogram.intervals",  
    17401748                                        optInt, 
  • GTP/trunk/Lib/Vis/Preprocessing/src/Parser.h

    r1020 r1221  
    33 
    44#include <string> 
     5#include <vector> 
     6 
    57 
    68namespace GtpVisibilityPreprocessor { 
    79 
    810class SceneGraphNode; 
    9  
     11class Intersectable; 
    1012 
    1113 
     
    1719  virtual bool ParseFile(const std::string filename,  
    1820                                                 SceneGraphNode **root,  
    19                                                  const bool loadPolygonsAsMeshes = false)  
     21                                                 const bool loadPolygonsAsMeshes = false, 
     22                                                 std::vector<Intersectable *> *parents = NULL)  
    2023  {return false;}; 
    2124         
  • GTP/trunk/Lib/Vis/Preprocessing/src/PlyParser.cpp

    r863 r1221  
    260260PlyParser::ParseFile(const string filename, 
    261261                                         SceneGraphNode **root, 
    262                                          const bool loadPolygonsAsMeshes) 
     262                                         const bool loadPolygonsAsMeshes, 
     263                                         vector<Intersectable *> *parents) 
    263264{ 
    264265  vector<string> filelist; 
  • GTP/trunk/Lib/Vis/Preprocessing/src/PlyParser.h

    r863 r1221  
    1616  bool ParseFile(const string filename, 
    1717                                 SceneGraphNode **root, 
    18                                  const bool loadPolygonsAsMeshes = false); 
     18                                 const bool loadPolygonsAsMeshes = false, 
     19                                 vector<Intersectable *> *parents = NULL); 
    1920 
    2021  bool ParseFile(const string filename, ViewCellsManager &viewCells) { return false; } 
  • GTP/trunk/Lib/Vis/Preprocessing/src/Preprocessor.cpp

    r1201 r1221  
    1414#include "SamplingStrategy.h" 
    1515#include "VspOspTree.h" 
    16  
     16#include "ObjParser.h" 
     17#include "ArchModeler2MLRT.hxx" 
    1718 
    1819 
     
    9394        scene->mRoot->UpdateBox(); 
    9495        } 
    95          
    96         // plane separating view space regions 
     96                 
    9797        if (1) 
    9898        { 
     99                // plane separating view space regions 
    99100                const Vector3 scale(1.0f, 0.0, 0); 
    100101 
     
    133134        Environment::GetSingleton()->GetBoolValue("Preprocessor.detectEmptyViewSpace", mDetectEmptyViewSpace); 
    134135        Environment::GetSingleton()->GetBoolValue("Preprocessor.exportVisibility", mExportVisibility ); 
     136        Environment::GetSingleton()->GetIntValue("Preprocessor.rayCastMethod", mRayCastMethod); 
    135137 
    136138        char buffer[256]; 
     
    220222                  if (strstr(filename.c_str(), ".ply") || strstr(filename.c_str(), ".plb")) 
    221223                        parser = new PlyParser; 
    222                   else 
    223                         parser = new UnigraphicsParser; 
     224                  else if (strstr(filename.c_str(), ".obj")) 
     225                          parser = new ObjParser; 
     226                  else  
     227                          parser = new UnigraphicsParser; 
    224228 
    225229                cout<<filename<<endl; 
    226                 result = parser->ParseFile(filename, &mSceneGraph->mRoot, mLoadPolygonsAsMeshes); 
     230 
     231                if (mRayCastMethod == Preprocessor::INTEL_RAYCASTER) 
     232                        result = parser->ParseFile(filename, &mSceneGraph->mRoot, mLoadPolygonsAsMeshes, &mFaceParents); 
     233                else 
     234                        result = parser->ParseFile(filename, &mSceneGraph->mRoot, mLoadPolygonsAsMeshes); 
    227235 
    228236                delete parser; 
     
    234242                        if (strstr(filenames[i].c_str(), ".x3d")) 
    235243                                parser = new X3dParser; 
    236                         else 
     244                        else  
    237245                                parser = new UnigraphicsParser; 
    238                          
     246                                                 
    239247                        SceneGraphNode *node; 
    240248                        if (parser->ParseFile(filenames[i], &node)) { 
     
    736744                return NULL; 
    737745        } 
     746 
    738747        // should never come here 
    739748        return NULL; 
     
    741750 
    742751 
    743 } 
     752bool Preprocessor::InitRayCast(const string externKdTree) 
     753{ 
     754        switch (mRayCastMethod) // use intel ray tracing 
     755        { 
     756        case INTEL_RAYCASTER: 
     757                return mlrtaLoadAS(externKdTree.c_str()); 
     758        case INTERNAL_RAYCASTER: 
     759        default: 
     760                break; 
     761        } 
     762 
     763        return true; 
     764} 
     765 
     766} 
  • GTP/trunk/Lib/Vis/Preprocessing/src/Preprocessor.h

    r1197 r1221  
    2626class VspTree; 
    2727class OspTree; 
     28class Intersectable; 
    2829 
    2930/** Namespace for the external visibility preprocessor 
     
    131132  }; 
    132133   
     134  enum { 
     135          INTERNAL_RAYCASTER, 
     136          INTEL_RAYCASTER 
     137  }; 
     138 
    133139  virtual bool 
    134140  GenerateRays( 
     
    144150  */ 
    145151  ViewCellsManager *CreateViewCellsManager(const char *name); 
     152 
     153    
     154  GlRendererBuffer *GetRenderer() { return renderer;} 
     155 
     156  bool InitRayCast(const string externKdTree); 
     157 
     158  //////////////////////////////////////////////// 
    146159 
    147160  /// scene graph loaded from file 
     
    192205 
    193206  float mVisibilityFilterWidth; 
    194    
    195   GlRendererBuffer *GetRenderer() { return renderer;} 
    196    
     207  
     208  int GetRayCastMethod() { return mRayCastMethod; } 
     209  void SetRayCastMethod(int rayCastMethod) { mRayCastMethod = rayCastMethod; } 
     210 
    197211protected: 
    198212 
    199213  ///////////////////////// 
    200214 
     215        int mRayCastMethod; 
    201216  /// samples used for construction of the BSP view cells tree. 
    202217  int mBspConstructionSamples; 
     
    207222  RenderSimulator *mRenderSimulator; 
    208223 
     224  vector<Intersectable *> mFaceParents; 
    209225  GlRendererBuffer *renderer; 
    210226// matt: remove qt dependencies  
  • GTP/trunk/Lib/Vis/Preprocessing/src/SamplingPreprocessor.cpp

    r1199 r1221  
    1111 
    1212 
     13 
    1314namespace GtpVisibilityPreprocessor { 
    1415 
     
    3536                                                          ) 
    3637{ 
    37  
     38        //float *pforg; 
     39        //float *pfdir; 
     40        //mlrtaStoreRayAS4(pforg, pfdir, 4); 
     41        ////////////////////////////////// 
    3842  static Ray ray; 
    3943  AxisAlignedBox3 box = mViewCellsManager->GetViewSpaceBox(); 
  • GTP/trunk/Lib/Vis/Preprocessing/src/SamplingPreprocessor.h

    r1199 r1221  
    1313 
    1414/** Sampling based visibility preprocessing. The implementation is based on heuristical 
    15     sampling of view space */ 
     15    sampling of view space  
     16        */ 
    1617class SamplingPreprocessor : public Preprocessor { 
    1718public: 
  • GTP/trunk/Lib/Vis/Preprocessing/src/UnigraphicsParser.cpp

    r1076 r1221  
    4444UnigraphicsParser::ParseFile(const string filename, 
    4545                             SceneGraphNode **proot, 
    46                                  const bool loadPolygonsAsMeshese) 
     46                                 const bool loadPolygonsAsMeshes, 
     47                                 vector<Intersectable *> *parents) 
    4748{ 
    4849  map<string, Vector3, ltstr> vht; // hash table for vectors 
  • GTP/trunk/Lib/Vis/Preprocessing/src/UnigraphicsParser.h

    r1001 r1221  
    1717  virtual bool ParseFile(const std::string filename,  
    1818                                                 SceneGraphNode **root,  
    19                                                  const bool loadPolygonsAsMeshes = false); 
     19                                                 const bool loadPolygonsAsMeshes = false, 
     20                                                 vector<Intersectable *> *parents = NULL); 
    2021   
    2122}; 
  • GTP/trunk/Lib/Vis/Preprocessing/src/ViewCell.cpp

    r1201 r1221  
    3232                                           myless<vector<ViewCell *>::value_type> > TraversalQueue; 
    3333 
    34 int ViewCell::sMailId = 21843194198; 
     34int ViewCell::sMailId = 0;//21843194198; 
    3535int ViewCell::sReservedMailboxes = 1; 
    3636 
  • GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsManager.cpp

    r1201 r1221  
    239239} 
    240240 
    241 AxisAlignedBox3 
    242 ViewCellsManager::GetViewCellBox(ViewCell *vc) 
     241 
     242AxisAlignedBox3 ViewCellsManager::GetViewCellBox(ViewCell *vc) 
    243243{ 
    244244  Mesh *m = vc->GetMesh(); 
     
    349349        SimpleRayContainer simpleRays; 
    350350 
    351         mPreprocessor->GenerateRays(samplesPerPass, 
    352                                                            sampleType, 
    353                                                            simpleRays); 
     351        const long startTime = GetTime(); 
     352 
     353        mPreprocessor->GenerateRays(samplesPerPass, sampleType, simpleRays); 
     354 
     355        Debug << "generated " <<  mInitialSamples << " samples in " << TimeDiff(startTime, GetTime()) * 1e-3 << " secs" << endl; 
    354356 
    355357        // shoot simple ray and add it to importance samples 
    356358        mPreprocessor->CastRays(simpleRays, passSamples); 
     359         
     360        Debug << "cast " <<  mInitialSamples << " samples in " << TimeDiff(startTime, GetTime()) * 1e-3 << " secs" << endl; 
    357361 
    358362        return (int)passSamples.size(); 
    359363} 
    360  
    361364 
    362365 
     
    408411 
    409412        //-- construction rays => we use uniform samples for this 
    410         CastPassSamples(mInitialSamples,  
    411                                         mSamplingType, 
    412                                         initialSamples); 
    413          
    414         cout << "finished" << endl; 
     413        CastPassSamples(mInitialSamples, mSamplingType, initialSamples); 
     414         
     415        cout << "finished in " << TimeDiff(startTime, GetTime()) * 1e-3 << " secs" << endl; 
    415416 
    416417         
     
    677678        ViewCellsManager *vm = NULL; 
    678679 
    679         if (parser.ParseFile(filename, &vm, objects, bconverter)) 
     680        if (parser.ParseViewCellsFile(filename, &vm, objects, bconverter)) 
    680681        { 
    681682                long startTime = GetTime(); 
     
    36723673 
    36733674        if (1) 
     3675        { 
    36743676                mVspBspTree->Construct(constructionRays, &mViewSpaceBox); 
     3677        } 
    36753678        else 
     3679        { 
    36763680                mVspBspTree->Construct(rays, &mViewSpaceBox); 
     3681        } 
    36773682 
    36783683        // collapse invalid regions 
     
    36853690    cout << "finished" << endl; 
    36863691 
    3687         //-- stats 
     3692        //-- stats after construction 
     3693 
    36883694        Debug << mVspBspTree->GetStatistics() << endl; 
    36893695 
     
    57985804        Debug << "compute new statistics ... "; 
    57995805 
    5800         //-- propagate pvs or pvs size information 
     5806        // propagate pvs or pvs size information 
    58015807        ObjectPvs pvs; 
    58025808        UpdatePvsForEvaluation(mViewCellsTree->GetRoot(), pvs); 
    58035809 
    5804         //-- output stats 
    5805  
    5806         sprintf(s, "-%09d-eval.log", castSamples); 
    5807         string fileName = string(statsPrefix) + string(s); 
    5808  
    5809         ViewCellContainer leaves; 
    5810  
    5811         mViewCellsTree->CollectLeaves(mViewCellsTree->GetRoot(), leaves); 
     5810 
     5811//-- test render cost 
     5812 
     5813sprintf(s, "-%09d-eval.log", castSamples); 
     5814string fileName = string(statsPrefix) + string(s); 
     5815 
     5816ViewCellContainer leaves; 
     5817 
     5818mViewCellsTree->CollectLeaves(mViewCellsTree->GetRoot(), leaves); 
    58125819float rc = 0; 
    5813         ViewCellContainer::const_iterator vit, vit_end = leaves.end(); 
    5814         for (vit = leaves.begin(); vit != vit_end; ++ vit) 
    5815         { 
    5816                 ViewCell *vc = *vit; 
    5817  
     5820ViewCellContainer::const_iterator vit, vit_end = leaves.end(); 
     5821for (vit = leaves.begin(); vit != vit_end; ++ vit) 
     5822{ 
     5823        ViewCell *vc = *vit; 
    58185824                int pvs = vc->GetPvs().CountObjectsInPvs(); 
    5819                 float vol = vc->GetVolume(); 
    5820                 rc += pvs * vol; 
     5825        float vol = vc->GetVolume(); 
     5826        rc += pvs * vol; 
    58215827 
    58225828        } 
  • GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsParser.cpp

    r1201 r1221  
    964964 
    965965 
    966 bool ViewCellsParser::ParseFile(const string filename,  
    967                                                                 ViewCellsManager **viewCells, 
    968                                                                 ObjectContainer *objects, 
    969                                                                 BoundingBoxConverter *bconverter) 
     966bool ViewCellsParser::ParseViewCellsFile(const string filename,  
     967                                                                                 ViewCellsManager **viewCells, 
     968                                                                                 ObjectContainer *objects, 
     969                                                                                 BoundingBoxConverter *bconverter) 
    970970{ 
    971971  // Initialize the XML4C system 
  • GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsParser.h

    r1004 r1221  
    1818   
    1919  //bool ParseFile(const string filename, ViewCellsManager &viewCells); 
    20   bool ParseFile(const string filename,  
    21                                 ViewCellsManager **viewCells, 
    22                                  ObjectContainer *objectsm, 
    23                                 BoundingBoxConverter *bconverter); 
     20  bool ParseViewCellsFile(const string filename,  
     21          ViewCellsManager **viewCells, 
     22          ObjectContainer *objects, 
     23          BoundingBoxConverter *bconverter); 
    2424}; 
    2525 
  • GTP/trunk/Lib/Vis/Preprocessing/src/VspOspTree.cpp

    r1201 r1221  
    581581 
    582582 
    583 bool VspTree::LocalTerminationCriteriaMet(const VspTraversalData &data) const 
     583inline bool VspTree::LocalTerminationCriteriaMet(const VspTraversalData &data) const 
    584584{ 
    585585        const bool localTerminationCriteriaMet = ( 
     
    606606 
    607607 
    608 bool VspTree::GlobalTerminationCriteriaMet(const VspTraversalData &data) const 
     608inline bool VspTree::GlobalTerminationCriteriaMet(const VspTraversalData &data) const 
    609609{ 
    610610        const bool terminationCriteriaMet = ( 
     
    29312931 
    29322932 
    2933 void VspTree::GetViewCells(VssRay &ray, ViewCellContainer &viewCells) 
    2934 { 
    2935         mViewCellsManager->ComputeSampleContribution(ray, false, true); 
     2933void VspTree::GetViewCells(const VssRay &ray, ViewCellContainer &viewCells) 
     2934{ 
     2935        /*mViewCellsManager->ComputeSampleContribution(ray, false, true); 
    29362936        viewCells = ray.mViewCells; 
    29372937        ray.mViewCells.clear(); 
    2938         /* 
     2938        */ 
    29392939        static Ray hray; 
    29402940        hray.Init(ray); 
     
    29512951 
    29522952        // if no precomputation of view cells 
    2953         CastLineSegment(origin, termination, viewCells);*/ 
     2953        CastLineSegment(origin, termination, viewCells); 
    29542954} 
    29552955 
     
    33683368 
    33693369 
    3370 bool OspTree::LocalTerminationCriteriaMet(const OspTraversalData &data) const 
     3370inline bool OspTree::LocalTerminationCriteriaMet(const OspTraversalData &data) const 
    33713371{ 
    33723372        // matt: TODO 
     
    33793379 
    33803380 
    3381 bool OspTree::GlobalTerminationCriteriaMet(const OspTraversalData &data) const 
     3381inline bool OspTree::GlobalTerminationCriteriaMet(const OspTraversalData &data) const 
    33823382{ 
    33833383        // matt: TODO 
     
    35373537                { 
    35383538                        float currentPos; 
    3539                         Debug << "here29 : " << minRenderCost / viewSpaceVol << endl; 
     3539                        //Debug << "here29 : " << minRenderCost / viewSpaceVol << endl; 
    35403540 
    35413541                        // HACK: current positition is BETWEEN visibility events 
     
    36773677        // collect view cells and set mail + counter 
    36783678        ViewCellContainer viewCells; 
    3679         mVspTree->GetViewCells(VssRay(ray), viewCells); 
     3679        mVspTree->GetViewCells(ray, viewCells); 
    36803680         
    36813681        ViewCellContainer::const_iterator vit, vit_end = viewCells.end(); 
     
    37983798 
    37993799 
    3800 void OspTree::EvalRayContribution(KdLeaf *leaf, 
    3801                                                                   const VssRay &ray,  
    3802                                                                   float &renderCost) 
     3800void OspTree::EvalRayContribution(KdLeaf *leaf, const VssRay &ray, float &renderCost) 
    38033801{ 
    38043802        ViewCellContainer viewCells; 
    38053803 
    3806         mVspTree->GetViewCells(VssRay(ray), viewCells); 
     3804        mVspTree->GetViewCells(ray, viewCells); 
    38073805 
    38083806        // classify view cells and compute volume contri accordingly 
     
    39943992    plane.mPosition = nPosition[bestAxis]; 
    39953993 
    3996         pFront = nProbFront[bestAxis]; 
    3997         pBack = nProbBack[bestAxis]; 
     3994        //pFront = nProbFront[bestAxis]; 
     3995        //pBack = nProbBack[bestAxis]; 
    39983996 
    39993997        Debug << "val: " << nCostRatio[bestAxis] << " axis: " << bestAxis << endl; 
  • GTP/trunk/Lib/Vis/Preprocessing/src/VspOspTree.h

    r1201 r1221  
    774774                or by recomputation. 
    775775        */ 
    776         void GetViewCells(VssRay &ray, ViewCellContainer &viewCells); 
     776        void GetViewCells(const VssRay &ray, ViewCellContainer &viewCells); 
    777777 
    778778 
     
    10011001        /** Returns true if tree can be terminated. 
    10021002        */ 
    1003         inline bool LocalTerminationCriteriaMet(const VspTraversalData &data) const; 
     1003        /*inline*/ bool LocalTerminationCriteriaMet(const VspTraversalData &data) const; 
    10041004 
    10051005        /** Returns true if global tree can be terminated. 
    10061006        */ 
    1007         inline bool GlobalTerminationCriteriaMet(const VspTraversalData &data) const; 
     1007        /*inline*/ bool GlobalTerminationCriteriaMet(const VspTraversalData &data) const; 
    10081008 
    10091009        /** Adds ray sample contributions to the PVS. 
     
    15871587         
    15881588        */ 
    1589         void UpdateObjPvsContri(Intersectable *obj,  
    1590                                          const int cf,  
    1591                                          float &frontPvs,  
    1592                                          float &backPvs,  
    1593                                          float &totalPvs) const; 
     1589        void UpdateObjPvsContri( 
     1590                Intersectable *obj,  
     1591                const int cf,  
     1592                float &frontPvs,  
     1593                float &backPvs,  
     1594                float &totalPvs) const; 
    15941595         
    15951596        /** Returns true if tree can be terminated. 
    15961597        */ 
    1597         inline bool LocalTerminationCriteriaMet(const OspTraversalData &data) const; 
     1598        /*inline*/ bool LocalTerminationCriteriaMet(const OspTraversalData &data) const; 
    15981599 
    15991600        /** Returns true if global tree can be terminated. 
    16001601        */ 
    1601         inline bool GlobalTerminationCriteriaMet(const OspTraversalData &data) const; 
     1602        /*inline*/ bool GlobalTerminationCriteriaMet(const OspTraversalData &data) const; 
    16021603 
    16031604        float SelectSplitPlane(const OspTraversalData &tData, 
  • GTP/trunk/Lib/Vis/Preprocessing/src/VssPreprocessor.cpp

    r1145 r1221  
    1313#include "Beam.h" 
    1414#include "GlRenderer.h" 
    15 #include "ViewCellBsp.h" 
     15#include "ArchModeler2MLRT.hxx" 
     16#include "Intersectable.h" 
     17 
    1618 
    1719namespace GtpVisibilityPreprocessor { 
     
    7678                                                  ) 
    7779{ 
    78   for (int i=0; i < rays.size(); i++) 
    79         CastRay(rays[i].mOrigin, rays[i].mDirection, vssRays); 
     80        AxisAlignedBox3 &box =  mViewSpaceBox ? *mViewSpaceBox : mKdTree->GetBox(); 
     81         
     82#if 1 
     83        for (int i=0; i < rays.size(); i++) 
     84        { 
     85                CastRay(rays[i].mOrigin, rays[i].mDirection, vssRays, box); 
     86        } 
     87#else 
     88        for (int i = 0; i < rays.size(); i += 16) 
     89        { 
     90                CastRay(rays[i].mOrigin, rays[i].mDirection, vssRays, box); 
     91        } 
     92 
     93#endif 
     94} 
     95 
     96 
     97void VssPreprocessor::CastRays16(SimpleRayContainer &rays,  
     98                                                                 VssRayContainer &vssRays, 
     99                                                                 const AxisAlignedBox3 &sbox) 
     100{ 
     101/* 
     102        mlrtaStoreRayAS16(const float* pforg, const float* pfdir, int j); 
     103 
     104 
     105        // input parameters 
     106        const RTVec3f& org = *reinterpret_cast<const RTVec3f*> (pforg); 
     107        const RTVec3f& rd  = *reinterpret_cast<const RTVec3f*> (pfdir); 
     108 
     109        int ri = j/4; 
     110        int ci = j%4; 
     111        *((float*)&ibp4.ray4X[ri].m_origin.t[0] + ci) = org[0]; 
     112        *((float*)&ibp4.ray4X[ri].m_origin.t[1] + ci) = org[1]; 
     113        *((float*)&ibp4.ray4X[ri].m_origin.t[2] + ci) = org[2]; 
     114 
     115        *((float*)&ibp4.ray4X[ri].m_direction.t[0] + ci) = rd[0]; 
     116        *((float*)&ibp4.ray4X[ri].m_direction.t[1] + ci) = rd[1]; 
     117        *((float*)&ibp4.ray4X[ri].m_direction.t[2] + ci) = rd[2]; 
     118 
     119        mlrtaTraverseGroupAS16(const float* bbmin, const float* bbmax, int* hit_triangles, float* dist);*/ 
     120} 
     121 
     122 
     123int VssPreprocessor::CastIntelDoubleRay( 
     124                                                                                const Vector3 &viewPoint, 
     125                                                                                const Vector3 &direction, 
     126                                                                                VssRayContainer &vssRays, 
     127                                                                                const AxisAlignedBox3 &box) 
     128{ 
     129        VssRay *vssRay  = NULL; 
     130        int hits = 0; 
     131 
     132        Vector3 pointA, pointB; 
     133         
     134        Intersectable *objectA =  
     135                CastIntelSingleRay(viewPoint, direction, pointA, box); 
     136         
     137        // cast ray into other direction 
     138        Intersectable *objectB =  
     139                CastIntelSingleRay(viewPoint, -direction, pointB, box); 
     140 
     141        const bool validSample = (objectA != objectB); 
     142         
     143        if (validSample)  
     144        {        
     145                if (objectA)  
     146                { 
     147                        vssRay = new VssRay(pointB, 
     148                                                                pointA, 
     149                                                                objectB, 
     150                                                                objectA, 
     151                                                                mPass); 
     152                        vssRays.push_back(vssRay); 
     153                        hits ++; 
     154                } 
     155 
     156                if (objectB)  
     157                { 
     158                        vssRay = new VssRay(pointA, 
     159                                                                pointB, 
     160                                                                objectA, 
     161                                                                objectB, 
     162                                                                mPass); 
     163                        vssRays.push_back(vssRay); 
     164                        hits ++; 
     165                } 
     166                //Debug << "intel ray: " << *vssRay << endl; 
     167        } 
     168//cout << "a"; 
     169        return hits; 
     170} 
     171 
     172 
     173Intersectable *VssPreprocessor::CastIntelSingleRay(const Vector3 &viewPoint, 
     174                                                                                                   const Vector3 &direction, 
     175                                                                                                   Vector3 &tPoint, 
     176                                                                                                   const AxisAlignedBox3 &box 
     177                                                                                                   ) 
     178{ 
     179        AxisAlignedBox3 sbox = box; 
     180        sbox.Enlarge(Vector3(-Limits::Small)); 
     181 
     182        if (!sbox.IsInside(viewPoint)) 
     183                return 0; 
     184         
     185        float pforg[3]; 
     186        float pfdir[3]; 
     187        double pfnorm[3]; 
     188 
     189        pforg[0] = viewPoint[0]; pforg[1] = viewPoint[1]; pforg[2] = viewPoint[2]; 
     190        pfdir[0] = direction[0]; pfdir[1] = direction[1]; pfdir[2] = direction[2]; 
     191 
     192        float dist = 0; 
     193        const int hittriangle = mlrtaIntersectAS(pforg, pfdir, pfnorm, dist); 
     194 
     195        if (hittriangle == -1) 
     196        { 
     197                static Ray ray; 
     198                SetupRay(ray, viewPoint, direction); 
     199 
     200                float tmin = 0, tmax; 
     201                if (box.ComputeMinMaxT(ray, &tmin, &tmax) && tmin < tmax) 
     202                { 
     203                        tPoint = ray.Extrap(tmax); 
     204                } 
     205 
     206                return NULL; 
     207        } 
     208        else 
     209        { 
     210                tPoint[0] = pforg[0] + pfdir[0] * dist; 
     211                tPoint[1] = pforg[1] + pfdir[1] * dist; 
     212                tPoint[2] = pforg[2] + pfdir[2] * dist; 
     213 
     214                return mFaceParents[hittriangle]; 
     215        } 
    80216} 
    81217 
    82218 
    83219int 
    84 VssPreprocessor::CastRay( 
    85                                                 Vector3 &viewPoint, 
    86                                                 Vector3 &direction, 
    87                                                  VssRayContainer &vssRays 
    88                                                  ) 
    89 { 
    90  
     220VssPreprocessor::CastInternalRay( 
     221                                                                 const Vector3 &viewPoint, 
     222                                                                 const Vector3 &direction, 
     223                                                                 VssRayContainer &vssRays, 
     224                                                                 const AxisAlignedBox3 &box  
     225                                                                 ) 
     226{ 
    91227    int hits = 0; 
    92228        static Ray ray; 
    93          
    94         AxisAlignedBox3 box =  mViewSpaceBox ? *mViewSpaceBox : mKdTree->GetBox(); 
     229 
    95230        AxisAlignedBox3 sbox = box; 
    96      
    97231        sbox.Enlarge(Vector3(-Limits::Small)); 
    98          
     232 
    99233        if (!sbox.IsInside(viewPoint)) 
    100234                return 0; 
     
    109243 
    110244        //float bsize = Magnitude(box.Size()); 
    111  
    112245        if (!mDetectEmptyViewSpace) 
    113246                ray.mFlags &= ~Ray::CULL_BACKFACES; 
     
    132265 
    133266        // matt: point A could be undefined? 
     267 
     268        // cast ray into opposite direction 
    134269        if (1 && mDetectEmptyViewSpace) { 
    135270                SetupRay(ray, pointA, -direction); 
     
    215350                        hits ++; 
    216351                } 
    217         } 
    218          
     352                //Debug << "internal ray: " << *vssRay << endl << endl; 
     353        } 
     354//cout << "b"; 
    219355        return hits; 
     356} 
     357 
     358 
     359int 
     360VssPreprocessor::CastRay( 
     361                                                 const Vector3 &viewPoint, 
     362                                                 const Vector3 &direction, 
     363                                                 VssRayContainer &vssRays, 
     364                                                 const AxisAlignedBox3 &box 
     365                                                 ) 
     366{ 
     367        switch (mRayCastMethod) 
     368        { 
     369        case INTEL_RAYCASTER: 
     370                return CastIntelDoubleRay(viewPoint, direction, vssRays, box); 
     371        case INTERNAL_RAYCASTER: 
     372        default: 
     373                return CastInternalRay(viewPoint, direction, vssRays, box); 
     374        } 
    220375} 
    221376 
     
    565720        box.SetMax(1, box.Min(1)); 
    566721 
    567   cout << "use view space box=" << mUseViewSpaceBox<<endl; 
     722  cout << "use view space box=" << mUseViewSpaceBox << endl; 
    568723 
    569724   
    570725  if (mUseViewSpaceBox) 
    571726  { 
     727        //mViewSpaceBox = ConstructViewSpaceBox(); 
     728 
    572729          if (!mEnlargeViewSpace) 
    573730          { 
     
    671828                        Vector3 direction = GetDirection(viewpoint, mViewSpaceBox); 
    672829 
    673                         sampleContributions = CastRay(viewpoint, direction, mVssRays); 
     830                        sampleContributions = CastRay(viewpoint, direction, mVssRays, vbox); 
    674831 
    675832                        if (sampleContributions) { 
     
    802959 
    803960        for (int i=0; i < rays.size(); i++) 
    804           CastRay(rays[i].mOrigin, rays[i].mDirection, vssRays); 
     961          CastRay(rays[i].mOrigin, rays[i].mDirection, vssRays, vbox); 
    805962 
    806963        vssTree->AddRays(vssRays); 
     
    842999  } 
    8431000 
    844   if (0) 
    845           Debug << vssTree->stat << endl; 
     1001  if (0)  Debug << vssTree->stat << endl; 
    8461002 
    8471003  if (0) 
    8481004  { 
    8491005        VssRayContainer viewCellRays; 
    850    
    851         // compute rays used for view cells construction 
     1006        // compute rays used for view cells construction 
    8521007        const int numRays = mViewCellsManager->GetVisualizationSamples(); 
    853  
    8541008        vssTree->CollectRays(viewCellRays, numRays); 
    8551009  } 
  • GTP/trunk/Lib/Vis/Preprocessing/src/VssPreprocessor.h

    r860 r1221  
    6666  int 
    6767  CastRay( 
    68                   Vector3 &viewPoint, 
    69                   Vector3 &direction, 
    70                   VssRayContainer &vssRays 
    71  
     68                  const Vector3 &viewPoint, 
     69                  const Vector3 &direction, 
     70                  VssRayContainer &vssRays, 
     71                  const AxisAlignedBox3 &box 
    7272                  ); 
    7373 
     
    112112 
    113113  bool mTestBeamSampling; 
     114 
     115protected: 
     116        int CastInternalRay( 
     117                const Vector3 &viewPoint, 
     118                const Vector3 &direction, 
     119                VssRayContainer &vssRays, 
     120                const AxisAlignedBox3 &sbox); 
     121 
     122        int CastIntelDoubleRay( 
     123                const Vector3 &viewPoint, 
     124                const Vector3 &direction, 
     125                VssRayContainer &vssRays, 
     126                const AxisAlignedBox3 &sbox); 
     127 
     128        Intersectable *CastIntelSingleRay( 
     129                        const Vector3 &viewPoint, 
     130                        const Vector3 &direction, 
     131                        Vector3 &tPoint, 
     132                        const AxisAlignedBox3 &abox); 
     133 
     134        void CastRays16(SimpleRayContainer &rays,  
     135                                        VssRayContainer &vssRays, 
     136                                        const AxisAlignedBox3 &sbox); 
    114137}; 
    115138 
  • GTP/trunk/Lib/Vis/Preprocessing/src/VssRay.h

    r1133 r1221  
    282282    return SqrMagnitude(diff); 
    283283  } 
    284  
     284  friend ostream& operator<< (ostream &s, const VssRay &vssRay); 
     285     
    285286}; 
    286287 
     
    297298                                                                                  const float overlap 
    298299                                                                                  ); 
     300 
     301// Overload << operator for C++-style output 
     302inline ostream& 
     303operator<< (ostream &s, const VssRay &vssRay) 
     304{ 
     305        return s  
     306                << "(" << vssRay.mPass << ", " << vssRay.mOrigin << ", " << vssRay.mTermination  
     307                << ", " << vssRay.mOriginObject << ", " << vssRay.mTerminationObject << ", " << vssRay.mPdf << ")"; 
     308} 
    299309 
    300310// -------------------------------------------------------------- 
  • GTP/trunk/Lib/Vis/Preprocessing/src/X3dExporter.h

    r1197 r1221  
    2424class VspBspTree; 
    2525class BspNode; 
    26 //class VspKdViewCell; 
    2726class Beam; 
     27 
    2828 
    2929class X3dExporter : public Exporter 
  • GTP/trunk/Lib/Vis/Preprocessing/src/X3dParser.cpp

    r1112 r1221  
    655655X3dParser::ParseFile(const string filename, 
    656656                                         SceneGraphNode **root, 
    657                                          const bool loadPolygonsAsMeshes) 
     657                                         const bool loadPolygonsAsMeshes, 
     658                                         vector<Intersectable *> *parents) 
    658659{ 
    659660  // Initialize the XML4C system 
  • GTP/trunk/Lib/Vis/Preprocessing/src/X3dParser.h

    r971 r1221  
    1515        X3dParser(); 
    1616   
    17         bool ParseFile(const string filename, SceneGraphNode **root, const bool loadPolygonsAsMeshes = false); 
     17        bool ParseFile( 
     18                const string filename,  
     19                SceneGraphNode **root,  
     20                const bool loadPolygonsAsMeshes = false, 
     21                vector<Intersectable *> *parents = NULL); 
     22 
    1823        bool ParseFile(const string filename, ViewCellsManager &viewCells); 
    1924  
  • GTP/trunk/Lib/Vis/Preprocessing/src/main.cpp

    r1201 r1221  
    161161        preprocessor->LoadScene(filename); 
    162162 
     163        //-- initialize external ray casters 
     164        if (preprocessor->InitRayCast("../data/grandcanyon1_RotXmin90.kdf")) 
     165        { 
     166                cout << "ray casting initialized!" << endl; 
     167        } 
     168        else 
     169        { 
     170                cout << "ray casting initialization failed" << endl; 
     171                exit(1); 
     172        } 
     173 
    163174        //-- build kd tree from scene geometry 
    164175        preprocessor->BuildKdTree(); 
    165176        preprocessor->KdTreeStatistics(cout); 
    166         preprocessor->mKdTree->ExportBinTree("kd.bin.gz"); 
    167          
     177         
     178        /*preprocessor->mKdTree->ExportBinTree("kd.bin.gz"); 
    168179        MeshManager::GetSingleton()->ExportEntries("meshes.bin"); 
    169180 
     
    188199 
    189200        DEL_PTR(kdTree2); 
    190  
     201*/ 
    191202        // parse view cells related options 
    192203        preprocessor->PrepareViewCells(); 
     
    209220                // create and run the preprocessor application in a parallel thread 
    210221                pt.InitThread(); 
    211                 //pt.RunThread(); 
    212  
     222         
    213223                // display the render widget 
    214224                DisplayWidget(); 
Note: See TracChangeset for help on using the changeset viewer.