Exemple #1
0
void run ()
{   init();
	lastTurn = Straight;
   // endofList = 0;
    // memory allocation for recieved parameters from graph to drive the bot
    //res_params = (param*) malloc(sizeof(param)); 
    int i = 0;
    while(i<9){
    
        createVertexNode();
        
        i++;
    }
    addEdge(searchNode(0),searchNode(1), 3, Left, Right );
    addEdge(searchNode(1),searchNode(2), 3, Left, Right );
    addEdge(searchNode(2),searchNode(5), 3, Back, Straight );
    addEdge(searchNode(5),searchNode(4), 3, Right, Left );
    addEdge(searchNode(4),searchNode(3), 3, Right, Left );
    addEdge(searchNode(1),searchNode(4), 3, Back, Straight );
    addEdge(searchNode(0),searchNode(3), 3, Back, Straight );
    addEdge(searchNode(3),searchNode(6), 3, Back, Straight );
	addEdge(searchNode(6),searchNode(7), 3, Left, Right );
	addEdge(searchNode(7),searchNode(8), 3, Left, Right );
	addEdge(searchNode(4),searchNode(7), 3, Back, Straight );
	addEdge(searchNode(5),searchNode(8), 3, Back, Straight );    
    
   //print();
  }
void Scene::create()
{
    _oneSidedProgram = new osg::Program;
    _oneSidedProgram->addShader(osgDB::readShaderFile(osg::Shader::VERTEX, "data/diffuse_directional1_vs.glsl"));
    _oneSidedProgram->addShader(osgDB::readShaderFile(osg::Shader::FRAGMENT, "data/diffuse_directional1_fs.glsl"));

    _twoSidedProgram = new osg::Program;
    _twoSidedProgram->addShader(osgDB::readShaderFile(osg::Shader::VERTEX, "data/diffuse_directional2_vs.glsl"));
    _twoSidedProgram->addShader(osgDB::readShaderFile(osg::Shader::FRAGMENT, "data/diffuse_directional2_fs.glsl"));

    _instancedProgram = new osg::Program;
    _instancedProgram->addShader(osgDB::readShaderFile(osg::Shader::VERTEX, "data/diffuse_billboard_instanced_vs.glsl"));
    _instancedProgram->addShader(osgDB::readShaderFile(osg::Shader::FRAGMENT, "data/diffuse_billboard_instanced_fs.glsl"));

    createPolyhedronNode();
    createVertexNode();
    createTextNode();

    onPolyhedronChanged();
    onLightModelChanged();

    osg::ref_ptr<osgGA::LambdaEventHandler> eventHandler = new osgGA::LambdaEventHandler;
    eventHandler->onKeyDown([&](const osgGA::GUIEventAdapter& ea) {
        auto key = ea.getKey();
        auto num = key - osgGA::GUIEventAdapter::KEY_0;
        if (0 <= num && num <= 9)
        {
            _faces ^= osgKaleido::PolyhedronGeometry::FaceMaskFromSides(wild::mod(num-1, 10) + 3);
            onFaceMaskChanged();
            return true;
        }
        switch (key)
        {
        case osgGA::GUIEventAdapter::KEY_V:
        {
            _vgeode->setNodeMask(~_vgeode->getNodeMask());
            return true;
        }
        case osgGA::GUIEventAdapter::KEY_L:
        {
            _twoSided = !_twoSided;
            onLightModelChanged();
            return true;
        }
        case osgGA::GUIEventAdapter::KEY_Right:
        {
            _faces = osgKaleido::PolyhedronGeometry::All;
            _index++;
            onPolyhedronChanged();
            return true;
        }
        case osgGA::GUIEventAdapter::KEY_Left:
        {
            _faces = osgKaleido::PolyhedronGeometry::All;
            _index--;
            onPolyhedronChanged();
            return true;
        }
        default:
            return false;
        }
    });

    _viewer->addEventHandler(eventHandler);
}