Show
Ignore:
Timestamp:
07/01/05 11:10:37 (9 years ago)
Author:
robert
Message:

Added support for point sprites

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgpoints/osgpoints.cpp

    r4360 r4368  
    1515 
    1616#include <osg/Point> 
     17#include <osg/BlendFunc> 
     18#include <osg/Texture2D> 
     19#include <osg/PointSprite> 
    1720 
    1821class KeyboardEventHandler : public osgGA::GUIEventHandler 
     
    2427        { 
    2528            _point = new osg::Point; 
    26             _point->setDistanceAttenuation(osg::Vec3(0.0,0.0005,0.0f)); 
    2729            _point->setDistanceAttenuation(osg::Vec3(0.0,0.0000,0.05f)); 
    2830            _stateset->setAttribute(_point.get()); 
     
    4547                       return true; 
    4648                    } 
    47                     else if (ea.getKey()=='*') 
     49                    else if (ea.getKey()=='<') 
    4850                    { 
    4951                       changePointAttenuation(1.1f); 
    5052                       return true; 
    5153                    } 
    52                     else if (ea.getKey()=='/') 
     54                    else if (ea.getKey()=='>') 
    5355                    { 
    5456                       changePointAttenuation(1.0f/1.1f); 
     
    109111    arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] filename ..."); 
    110112    arguments.getApplicationUsage()->addCommandLineOption("-h or --help","Display this information"); 
     113    arguments.getApplicationUsage()->addCommandLineOption("--sprites","Point sprites."); 
    111114     
    112115 
     
    126129        return 1; 
    127130    } 
     131     
     132    bool usePointSprites = false; 
     133    while (arguments.read("--sprites")) { usePointSprites = true; }; 
    128134 
    129135    // any option left unread are converted into errors to write out later. 
     
    167173    // set the scene to render 
    168174    viewer.setSceneData(loadedModel.get()); 
     175     
     176 
     177    if (usePointSprites)     
     178    { 
     179        osg::StateSet* stateset = loadedModel->getOrCreateStateSet(); 
     180 
     181        /// Setup cool blending 
     182        osg::BlendFunc *fn = new osg::BlendFunc(); 
     183        stateset->setAttributeAndModes(fn, osg::StateAttribute::ON); 
     184 
     185        /// Setup the point sprites 
     186        osg::PointSprite *sprite = new osg::PointSprite(); 
     187        stateset->setTextureAttributeAndModes(0, sprite, osg::StateAttribute::ON); 
     188 
     189        /// The texture for the sprites 
     190        osg::Texture2D *tex = new osg::Texture2D(); 
     191        tex->setImage(osgDB::readImageFile("Images/particle.rgb")); 
     192        stateset->setTextureAttributeAndModes(0, tex, osg::StateAttribute::ON); 
     193    } 
     194     
    169195 
    170196    // register the handler for modifying the point size