Computer graphics : programming in OpenGL for visual communication