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);
}

Source Code