title: JOGL correct light and reflection in spheres
body: <p>I'm trying to get the lights and reflection correct in my program. I have a big sphere, which I can move the the mouse, that should be a light source (LIGHT0), and smaller spheres bouncing around that should reflect the light. I also need a directional light that I can change the direction using the keyboard</p>
  
  <p>first some colors I defined:</p>
  
  <pre><code>float whitish[] = {0.8f, 0.8f, 0.8f, 1};
  float white[] = {1, 1, 1, 1};
  float blackish[] = {0.2f, 0.2f, 0.2f, 1};
  float black[] = {0, 0, 0, 1}
  </code></pre>
  
  <p>I create the directional light with</p>
  
  <pre><code>gl.glLightfv(GL.GL_LIGHT1, GL.GL_AMBIENT, blackish,0);
  gl.glLightfv(GL.GL_LIGHT1, GL.GL_SPECULAR, white,0);
  gl.glLightfv(GL.GL_LIGHT1, GL.GL_DIFFUSE, white,0);
  gl.glLightfv(GL.GL_LIGHT1, GL.GL_POSITION, spot_position,0); 
  </code></pre>
  
  <p>spot_position is initially [ 0, 0, 1, 0] but it can change by pressing the keyboard keys. a key press adds 0.05 to a specific component of the position vector, until it reaches 1, then it resets back to -1 (nothing fancy).</p>
  
  <p>The light of the center sphere is:</p>
  
  <pre><code>gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, position,0);
  gl.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, blackish,0);
  gl.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, white,0);
  gl.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, white,0);
  </code></pre>
  
  <p>This light's position is always centered inside my big transparent sphere. w component of the position vector is 1.</p>
  
  <p>I have this code to draw the picture in the back</p>
  
  <pre><code>gl.glBegin(GL_QUADS);
  gl.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, white,0);
  gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, white,0);
  gl.glMaterialfv(GL.GL_FRONT, GL.GL_SHININESS, white,0);
  // Back Face
  gl.glNormal3f(0, 0, 1);
  gl.glTexCoord2f(texRight, texBottom);
  gl.glVertex3f(rx2, ry1, rz1);
  gl.glTexCoord2f(texRight, texTop);
  gl.glVertex3f(rx2, ry2, rz1);
  gl.glTexCoord2f(texLeft, texTop);
  gl.glVertex3f(rx1, ry2, rz1);
  gl.glTexCoord2f(texLeft, texBottom);
  gl.glVertex3f(rx1, ry1, rz1);
  </code></pre>
  
  <p>To draw the spheres, I use the following functions:</p>
  
  <pre><code>public void drawtriangle(float[] v1, float[] v2, float[] v3) {
      gl.glBegin(GL.GL_TRIANGLES);
      gl.glNormal3fv(v1, 0);
      gl.glVertex3fv(v1, 0);
      gl.glNormal3fv(v2, 0);
      gl.glVertex3fv(v2, 0);
      gl.glNormal3fv(v3, 0);
      gl.glVertex3fv(v3, 0);
      gl.glEnd();
  }
  
  private void subdivideSphere2(float v1[], float v2[], float v3[], long depth) {
     float v12[] = new float[3];
     float v23[] = new float[3];
     float v31[] = new float[3];
      int i;
  
      if (depth==0) {
      float[] color= {v1[0]*v1[0], v2[1]*v2[1], v3[2]*v3[2], alpha};
      gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT, blackish,0);
      gl.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, color,0);
      gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, color,0);
      gl.glMaterialfv(GL.GL_FRONT, GL.GL_SHININESS, color,0);
        drawtriangle(v1, v2, v3);
        return;
      }
     for (i = 0; i&lt;3; i++) {
         v12[i] = v1[i]+v2[i];
         v23[i] = v2[i]+v3[i];
         v31[i] = v3[i]+v1[i];
      }
      normalize(v12);
      normalize(v23);
      normalize(v31);
      subdivideSphere2(v1, v12, v31, depth-1);
      subdivideSphere2(v2, v23, v12, depth-1);
      subdivideSphere2(v3, v31, v23, depth-1);
      subdivideSphere2(v12, v23, v31, depth-1);
  }
  
  
  public void drawSphere() {
      subdivideSphere2(sVdata[0], sVdata[1], sVdata[2], depth);
      subdivideSphere2(sVdata[0], sVdata[2], sVdata[4], depth);
      subdivideSphere2(sVdata[0], sVdata[4], sVdata[5], depth);
      subdivideSphere2(sVdata[0], sVdata[5], sVdata[1], depth);
  
      subdivideSphere2(sVdata[3], sVdata[1], sVdata[5], depth);
      subdivideSphere2(sVdata[3], sVdata[5], sVdata[4], depth);
      subdivideSphere2(sVdata[3], sVdata[4], sVdata[2], depth);
      subdivideSphere2(sVdata[3], sVdata[2], sVdata[1], depth);
   }  
  </code></pre>
  
  <p>My problem is, the small spheres aren't reflecting light at all. They are very bright all the time. I can see a little bit of the light being reflected in the green lines of the cube when I move the big sphere closer to them, but no effect at all to the spheres. Also, I can't see any difference when I move the directional light (LIGHT1). I don't see any reflection on the lines of the cube, the big sphere, small spheres or the picture in the back. Below is screenshot of my program. How can I make my spheres not shine, and reflect both the directional light and the light from the big sphere? Any help would be greatly appreciated. Thank you.</p>
  
  <p><img src="https://i.imgur.com/fzCRC2K.png" alt="My program"></p>