SomePointsGenerator::SomePointsGenerator():osg::Geometry() { setUseVertexBufferObjects(true); osg::StateSet* sset = getOrCreateStateSet(); sset->setMode( GL_LIGHTING, osg::StateAttribute::OFF ); vAry = new osg::Vec4Array;; vAry->push_back( osg::Vec4(0,0,0,1) ); vAry->push_back( osg::Vec4(0,1,0,1) ); vAry->push_back( osg::Vec4(1,0,0,1) ); vAry->push_back( osg::Vec4(1,1,0,1 )); addPrimitiveSet( new osg::DrawArrays( GL_POINTS, 0, vAry->size() ) ); setVertexArray( vAry ); _program=createGeneratorShader() ; sset->setAttribute(_program ); // a generic cyclic animation value osg::Uniform* u_anim1( new osg::Uniform( "u_anim1", 0.9f ) ); u_anim1->setUpdateCallback( new SineAnimation( 4, 0.5, 0.5 ) ); sset->addUniform( u_anim1 ); }
SomePoints() { osg::Vec4Array* cAry = new osg::Vec4Array; setColorArray( cAry, osg::Array::BIND_OVERALL ); cAry->push_back( osg::Vec4(1,1,1,1) ); osg::Vec3Array* vAry = new osg::Vec3Array; setVertexArray( vAry ); vAry->push_back( osg::Vec3(0,0,0) ); vAry->push_back( osg::Vec3(0,1,0) ); vAry->push_back( osg::Vec3(1,0,0) ); vAry->push_back( osg::Vec3(1,1,0) ); vAry->push_back( osg::Vec3(0,0,1) ); vAry->push_back( osg::Vec3(0,1,1) ); vAry->push_back( osg::Vec3(1,0,1) ); vAry->push_back( osg::Vec3(1,1,1) ); addPrimitiveSet( new osg::DrawArrays( GL_POINTS, 0, vAry->size() ) ); osg::StateSet* sset = getOrCreateStateSet(); sset->setMode( GL_LIGHTING, osg::StateAttribute::OFF ); // if things go wrong, fall back to big points osg::Point* p = new osg::Point; p->setSize(6); sset->setAttribute( p ); #ifdef ENABLE_GLSL sset->setAttribute( createShader() ); // a generic cyclic animation value osg::Uniform* u_anim1( new osg::Uniform( "u_anim1", 0.0f ) ); u_anim1->setUpdateCallback( new SineAnimation( 4, 0.5, 0.5 ) ); sset->addUniform( u_anim1 ); #endif }