INTRO
I'm using a Java JOGL wrapper called processing.org and I have coded some environment on it and I'm quite proud of it even if it has some library stuff that I didn't know anything about it (==LIGHTS).
Now, for some geometry, I've decided to use a VBO. I had to pass in the hard way and recode all lights. But I can't achieve the same result.
With that environment if i use the standard lights i get this result:

This environment wrap the opengl functions and i don't manage to understand the pure OPENGL calls.
i know that the code for standard light in processing.org enviroment is:
public void lights() {
enableLighting();
// need to make sure colorMode is RGB 255 here
int colorModeSaved = colorMode;
colorMode = RGB;
lightFalloff(1, 0, 0);
lightSpecular(0, 0, 0);
ambientLight(colorModeX * 0.5f, colorModeY * 0.5f, colorModeZ * 0.5f);
directionalLight(colorModeX * 0.5f, colorModeY * 0.5f, colorModeZ * 0.5f, 0, 0, -1);
colorMode = colorModeSaved;
}
PROBLEM
I want to replicate this light system with pure openGL calls.
Now, i have done some trial with no succes.
ambient and spot lights:

adding smooth and flat:

QUESTION
Now, i'd like for someone to help me in analysing the first picture and help me in understanding what kind (light or material or whatever) of OPENGL calls i can use to achieve a similar result.
CODE
this is my code so far:
gl.glEnable(GL.GL_LIGHTING);
gl.glEnable(GL.GL_LIGHT0);
gl.glEnable(GL.GL_COLOR_MATERIAL);
gl.glShadeModel(GL.GL_SMOOTH);
gl.glShadeModel(GL.GL_FLAT);
Vec3D l = new Vec3D(0,0,-10);
gl.glColor3f(0.8f,0f,0f);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, new float[] { l.x, l.y, l.z, 0 }, 0);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_SPOT_DIRECTION, new float[] { 1, 1, 1 }, 0);
//gl.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, new float[] { 1, 1, 1}, 0); // if i comment this line nothing change, why?
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT, new float[]{1f,0f,0f}, 0);
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SPOT_DIRECTION, new float[]{1f,0f,0f}, 0);
//gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SPECULAR, new float[]{1f, 1f, 1f, 1.0f}, 0); // if i comment this line nothing change, why?