The Concert Experience

Tim Wirtz Final Project

Project Description

I have long history in music, and for my final project, I wanted to construct an experience like going to a concert. There would be lights, and crowds, and a band on stage playing instruments. The scene formed quickly and soon developed into a full concert. The user is able to navigate the world, and see the performance from any angle, including the players on stage.

Project Controls


The implementation was composed of 3 different concepts that will be explained below. I first began by creating the "world," and setting a stage on top of it. I used different obj files to create the stage and the truss (stage ceiling). I then modeled people to go on the stage and in the crowd. They each have different motions, as the ones on stage are playing instruments and the others are waving along.

I then put spotlights on stage and animated them to move with the cans I had build. They flowed seamlessly from the stage into the crowd, lighting everyone up with different colors such as at a real concert.

Technologies Used

Heirarchical Modeling

I used heirarchical modeling to create almost everything in the world. Most of the world consists of transformed cubes and spheres to create what I desire. The stage consists of a cube on top of the "world" (another cube), with another transformed obj file above it (the truss). There were also lights that were developed that moved along the x-axis. I thought about containing more axis', but time constrained me.

The most intensive modeling I did was creating the people. Each person created had 9 different pivot points that needed to be placed or animated correctly. I originally wanted to animate a guitarist playing, a bassist plucking, and a drummer drumming. The drums, however, were much too laborous for the program to handle, and were eventually scrapped. So, I had the drummer lead the crowd in waving back and forth, and I had the bassist plucking, and the guitarist animating his arm to be playing

Finally, I ran a loop to produce the crowd of people, who would be copying the drummers animation and waving their arms back and forth with him.

Multiple Object Obj Files

The base code that we were given only loaded one shape from the obj files that we imported. However, I needed to use files (such as the guitar and the bass) that consisded of more then one object. So, I modified the Shape code to load meshes by an input integer. I would then run a for loop in the main code to load all objects from the file, and later do the same to draw them all together.

One thing I had to keep in mind was the resize function would orient all of the objects at the origin, so with the multi-object files I could not use the resize function. I would just need to scale and rotate them according the the specifications I needed.


The lighting was probably one of the more challenging pieces of the puzzle that was implemented. The main issue was the fact that I wanted very specific spotlights that could change direction with a the lights built into the stage.

I started by giving all of the lights positions, directions, and colors that were passed to the fragment shader. In the fragment shader, I would perform calculations to see if the light was "pointing" in the direction of the pixel that was being considered, if it was within a 30 degree circle, the point was lit with that specific color.

The final piece of the puzzle was changing the direction angle with the animated lights on stage. For this, I researched point rotation in the xy-plane, and recreated this rotation in the yz-plane. The reason for this was because I was rotating in the x-plane, so point locations had to be determined by manipulating the y and z points of the direction vector. I then used this point rotation to follow the same rotation that the animated lights were performing on stage.

Challenges Encountered and Lessons Learned

The most challenging parts of the assignment were the heirarchical modeling of the musicians on stage, and the multiple light sources that were animated. The proper way to rotate items in a heirarchical model is very difficult to grasp and to do well, and this took a lot of time to master. The biggest thing that I learned in this project (as well as other projects) is that order does matter, and rotation placement is very key. If either of these things are off, the object you are working with will not perform the way you would like it.

In the same way, the lighting was challenging because I had to learn how to work with multiple lights hitting the same area, and how to deal with each point being affected by each light. On top of all this, the light directions were moving, so the lighting never stayed the same. Through this experience, I learned a lot about how lighting in graphics works, and how to compute direction vectors based on animation.


A video of the concert in action can be found below:

...and also here if the above isn't' working.


OpenGL Tutorials

OpenGL Lighting

471 Lecture Slides/Notes - Zoe Wood