Step 1:
To start off the project I initially created the buildings as background for the billboard.
The central building is a simple cube with a brick shader applied to it. The top portion of the building is filled with a mortar color.

The code for the brick shader is as follows:
//Vertex Shader (here the shader deals with the lighting in the program)
// Vertex shader for drawing brick shader with one texture
//Get light position from application
uniform vec3 LightPosition;
//Calculate specular and diffuse components of light
const float specularContribution = 0.3;
const float diffuseContribution = 1.0 - specularContribution;
//send light intensity, vertex positon and normal information to fragment shader
varying float LightIntensity;
varying vec3 MCposition;
varying vec3 normal;
void main(void)
{
//Calculate light vectors and intensities
vec3 ecPosition = vec3 (gl_ModelViewMatrix * gl_Vertex);
vec3 tnorm = normalize(gl_NormalMatrix * gl_Normal);
vec3 lightVec = normalize(LightPosition - ecPosition);
vec3 reflectVec = reflect(-lightVec, tnorm);
vec3 viewVec = normalize(-ecPosition);
float diffuse = max(dot(lightVec, tnorm), 0.0);
float spec = 0.0;
if (diffuse > 0.0)
{
spec = max(dot(reflectVec, viewVec), 0.0);
spec = pow(spec, 16.0);
}
LightIntensity = diffuseContribution * max(dot(lightVec, tnorm), 0.0)
+ specularContribution * spec;
//Get x, y,z coordinates of each vertex
MCposition = vec3(gl_Vertex);
//Send normal information
normal = gl_Normal;
//Send texture information
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
}
//The fragment shader
//Receiving data from the application
//the values of the uniform variables are derived from the opengl program
uniform vec3 BrickColor, MortarColor;
uniform vec3 BrickSize;
uniform vec3 BrickPct;
//sending data to fragment shader
varying vec3 MCposition;
varying float LightIntensity;
varying vec3 normal;
void main (void)
{
vec3 color, lightColor, finalColor;
vec3 position, useBrick ;
vec3 zero = vec3(0.0,0.0,0.0);
position = MCposition / BrickSize;
//Code to set Mortar color to the top and botom faces of the cube
if((normal.x==0.0)&&(normal.z==0.0))
finalColor = MortarColor;
else{ //The other four sides
//Code to shift the brick in the alternate rows by half a brick
if (fract(position.y * 0.5) > 0.5){
position.x += 0.5;
}
else //shift the bricks in the z direction
position.z += 0.5;
position = fract(position);
//useBrick = step(position, BrickPct);
//Using smooth step for antialiasing
useBrick = smoothstep(BrickPct, position, zero);
//Setting color to the brick shader based on step function
color = mix(MortarColor, BrickColor, useBrick.x * useBrick.y * useBrick.z);
}
//add light intensity and set color
color *= LightIntensity;
gl_FragColor = vec4 (color, 1.0);
}