title: Mapping coordinates from 3D perspective projection to 2D orthographic projection in OpenGL in C++
body: <p>I have written a simple openGL program in C++. This program draws a sphere in 3D perspective projection and tries to draw a line joining the center of the sphere to the current cursor position in 2D orthographic projection. Now for drawing the line I can't figure out the coordinate of center of the sphere.</p>
  
  <p>This is my code : </p>
  
  <pre><code>#ifdef __APPLE__
  #include &lt;GLUT/glut.h&gt;
  #else
  #include &lt;GL/glut.h&gt;
  #endif
  
  void passive(int,int);
  void reshape(int,int);
  void init(void);
  void display(void);
  void camera(void);
  
  int cursorX,cursorY,width,height;
  
  int main (int argc,char **argv) {
      glutInit (&amp;argc,argv);
      glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA);
      glutInitWindowSize(1364,689);
      glutInitWindowPosition(0,0);
      glutCreateWindow("Sample");
      init();
      glutDisplayFunc(display);
      glutIdleFunc(display);
      glutPassiveMotionFunc(passive);
      glutReshapeFunc(reshape);
      glutMainLoop();
      return 0;
  }    
  
  void display() {
      glClearColor (0.0,0.0,0.0,1.0);
      glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  
      //  Render 3D content
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
      gluPerspective(60,(GLfloat)width/(GLfloat)height,1.0,100.0);    // create 3D perspective projection matrix
      glMatrixMode(GL_MODELVIEW);
      glPushMatrix();
      camera();
      glTranslatef(-6,-2,0);
      glColor3f(1,0,0);
      glutSolidSphere(5,50,50);
      glPopMatrix();
  
      // Render 2D content
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
      gluOrtho2D(0, width,height, 0);                 // create 2D orthographic projection matrix
      glMatrixMode(GL_MODELVIEW);
      glColor3f(1,1,1);
      glBegin(GL_LINES);
          glVertex2f( centreX,centreY );          // coordinate of center of the sphere in orthographic projection
          glVertex2f( cursorX,cursorY );
      glEnd();
  
      glutSwapBuffers();
  }    
  
  void camera(void) {
      glRotatef(0.0,1.0,0.0,0.0);
      glRotatef(0.0,0.0,1.0,0.0);
      glTranslated(0,0,-20);
  }    
  
  void init(void) {
      glEnable (GL_DEPTH_TEST);
      glEnable (GL_BLEND);
      glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
      glEnable(GL_COLOR_MATERIAL);
  }    
  
  void reshape(int w, int h) {
      width=w; height=h;
  }    
  
  void passive(int x1,int y1) {
      cursorX=x1; cursorY=y1;
  }
  </code></pre>
  
  <p>I can,t figure out the values for centreX and centreY. Anyway I can get the correct values to draw the line?</p>