| Feature | Functions | Example |
|---|---|---|
| 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() |
| 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 code:
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() |
| 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) | white = [ 1, 1, 1, 1 ] lightPos = [ -5, 4, 0, 1 ] spotDirection = [ 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) | blue = [ .1, .4, 1, 1 ] white = [ 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() |
| Define a texture | glGenTextures(1)
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) |
textureID1 = glGenTextures(1)
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, imagedata)
|
| 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() |
| 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) | 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) |
| Blending | glEnable(GL_BLEND)
glBlendFunc(sourceFactor, destinationFactor) glColor4f(r, g, b, alpha) glColor4fv(color) (or include alpha in material or texture) | translucentRed = [ 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) |