Very Simple Explanation of glOrthof() in OpenGL ES

Discussion in 'iOS Programming' started by Blakeasd, Dec 27, 2012.

  1. Blakeasd macrumors 6502a

    Joined:
    Dec 29, 2009
    #1
    I saw some previous posts and explantations on the internet of glOrthof, but I just don't get it. I am watching the Stanford OpenGL ES lesson on Youtube and the following code came up:

    Code:
    
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrthof(0, backingWidth, 0, backingHeight, -1, 1);
    
    
    This code draws a picture 1px by 1px in the bottom left hand corner of the screen. Why would it do this though? I thought this code would take the picture from (0,0) and stretch it across the entire screen because it specifies the plane as from 0 to the width of the screen and 0 to the height of the screen. Can someone please explain as simply as possible why it draws it as 1px by 1px in the bottom left hand corner. The full source code can be found on the Stanford website labeled as "openGLtransforms.zip":

    http://www.stanford.edu/class/cs193p/cgi-bin/drupal/node/79

    (The file where this code appears is ESRenderer1.m)

    Thanks!
     
  2. szymczyk, Dec 28, 2012
    Last edited: Dec 29, 2012

    szymczyk macrumors regular

    Joined:
    Mar 5, 2006
    #2
    The arguments you pass to glOrtho define the boundaries of the projection. For 2D drawing, glOrtho defines the visible area of the screen in OpenGL units. In the code you listed, calling glOrtho sets the lower left corner of the screen to (0, 0) and the upper right corner of the screen to (backingWidth, backingHeight). Anything drawn in the range of (0, 0) to (backingWidth, backingHeight) will be visible on the screen. Assuming that backingWidth and backingHeight are the width and height of the screen in pixels, the code you listed sets a projection where one OpenGL unit equals one screen pixel.

    Why does the example draw the picture with a size of one pixel? I haven't looked at the code, but my guess is the code draws from 0 to 1 in OpenGL units. Since you set up the projection so one OpenGL unit equals one pixel, the drawn picture is one pixel in size. If you modify the call to glOrtho by substituting 1 for backingWidth and backingHeight, the picture should fill the screen.
     
  3. Blakeasd thread starter macrumors 6502a

    Joined:
    Dec 29, 2009
    #3
    Great explanation! That makes a lot of sense. Thank You!
     

Share This Page