Interactive Computer Graphics: A Top-Down Approach With Shader-Based Opengl