Show
Ignore:
Timestamp:
10/21/14 17:10:27 (4 days ago)
Author:
robert
Message:

Added shaders to support experimental shader based displacement mapping technique osgTerrain::ShaderTerrain?.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgPlugins/stl/ReaderWriterSTL.cpp

    r13133 r13502  
    9898 
    9999            geom->setVertexArray(_vertex.get()); 
    100             geom->setNormalArray(_normal.get()); 
    101             geom->setNormalBinding(osg::Geometry::BIND_PER_PRIMITIVE); 
     100             
     101            if (_normal.valid()) 
     102            { 
     103                // need to convert per triangle normals to per vertex 
     104                osg::ref_ptr<osg::Vec3Array> perVertexNormals = new osg::Vec3Array; 
     105                perVertexNormals->reserveArray(_normal->size() * 3); 
     106                for(osg::Vec3Array::iterator itr = _normal->begin(); 
     107                    itr != _normal->end(); 
     108                    ++itr) 
     109                { 
     110                    perVertexNormals->push_back(*itr); 
     111                } 
     112                 
     113                geom->setNormalArray(perVertexNormals.get()); 
     114                geom->setNormalBinding(osg::Geometry::BIND_PER_VERTEX); 
     115            } 
     116             
     117            if (_color.valid()) 
     118            { 
     119                // need to convert per triangle colours to per vertex 
     120                OSG_INFO << "STL file with color" << std::endl; 
     121                osg::ref_ptr<osg::Vec4Array> perVertexColours = new osg::Vec4Array; 
     122                perVertexColours->reserveArray(_color->size() * 3); 
     123                for(osg::Vec4Array::iterator itr = _color->begin(); 
     124                    itr != _color->end(); 
     125                    ++itr) 
     126                { 
     127                    perVertexColours->push_back(*itr); 
     128                } 
     129                geom->setColorArray(perVertexColours.get()); 
     130                geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX); 
     131            } 
     132 
    102133            geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::TRIANGLES, 0, _numFacets * 3)); 
    103  
    104             if (_color.valid()) 
    105             { 
    106                 OSG_INFO << "STL file with color" << std::endl; 
    107                 geom->setColorArray(_color.get()); 
    108                 geom->setColorBinding(osg::Geometry::BIND_PER_PRIMITIVE); 
    109             } 
    110134 
    111135            osgUtil::TriStripVisitor tristripper;