Ignore:
Timestamp:
09/26/06 12:42:41 (18 years ago)
Author:
mattausch
Message:
 
Location:
GTP/trunk/Lib/Vis/Preprocessing/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/Preprocessing/src/GvsPreprocessor.cpp

    r1489 r1492  
    3232                                                                                           const VssRay &oldRay) const 
    3333{ 
     34        //|predicted(x)-xp|-|hit(x)-xp| > ?, 
    3435    //const Plane3 plane = tri->GetPlane(); 
    3536        return false; 
     
    5758        new sample points around a triangle in a eps environment 
    5859*/ 
    59 static void CreateNewSamples(VertexContainer &samples,  
    60                                                         const Triangle3 &hitTriangle, 
    61                                                         const VssRay &ray,  
    62                                                         const int index, 
    63                                                         const float eps) 
     60static void CreateNewRays(SimpleRayContainer &simpleRays,  
     61                                                  const Triangle3 &hitTriangle, 
     62                                                  const VssRay &ray,  
     63                                                  const int index, 
     64                                                  const float eps) 
    6465{ 
    6566        const int indexU = (index + 1) % 3; 
     
    6970        const Vector3 b = hitTriangle.mVertices[indexU] - hitTriangle.mVertices[index]; 
    7071        const Vector3 c = hitTriangle.mVertices[index] - hitTriangle.mVertices[indexL]; 
     72         
    7173        const float len = Magnitude(a); 
     74 
     75        const Vector3 dir1 = CrossProd(a, b); //N((pi-xp)×(pi+1- pi)); 
     76        const Vector3 dir2 = CrossProd(a, c); // N((pi-xp)×(pi- pi-1)) 
     77        const Vector3 dir3 = DotProd(dir1, dir2) > 0 ?  
     78                Normalize(dir2 + dir1) : Normalize(CrossProd(a, dir2) + CrossProd(dir1, a)); // N((pi-xp)×di,i-1+di,i+1×(pi-xp)) 
    7279 
    7380        // compute the new three hit points 
    7481        // pi, i + 1 
    75         const Vector3 dir1 = CrossProd(a, b); //N((pi-xp)×(pi+1- pi)); 
    7682        const Vector3 pt1 = hitTriangle.mVertices[index] + eps * len * dir1; //pi+ e·|pi-xp|·di, j 
    77         samples.push_back(pt1); 
    78  
    7983        // pi, i - 1 
    80     const Vector3 dir2 = CrossProd(a, c); // N((pi-xp)×(pi- pi-1)) 
    81         const Vector3 pt2 = hitTriangle.mVertices[index] + eps * len * dir2; //pi+ e·|pi-xp|·di, j 
    82         samples.push_back(pt2); 
    83  
     84    const Vector3 pt2 = hitTriangle.mVertices[index] + eps * len * dir2; //pi+ e·|pi-xp|·di, j 
    8485        // pi, i 
    85         const Vector3 dir3 = DotProd(dir1, dir2) > 0 ?  
    86                 Normalize(dir2 + dir1) : Normalize(CrossProd(a, dir2) + CrossProd(dir1, a)); // N((pi-xp)×di,i-1+di,i+1×(pi-xp)) 
    8786        const Vector3 pt3 = hitTriangle.mVertices[index] + eps * len * dir3; //pi+ e·|pi-xp|·di, j 
    88         samples.push_back(pt3); 
    89 } 
    90  
    91  
    92 /** Generate rays from sample points. 
    93 */ 
    94 static void CreateRays(VssRayContainer &rays, 
    95                                            const VertexContainer &samples) 
    96 { 
    97         VertexContainer::const_iterator vit, vit_end = samples.end(); 
    98          
    99         for (vit = samples.begin(); vit != vit_end; ++ vit) 
    100         { 
    101                 const Vector3 currentSample = *vit; 
    102                 VssRay *ray;// = new VssRay(ray->mOrigin, currentSample); 
    103         } 
    104 } 
     87         
     88        /// create simple rays and store them in container 
     89        Vector3 rayDir; 
     90        rayDir = Normalize(pt1 - ray.GetOrigin()); 
     91        simpleRays.push_back(SimpleRay(rayDir, ray.GetOrigin())); 
     92        rayDir = Normalize(pt2 - ray.GetOrigin()); 
     93        simpleRays.push_back(SimpleRay(rayDir, ray.GetOrigin())); 
     94        rayDir = Normalize(pt3 - ray.GetOrigin()); 
     95        simpleRays.push_back(SimpleRay(rayDir, ray.GetOrigin())); 
     96} 
     97 
    10598 
    10699 
     
    117110        } 
    118111 
    119         VertexContainer samples; 
    120         samples.reserve(9); 
    121  
    122         CreateNewSamples(samples, hitTriangle, prevRay, 0, mEps); 
    123         CreateNewSamples(samples, hitTriangle, prevRay, 1, mEps); 
    124         CreateNewSamples(samples, hitTriangle, prevRay, 2, mEps); 
     112        SimpleRayContainer simpleRays; 
     113        simpleRays.reserve(9); 
     114 
     115        CreateNewRays(simpleRays, hitTriangle, prevRay, 0, mEps); 
     116        CreateNewRays(simpleRays, hitTriangle, prevRay, 1, mEps); 
     117        CreateNewRays(simpleRays, hitTriangle, prevRay, 2, mEps); 
    125118 
    126119        VssRayContainer vssRays; 
    127         CreateRays(vssRays, samples); 
    128  
    129         VssRayContainer::const_iterator rit, rit_end = vssRays.end(); 
    130          
    131         for (rit = vssRays.begin(); rit != rit_end; ++ rit) 
    132         { 
    133                 VssRay *ray = *rit; 
    134  
    135                 // discontinuity found?  
    136                 // schedule for reverse sampling or adaptive border sampling 
    137                 const bool gap = DiscontinuityFound(*ray, prevRay); 
    138                 mRayQueue.push(GvsRayInfo(ray, gap)); 
    139         } 
    140  
    141         return 9; 
    142 } 
    143  
    144  
    145 int GvsPreprocessor::ReverseSampling(const VssRay &ray) 
     120         
     121        CastRays(simpleRays, vssRays); 
     122        // add to ray queue 
     123        EnqueueRays(vssRays); 
     124 
     125        return (int)vssRays.size(); 
     126} 
     127 
     128 
     129int GvsPreprocessor::ReverseSampling(const VssRay &oldRay) 
    146130{ 
    147131        cout << "r" << endl; 
     
    165149         
    166150        // add to ray queue 
    167         EnqueueSamples(samples); 
     151        EnqueueRays(samples); 
    168152 
    169153        Debug << "generated " <<  numSamples << " samples in " << TimeDiff(startTime, GetTime()) * 1e-3 << " secs" << endl; 
     
    173157 
    174158 
    175 void GvsPreprocessor::EnqueueSamples(VssRayContainer &samples, VssRay *oldRay) 
     159void GvsPreprocessor::EnqueueRays(VssRayContainer &samples, VssRay *oldRay) 
    176160{ 
    177161        // add samples to ray queue 
     
    183167                mRayQueue.push(GvsRayInfo(*vit, gap)); 
    184168        } 
    185  
    186169} 
    187170 
  • GTP/trunk/Lib/Vis/Preprocessing/src/GvsPreprocessor.h

    r1489 r1492  
    4040        }; 
    4141 
     42        typedef stack<GvsRayInfo> RayQueue; 
    4243 
    43         typedef stack<GvsRayInfo> RayQueue; 
     44        struct PendingRay 
     45        { 
     46                PendingRay(VssRay *ray, const bool d) 
     47                        : mRay(ray), mFoundDiscontinuity(d)  
     48                {} 
     49 
     50                VssRay *mRay; 
     51                bool mFoundDiscontinuity; 
     52        }; 
     53 
     54        typedef stack<PendingRay> PendingQueue; 
    4455 
    4556        /** Runs the adaptive sampling until the ray queue is empty.  
     
    92103                with respect to the previous ray. 
    93104        */ 
    94         void EnqueueSamples(VssRayContainer &samples, VssRay *prevRay = NULL); 
     105        void EnqueueRays(VssRayContainer &samples, VssRay *prevRay = NULL); 
    95106         
    96107        ////////////////////// 
  • GTP/trunk/Lib/Vis/Preprocessing/src/main.cpp

    r1486 r1492  
    127127                exit(1); 
    128128        } 
    129  
    130129 
    131130        string externKdTree = ReplaceSuffix(filename, ".obj", ".kdf"); 
Note: See TracChangeset for help on using the changeset viewer.