Objectives

Setup

#include "libopengl.h"

void renderScene(void)
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  //...

  glutSwapBuffers();
}

void retupRC()
{
  glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  glColor3f(0.0f, 1.0f, 0.0f);
  glMatrixMode(GL_PROJECTION);
  glOrtho (-100.0f, 100.0f, -100.0f, 100.0f, -100.0f, 100.0f);
}

void specialKeys(int key, int x, int y)
{
  int xRot=0,yRot=0;

  xRot = (key == GLUT_KEY_UP)?    -1 : xRot;
  xRot = (key == GLUT_KEY_DOWN)?   1 : xRot;
  yRot = (key == GLUT_KEY_LEFT)?  -1 : yRot;
  yRot = (key == GLUT_KEY_RIGHT)?  1 : yRot;

  glRotatef(xRot, 1.0f, 0.0f, 0.0f);
  glRotatef(yRot, 0.0f, 1.0f, 0.0f);

  glutPostRedisplay();
}

int main(int argc, char* argv[])
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

  glutInitWindowSize(400,400);
  glutCreateWindow("Lab 08");

  glutSpecialFunc(specialKeys);
  glutDisplayFunc(renderScene);
  retupRC();
  glutMainLoop();

  return 0;
}
  glutWireCube(50.0f);

Translate/Rotate

  glTranslatef(0.0f, 10.0f, 0.0f);
  glutWireCube(50.0f);
  glPushMatrix();
    glTranslatef(0.0f, 30.0f, 0.0f);
    glutWireCube(50.0f);
  glPopMatrix();
  glBegin(GL_LINES);
     glVertex3f(-100.0f, -100.0f, -100.0f);
    glVertex3f(100.0f, 100.0f, 100.0f);
  glEnd();
  glRotatef(45.0f, 1.0f, 1.0f, 1.0f);
  glutWireCube(50.0f);

Scale/Cumulative Calls

    glScalef(2.0f, 1.0f, 2.0f);
    glutWireCube(50.0f);
  glTranslatef(0.0f, 30.0f, 0.0f);
  glutWireSphere(10.0f,15,15);
  glTranslatef(30.0f, 0.0f, 0.0f);
  glutWireSphere(10.0f,15,15);
  glTranslatef(0.0f, 30.0f, 0.0f);
  glutWireSphere(10.0f,15,15);
  glTranslatef(0.0f, -30.0f, 0.0f);
  glTranslatef(30.0f, 0.0f, 0.0f);
  glutWireSphere(10.0f,15,15);
void twoSpheresIdentity()
{
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();

  glTranslatef(0.0f, 30.0f, 0.0f);
  glutWireSphere(10.0f,15,15);

  glLoadIdentity();

  glTranslatef(30.0f, 0.0f, 0.0f);
  glutWireSphere(10.0f,15,15);
}

Exercises

1.Rectangle Animation

void timer(int value)
{
  glutPostRedisplay();
  glutTimerFunc(25, timer, 1);
}
  timer(1);

In renderScene, display a rectangle:

void renderScene(void)
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  static float x = 0.4;

  glPushMatrix();
    glTranslatef(x, 0.0f, 0.0f);
    glRectf(0,0,20,20);
  glPopMatrix();

  glutSwapBuffers();
}
  x = x + 0.2;
  if (x>100)
    x = -120;

2 Sphere Animation