CS 4465, Lab 1
Introduction to OpenGL
This lab was modified by Mr. Daniel Babel, the Instructional Assistance of this course in Spring 2004

Our goals in this lab are: Getting Ready

Throughout the semester, we will have several labs.  You are required to save some of your files on the hard disk, a floppy disk, or on memory sticks for later use.  If you do not save the images resulting from a run, the programs themselves do not take up too much space.  Please bring at least one floppy disk with you to keep a backup copy of your files.  also, if you plan to work on a program from home, you can use ftp to transfer your file(s) to cs so you can access them from home or other places.  Please use ASCII mode when you move your C++ files around, otherwise you will get an ^M at the end of each line, which is pain in the neck to remove.

It is very important that you complete and run your programs on the hard disk.  The executable files take a good bit of disk space and cannot be run from the floppy.  For this to work best, you may need to sit at the same machine every time we come to the lab.  This way you can create a directory with the same name as your ID on the machine and keep it until the end of this semester.  

    1) Create a directory for yourself, best is to call is YourID,
    2) Create the lab1 directory for today's lab.

In order to run OpenGL programs, we will use Visual C++ compiler which is installed on the PCs in the PC Lab (Room 439 or Ex-Term Lab).  To run the OpenGL programs, we also need to link some of the OpenGL libraries in each program that we wish to run.  During this lab, we may run to some problems when we compile the programs.   These problems, will be resolved by including appropriate files in the include or lib directories.  To make sure, we have the library files in place, here is what you need to do before starting the lab.

First we need to install GLUT onto the computers. The files you will need are as follows:

  • glut32.dll 
  • glut.h
  • glut32.lib
  • Place glut32.dll into C:\Windows\System32.
  • Place glut.h into C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\gl
  • Place glut32.lib into C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Lib

    It is perhaps best to download these files from the web at: Nate's GLUT Page . The file is called glut-3.7.6-bin.zip (117 KB) which is a zip file. Save the zip file under you directory. Then go to that directory and unzip the file. It gives you the above files. Save them under corresponding directories as instructed above.

    Now we need to create a new project in which to place our source files.
  • Open MS Visual Studio .NET
  • Select File->New->Project
  • Expand Visual C++ Projects on the left-hand side
  • Select the folder Win32
  • On the right, select Win32 Console Project
  • Set the location to save the project
  • Give the project a name
  • Click OK
  • Click on 'Application Settings'
  • Under additional options, select 'Empty Project'
  • Click on Finish
    This creates the project environment without any files in it. There should be an empty workspace, and a window on the side labeled Solution Explorer. Follow the following steps to insert a new blank file.
  • Right click on the folder 'Source Files'
  • Select Add->Add New Item
  • Select a C++ (.cpp) file
  • Name the file
  • Click on Open
    An icon should appear in the solution explorer indicating this new file, which should also be opened in the main part of the window. At this point you have finished setting up MS Visual Studio .NET.
  • To compile an OpenGL programs under .Net:
    Use the Build tab, click on Compile, or while you are in the program do Ctrl-F7. If your program does not have any error, you will get:
    Build: 1 Suceeded, 0 Failed, 0 Skipped
    Please note that it is extremely important that you copy the file under appropriate directory.

    A Simple Example: Line Program
    Lab Activity (1): Cut an paste the following program into the line.cpp file that you had saved in the previous step.  Click on Save to save the changes.

    /* Program line.C. Draws a single line from lower left
    to upper right corner of the window */

    #include <GL/glut.h>
    void myinit(void)
    {

            /* attributes */
            glClearColor(1.0, 1.0, 1.0, 1.0); /* white background */
            glColor3f(0.0, 0.0, 0.0); /* draw in black */
            /* set up viewing */
            /* 50 x 50 window with origin lower left */
            glMatrixMode(GL_PROJECTION);
            glLoadIdentity();
            gluOrtho2D(0.0, 50.0, 0.0, 50.0);
            glMatrixMode(GL_MODELVIEW);
    }

    void display( void )
    {
            glClear(GL_COLOR_BUFFER_BIT);  /*clear the window */

            glBegin(GL_LINES);
                    glVertex2f(0,0); 
                    glVertex2f(50,50);
            glEnd();

            glFlush(); /* clear buffers */
    }

    void main(int argc, char** argv)
    {
            /* Standard GLUT initialization */
            glutInit(&argc,argv);
            glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); /* default, not needed */
            glutInitWindowSize(500,500); /* 500 x 500 pixel window */
            glutInitWindowPosition(0,0); /* place window top left on display */
            glutCreateWindow("Test"); /* window title */
            glutDisplayFunc(display); /* display callback invoked when window opened */
            myinit(); /* set attributes */
            glutMainLoop(); /* enter event loop */
    }


    To Compile, Build, and Run it all at once you can use Ctrl-F5.

    When you run it, you will get the following screen. Upon correct compilation, you will get an executable file.

    line
    The line is not broken and is a solid line.

    The name of this screen is Test. Make a change so it has your name at the top.
    The line;

    gluOrtho2D(0.0, 50.0, 0.0, 50.0);
    maps world coordinates in the range [0,50] x [0,50] into this window, with (0,0) at the lower left. This is a parallel projection in which the z-coordinates are thrown away. The most significant block of code for the purposes of this lab is
            glBegin(GL_LINES);
                    glVertex2f(0,0); 
                    glVertex2f(50,50);
            glEnd();
    which draws a single line. The "2f" in "glVertex2f"says that we specify points using two floating point parameters. The z-coordinate is assumed to be zero, thus we are working in the a 2D plane, x-y plane.

    You can add other lines in the glBegin .. glEnd block; for example,

            glBegin(GL_LINES);
                    glVertex2f(0,0); 
                    glVertex2f(50,50);
                    glVertex2f(50,0); 
                    glVertex2f(0,50);
            glEnd();
    would draw a big "X".

    Lab Exercise (1): 
    Change the program such that it displays a triangle with all sides 100 units. You need a little bit of calculations to get this exactly as shown. Make the screen name says Triangle.

    triangel


    Lab Activity (2):  Change the display function to:
    void display( void )
    {
            float t=0,tnew,x,y,xnew,ynew;
            x=40*cos(t);
            y=40*sin(t);
            glClear(GL_COLOR_BUFFER_BIT);  /*clear the window */

            while(t<6.3){
                    t+=.1;
                    xnew=40*cos(t);
                    ynew=40*sin(t);
                    glBegin(GL_LINES);
                            glVertex2f(x,y);
                            glVertex2f(xnew,ynew);
                    glEnd();
                    x=xnew;
                    y=ynew;
            }

            glFlush(); /* clear buffers */
    }
    Since you have used the sin and cos functions, you need to add:
    #include <math.h>
    at the top of the program. Recompile and run. You should get part of a circle.
     

    Lab Exercise (2):  Change the display code so that the entire circle is shown in the window.

    Homework - Due Jan 28
    Your homework assignment is to further modify the program so that it prints a sine curve (at least two cycles) centered vertically in the window. The result should look something like this:

    Submit your source code as an attachment to an e-mail to me (rt) on cs before class on Friday Jan. 28. Make sure that your program has your name, course number, and date at the top. There will a 10 points deduction for programs with missing or incorrect headers. The subject line of this e-mail should say post-lab 1. Turn in a printout of the screen snapshot of the output at the beginning of the class. Make sure the title of the snapshot both in the program and in the snapshot shows your name. There will be 10 points deduction if this requirment is not met.
    If there is any special instructions for running your program, please include it in the header of the program.