title: Sun as a light source using opengl and c++
body: <p>I am working on the solar system and I am trying to get the sun to be the central light source of this program but it's not working the way I thought it would.</p>
  
  <p>Here is a picture of what I have without lighting.
  <img src="https://i.stack.imgur.com/cQZTY.jpg" alt="enter image description here"></p>
  
  <p>Here is the same program with lighting.</p>
  
  <p><img src="https://i.stack.imgur.com/MbwkV.jpg" alt="enter image description here"></p>
  
  <p>A different angle here so you can see that the Earth has no shadow as it is supposed to (ignore the red on the moon, that's for my reference)</p>
  
  <p><img src="https://i.stack.imgur.com/peILa.jpg" alt="enter image description here"></p>
  
  <p>I don't know if you can tell, but it looks like the light is centered in each sphere, and not in the Sun.
  The shadow on the Earth is as if the light was coming from the top. Same with the Sun. The Sun here is not a light source, it's just a sphere that is also being lit by some some source. There is no shadow from the Earth on the moon or from the moon on the Earth.</p>
  
  <p>This here is the code that draws the system</p>
  
  <pre><code>GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
  GLfloat pos[] = { 0.0, 0.0, 1.0, 0.0 };
  glEnable(GL_LIGHTING);  
  glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
  glLightf(GL_LIGHT0, GL_POSITION, pos);
  //SUN
          //Picture location, major radius, minor radius, major orbit, minor orbit, angle
  Planet Sun ("/home/rodrtu/Desktop/SolarSystem/images/Sun.png", 
               100, 99, 200.0, 0.0, 0.0);
  double sunOrbS = 0;
  double sunRotS = rotatSpeed/10;
  //orbit speed, rotation speed, moon reference coordinates (Parent planet's major and minor Axis)
  Sun.displayPlanet(sunOrbS, sunRotS, 0.0, 0.0);
  
  //EARTH
  Planet Earth ("/home/rodrtu/Desktop/SolarSystem/images/EarthTopography.png", 
             50, 49, 500.0, 450.0, 23.5);
  double eaOrbS = orbitSpeed*2;
  double eaRotS = rotatSpeed*5;
  
  Earth.displayPlanet(eaOrbS, eaRotS, 0.0, 0.0);
  //Orbit path
  drawCircle(800, 720, 1, 50);
  
  //EARTH'S MOON
  Planet Moon ("/home/rodrtu/Desktop/SolarSystem/images/moonTest.png", 
             25, 23, 100.0, 100.0, 15);
  double moOrbS = rotatSpeed*4;
  double moRotS = eaOrbS;
  
  Moon.displayPlanet(moOrbS, moRotS, Earth.getMajorAxis(), Earth.getMinorAxis());
  
  orbitSpeed+=.9;
  if (orbitSpeed &gt; 359.0)
   orbitSpeed = 0.0;
  
  rotatSpeed+=2.0;
  if (rotatSpeed &gt; 719.0)
   rotatSpeed = 0.0;
  </code></pre>
  
  <p>These next two functions are responsible for coordinates and drawing the spheres</p>
  
  <pre><code>void Planet::setOrbit(double orbitSpeed, double rotationSpeed, 
                double moonOrbitX, double moonOrbitY) 
  {
      majorAxis = orbitSemiMajor * cos(orbitSpeed / 180.0 * Math::Constants&lt;double&gt;::pi);
      minorAxis = orbitSemiMinor * sin(orbitSpeed / 180.0 * Math::Constants&lt;double&gt;::pi);
  
      glTranslate(majorAxis+moonOrbitX, minorAxis+moonOrbitY, 0.0);
      glRotatef(orbitAngle, 0.0, 1.0, 1.0);
      glRotatef(rotationSpeed, 0.0, 0.0, 1.0);
  
  }
  
  void Planet::displayPlanet(double orbitSpeed,double rotationSpeed, 
                 double moonOrbitX, double moonOrbitY)
  {
      GLuint surf;
      Images::RGBImage surfaceImage;
      surfaceImage=Images::readImageFile(texture);
      glEnable(GL_TEXTURE_2D);
      glGenTextures(0, &amp;surf);
      glBindTexture(GL_TEXTURE_2D, surf);
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
      surfaceImage.glTexImage2D(GL_TEXTURE_2D,0,GL_RGB);
  
      glPushMatrix();
      setOrbit(orbitSpeed,rotationSpeed, moonOrbitX, moonOrbitY);
      drawSolidPlanet(equatRadius, polarRadius, 1, 40, 40); 
      glPopMatrix();
  
  }
  </code></pre>
  
  <p>If I'm way off on what I am doing could you point me to a good tutorial? I have read a few but I guess I didn't understand them as I thought I did.
  If I'm on track, could you show me where I'm wrong and what I need to do right?</p>