Due 9/22 at 11:59pm Chicago time
The purpose of this
project is to learn about GLSL shaders by experimenting with various
GLSL
shaders.
There is a long history of literary characters interacting with
talking heads - from the Brothers Grimm story of Snow White and the
Queen with her 'mirror mirror on the wall' through the 2-way television
screens of George Orwell's 1984.
In
this project you will implement your own head on your computer screen
that you can talk to, although it doesn't need to talk back.
You
should write 5
shaders to modify the look of the head on your screen - 3 fragment
shaders and 2 vertex shaders. You should not just be re-implementing
existing shaders - you need to add something new to each of the
shaders. These should not be random shaders thrown together - It is
good to have a theme - e.g. the examples given above.
The user should be
able to switch between the various shaders on the fly so the
contribution of each shader can be seen in isolation from the others
(e.g. the number keys might be a good way to do this)
For this project you
should use GLSL only so everyone has a common comparable set of code,
no CUDA, no other shading languages. We will get to CUDA in Project 2,
and people will be free to pick their shading language in Project 3.
Here is a sample
program including a sample head that you can use as a starting point.
You can use this head model or you can make your own. The head here is
an obj file which is loaded in using Bob Kooima's obj loader. This
program uses three simple shaders. Pressing 1 shows an environment map
in the fragment shader and slightly deforms the head using a vertex
shader. Pressing 2 shows a toon shader. The head turns to follow the
mouse in the window so you can see the various sides of the head.
Makefile
for OS-X
Makefile
for linux
To compile under visual studio 6 under XP I needed to grab glext.h and
add it into the standard visual studio include files. I added
-DCONF_NO_PNG -DCONF_NO_JPG to the C/C++ section of the Project
settings so the object loader wouldnt need those libraries.
If you create five decent shaders with some novelty in each one then
you will get a B. To get an A, you need to combine these shaders
together, possibly with more shaders, to make the resulting head look
really cool.
To turn in your project you should set up a web page describing your
work, including the well-commented source code and required files to be
able to compile and run your program, and some screendumps showing what
your application should look like when its running. You should then
email andy with the location of this website before the deadline.
It
would probably be a good idea to put a backup copy of the web page at a
second website just in case I can't get to the first one.
As
part of this web page you should describe each shader and say what is
new about it. Other people should be able to read your web page and
understand how they can make use of all your cool shader ideas. This
way we can share these methods with the rest of the class.