int main(int argc, char* argv[])
{
    osgViewer::Viewer viewer;
    viewer.setUpViewInWindow(100,100,800,600);
    osg::ref_ptr<osg::Program> program = createProgram();
    osg::ref_ptr<osg::Geode> geode = CreateIcosahedron(program.get());
    osg::StateSet *state;
    state = geode->getOrCreateStateSet();
    state->addUniform(new osg::Uniform("AmbientMaterial",osg::Vec3(0.04f, 0.04f, 0.04f)));
    state->addUniform(new osg::Uniform("DiffuseMaterial",osg::Vec3(0.0f, 0.75f, 0.75f)));
    state->addUniform(new osg::Uniform("LightPosition",osg::Vec3(0.25f, 0.25f, 1.0f)));
    state->addUniform(tessInnerU.get());
    state->addUniform(tessOuterU.get());
    state->setAttribute(new osg::PatchParameter(3));
    state->setAttribute(program.get());
    
    // switch on the uniforms that track the modelview and projection matrices
    osgViewer::Viewer::Windows windows;
    viewer.getWindows(windows);
    for(osgViewer::Viewer::Windows::iterator itr = windows.begin();
        itr != windows.end();
        ++itr)
    {
        osg::State *s=(*itr)->getState();
        s->setUseModelViewAndProjectionUniforms(true);
        s->setUseVertexAttributeAliasing(true);
    }
    
    viewer.addEventHandler(new KeyboardEventHandler());
    viewer.setSceneData(geode.get());
    return viewer.run();
}
Exemple #2
0
void SpherePointCloud::SetToQuasiUniform(unsigned char pDepth)
{
    // Create the initial vertices and faces from the sphere cloud
    CreateIcosahedron();

    QVector< unsigned int > tempFaces = mFaces;

    mFaces.clear();

    // Each triangle has to be subdivided as many times as the sphere depth
    for( int i = 0; i < tempFaces.size(); i += 3 )
    {
        int face1 = tempFaces.at(i);
        int face2 = tempFaces.at(i+1);
        int face3 = tempFaces.at(i+2);

        Subdivide( mVertices.at(face1), mVertices.at(face2), mVertices.at(face3), pDepth );
    }
    mNumberOfPoints = mVertices.size();
    ComputeQuasiUniformNeighbours();
    SetMeshInformation();
}