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(); }
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(); }