Changeset 8604

Show
Ignore:
Timestamp:
07/16/08 13:40:01
Author:
robert
Message:

Removed a division by precomputing the associated values

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • OpenSceneGraph/trunk/src/osg/KdTree.cpp

    r8599 r8604  
    435435        _d = e - s; 
    436436        _length = _d.length(); 
    437         _inverse_length = 1.0f/_length
     437        _inverse_length = _length!=0.0f ? 1.0f/_length : 0.0
    438438        _d *= _inverse_length; 
     439         
     440        _d_invX = _d.x()!=0.0f ? _d/_d.x() : osg::Vec3(0.0f,0.0f,0.0f); 
     441        _d_invY = _d.y()!=0.0f ? _d/_d.y() : osg::Vec3(0.0f,0.0f,0.0f); 
     442        _d_invZ = _d.z()!=0.0f ? _d/_d.z() : osg::Vec3(0.0f,0.0f,0.0f); 
    439443    } 
    440444 
     
    453457    float     _length; 
    454458    float     _inverse_length; 
     459     
     460    osg::Vec3 _d_invX; 
     461    osg::Vec3 _d_invY; 
     462    osg::Vec3 _d_invZ; 
    455463}; 
    456464 
     
    601609        { 
    602610            // clip s to xMin. 
    603             s = s+(e-s)*(bb.xMin()-s.x())/(e.x()-s.x()); 
     611            s = s+_d_invX*(bb.xMin()-s.x()); 
    604612        } 
    605613 
     
    607615        { 
    608616            // clip e to xMax. 
    609             e = s+(e-s)*(bb.xMax()-s.x())/(e.x()-s.x()); 
     617            e = s+_d_invX*(bb.xMax()-s.x()); 
    610618        } 
    611619    } 
     
    618626        { 
    619627            // clip s to xMin. 
    620             e = s+(e-s)*(bb.xMin()-s.x())/(e.x()-s.x()); 
     628            e = s+_d_invX*(bb.xMin()-s.x()); 
    621629        } 
    622630 
     
    624632        { 
    625633            // clip e to xMax. 
    626             s = s+(e-s)*(bb.xMax()-s.x())/(e.x()-s.x()); 
     634            s = s+_d_invX*(bb.xMax()-s.x()); 
    627635        } 
    628636    } 
     
    639647        { 
    640648            // clip s to yMin. 
    641             s = s+(e-s)*(bb.yMin()-s.y())/(e.y()-s.y()); 
     649            s = s+_d_invY*(bb.yMin()-s.y()); 
    642650        } 
    643651 
     
    645653        { 
    646654            // clip e to yMax. 
    647             e = s+(e-s)*(bb.yMax()-s.y())/(e.y()-s.y()); 
     655            e = s+_d_invY*(bb.yMax()-s.y()); 
    648656        } 
    649657    } 
     
    656664        { 
    657665            // clip s to yMin. 
    658             e = s+(e-s)*(bb.yMin()-s.y())/(e.y()-s.y()); 
     666            e = s+_d_invY*(bb.yMin()-s.y()); 
    659667        } 
    660668 
     
    662670        { 
    663671            // clip e to yMax. 
    664             s = s+(e-s)*(bb.yMax()-s.y())/(e.y()-s.y()); 
     672            s = s+_d_invY*(bb.yMax()-s.y()); 
    665673        } 
    666674    } 
     
    677685        { 
    678686            // clip s to zMin. 
    679             s = s+(e-s)*(bb.zMin()-s.z())/(e.z()-s.z()); 
     687            s = s+_d_invZ*(bb.zMin()-s.z()); 
    680688        } 
    681689 
     
    683691        { 
    684692            // clip e to zMax. 
    685             e = s+(e-s)*(bb.zMax()-s.z())/(e.z()-s.z()); 
     693            e = s+_d_invZ*(bb.zMax()-s.z()); 
    686694        } 
    687695    }  
     
    694702        { 
    695703            // clip s to zMin. 
    696             e = s+(e-s)*(bb.zMin()-s.z())/(e.z()-s.z()); 
     704            e = s+_d_invZ*(bb.zMin()-s.z()); 
    697705        } 
    698706 
     
    700708        { 
    701709            // clip e to zMax. 
    702             s = s+(e-s)*(bb.zMax()-s.z())/(e.z()-s.z()); 
     710            s = s+_d_invZ*(bb.zMax()-s.z()); 
    703711        } 
    704712    }