Review

The topics that we've covered so far, that make up the basics of 3D in OpenGL, are:

Quick Reference

FeatureFunctionsExample
Perspective projection gluPerspective(fov, aspect, near, far)
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0, 1.0, 1.0, 100.0);
glMatrixMode(GL_MODELVIEW);
Depth buffering glEnable(GL_DEPTH_TEST)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH)
in main():
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
in draw function:
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Transformations glLoadIdentity()
glTranslatef(x, y, z)
glRotatef(angle, x, y, z)
glScalef(x, y, z)
glLoadIdentity();
glTranslatef(0.0, 0.0, -20.0);
glRotatef(30.0, 1.0, 0.0, 0.0);     /* Rotate 30 degrees about X */
glRotatef(-45.0, 0.0, 1.0, 0.0);    /* Rotate -45 degrees about Y */
Hierarchical transformations glPushMatrix()
glPopMatrix()
glPushMatrix();
 glTranslatef(-3.0, 0.0, 0.0);
 glutWireTorus(0.2, 1.0, 6, 12);
glPopMatrix();
glPushMatrix();
 glTranslatef(0.0, 0.0, 2.0);
 glScalef(0.25, 0.5, 0.5);
 glutWireTorus(0.2, 1.0, 6, 12);
glPopMatrix();
Geometry glBegin(geometryType)
glEnd()
glVertex3f(x, y, z)
glVertex3fv(v)
glBegin(GL_TRIANGLES);
 glVertex3f(0.0, 0.0, 0.0);
 glVertex3f(10.0, 0.0, -1.0);
 glVertex3f(5.0, 7.0, -1.0);
glEnd();
Light source glEnable(lightSource)
glLightfv(lightSource, GL_DIFFUSE, color)
glLightfv(lightSource, GL_AMBIENT, color)
glLightfv(lightSource, GL_SPECULAR, color)
glLightfv(lightSource, GL_POSITION, position)
glLightf(lightSource, GL_CONSTANT_ATTENUATION, value)
glLightf(lightSource, GL_LINEAR_ATTENUATION, value)
glLightf(lightSource, GL_QUADRATIC_ATTENUATION, value)
glLightfv(lightSource, GL_SPOT_DIRECTION, direction)
glLightf(lightSource, GL_SPOT_CUTOFF, cutoffAngle)
glLightf(lightSource, GL_SPOT_EXPONENT, exponent)
GLfloat white[4] = { 1, 1, 1, 1 };
GLfloat lightPos[4] = { -5, 4, 0, 1 };
GLfloat spotDirection[3] = { 0, -1, -1 };

glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_DIFFUSE, white);
glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.0);
glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.1);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spotDirection);
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 30);
glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 10.0);
Material glMaterialfv(GL_FRONT, GL_DIFFUSE, color)
glMaterialfv(GL_FRONT, GL_AMBIENT, color)
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color)
glMaterialfv(GL_FRONT, GL_SPECULAR, color)
glMaterialfv(GL_FRONT, GL_EMISSION, color)
glMaterialf(GL_FRONT, GL_SHININESS, shininess)
GLfloat blue[4] = { .1, .4, 1, 1 };
GLfloat white[4] = { 1, 1, 1, 1 };
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
glMaterialfv(GL_FRONT, GL_SPECULAR, white);
glMaterialf(GL_FRONT, GL_SHININESS, 120.0);
Surface normal glNormal3f(x, y, z)
glNormal3fv(vector)
glBegin(GL_TRIANGLES);
 glNormal3f(-0.707, 0.0, 0.707);
 glVertex3f(-9.0, 1.0, -7.0);
 glVertex3f(-3.0, 1.0, -1.0);
 glVertex3f(-3.0, 7.0, -1.0);
glEnd();
Fog glEnable(GL_FOG)
glFogi(GL_FOG_MODE, mode)
glFogfv(GL_FOG_COLOR, color)
glFogf(GL_FOG_START, distance)
glFogf(GL_FOG_END, distance)
glFogf(GL_FOG_DENSITY, exponent)
GLfloat sky[] = { 0.5, 0.8, 1.0, 0.0 };
glEnable(GL_FOG);
glFogi(GL_FOG_MODE, GL_LINEAR);
glFogfv(GL_FOG_COLOR, sky);
glFogf(GL_FOG_START, 5.0);
glFogf(GL_FOG_END, 40.0);
Define a texture glGenTextures(1, &textureID)
glBindTexture(GL_TEXTURE_2D, textureID)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, mode)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, mode)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mode)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mode)
glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, width, height, 0,
         format, GL_UNSIGNED_BYTE, textureImage)
gluBuild2DMipmaps(GL_TEXTURE_2D, internalFormat, width, height,
         format, GL_UNSIGNED_BYTE, textureImage)
glGenTextures(1, &textureID1);
glBindTexture(GL_TEXTURE_2D, textureID1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, xdim, ydim,
                0, GL_RGBA, GL_UNSIGNED_BYTE, image);
Apply a texture glEnable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D, textureID)
glTexCoord2f(s, t)
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureID1);
glBegin(GL_QUADS);
 glTexCoord2f(0.0, 0.0);
 glVertex3f(-2.0, -1.0, 0.0);
 glTexCoord2f(1.0, 0.0);
 glVertex3f(-0.1, -1.0, 0.0);
 glTexCoord2f(1.0, 1.0);
 glVertex3f(-0.1, 1.0, 0.0);
 glTexCoord2f(0.0, 1.0);
 glVertex3f(-2.0, 1.0, 0.0);
glEnd();
Blending glEnable(GL_BLEND)
glBlendFunc(sourceFactor, destinationFactor)
glColor4f(r, g, b, alpha)
glColor4fv(color)
   (or include alpha in material or texture)
GLfloat translucentRed[4] = { 1, 0, 0, 0.5 };
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glMaterialfv(GL_FRONT, GL_DIFFUSE, translucentRed);
glutSolidCube(2.0);
Alpha-test transparency glEnable(GL_ALPHA_TEST)
glAlphaFunc(function, referenceValue)
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.25);


next