Tanks_single::Tanks_single( int& id, int WIDTH_, int HEIGHT_ ) : AppSDL2OGL_3D( id, WIDTH_, HEIGHT_ ) {

    world.init_world();
    printf( "DEBUG_SHIT : %i \n", world.debug_shit );

    // ---- terrain

    //new Terrain25D();
    world.terrain = prepareTerrain();

    // ---- Objects

    int sphereShape = glGenLists(1);
    glNewList( sphereShape , GL_COMPILE );
        //glPushMatrix();

        //glDisable ( GL_LIGHTING );
        //Draw3D::drawAxis ( 3.0f );
        //glColor3f( 1.0f, 0.0f, 1.0f ); Draw3D::drawLines   ( Solids::Icosahedron_nedges, Solids::Icosahedron_edges, Solids::Icosahedron_verts                             );

        //glEnable( GL_LIGHTING );
        //glColor3f( 0.8f, 0.8f, 0.8f ); Draw3D::drawPolygons( Solids::Icosahedron_nfaces, Solids::Icosahedron_ngons, Solids::Icosahedron_faces,  Solids::Icosahedron_verts );

        glEnable( GL_LIGHTING ); glColor3f( 0.8f, 0.8f, 0.8f );   Draw3D::drawSphere_oct( 6, 1.0, {0.0,0.0,0.0} );
        //glPopMatrix();
    glEndList();

    int nobjects=10;
    double xrange = 10.0;
    for( int i=0; i<nobjects; i++){
        Object3D * o = new Object3D();
        //o->bounds.orientation.set({});
        //o->bounds.span.set(o->bounds.orientation.a.normalize(),o->bounds.orientation.a.normalize(),o->bounds.orientation.a.normalize());
        o->bounds.orientation.fromRand( {randf(0,1),randf(0,1),randf(0,1)} );
        o->bounds.span.set( randf(0.2,2.0), randf(0.2,2.0), randf(0.2,2.0) );
        //o->bounds.span.set( 1, 2.0, 0.5 );
        Mat3d m; m.set_mmul_NT( o->bounds.orientation, o->bounds.orientation );
        /*
        printf( " === %i \n", i );
        printf( " %f %f %f \n", m.ax, m.ay, m.az );
        printf( " %f %f %f \n", m.bx, m.by, m.bz );
        printf( " %f %f %f \n", m.cx, m.cy, m.cz );
        */
        //o->bounds.pos.set( randf(-xrange,xrange),randf(-xrange,xrange),randf(-xrange,xrange) );
        Vec2d p,dv; p.set( randf(-xrange,xrange),randf(-xrange,xrange) );
        double v = world.terrain->eval( p, dv );
        o->bounds.pos.set( p.x, v, p.y );

        //o->bounds.pos.set( {0.0,0.0,0.0} );
        o->shape= sphereShape;
        o->id = i;
        world.objects.push_back(o);

    }

    //camPos.set();


    warrior1 = world.makeWarrior( {0.0d,0.0d,0.0d}, {0.0d,0.0d,1.0d}, {0.0d,1.0d,0.0d}, 0 );

    warrior1->pos.set( 0.0, 0.0, -15.0 );

    zoom = 5.0;
    first_person = true;
    perspective  = true;

}