Hi,
I'm very new to this whole thing so I hope you can bare with me.
I am an English student studying computer science at university.
As my final year project (important!) I have decided to attempt to program a simple tone mapping algorithm for HDR images in GPU hardware.
At the moment I am still at the research stage of my project, although I am behind and eager to move onto programming.
Currently I am completely confused and I am sending this e-mail hoping that someone can maybe clear things up for me.
The aim of my project seems simple. I want to open up some form of HDR image and apply a very simple tone mapping algorithm to the image data, this will be a global algorithm that applies the same mapping calculation to every pixel giving a set of new pixel values within a range displayable on a standard monitor. Once the new image data is produced I want to save and/or display the new image. The idea is to program all of this in hardware so it can be performed at run-time.
So far I am lost in the world of GPU programming. I have found information on the OpenEXR format and information about the Cg programming language although even after reading over the information I seem to be getting no-where.
Just so you know I am running windows XP on a new computer with a NVIDIA GeForce FX 5200 graphics card. I hope this is sufficient for me to do my project on, although I know linux may be better as far as the programming goes I think everything is compatible with windows, if anyone knows otherwise it wud be helpful for me to find out earlier rather than later.
My understanding so far is as follows:
Cg is 'C for graphics' so it is basically a programming language that allows me to program the GPU.
OpenEXR is a file format - as in .exr for HDR images. So picture.exr is a HDR image just like picture.hdr would be.
This makes sense to me, so I've downloaded and installed the following:
OpenEXR-1.2.1-win32
and
CgSetup_1.3.0408.0400
Immediately I am lost, I now have an OpenEXR folder which contains lots of C++ code examples and its own libraries.
I also have Cg installed on my computer giving me a new compiler (cgc) that compiles Cg programs. (Does this compile programs that are then run directly on the GPU?)
So, what exactly do I need to do? I am really confused at this point, this is what I am currently thinking:
a) Should I forget Cg all together? Can I successfully program what I want in C++ using the OpenEXR file format to open .exr files and apply the algorithm to these in a C++ program? I would compile this with a gcc compiler...does this mean it isn't hardware at all and I am just programming software or the CPU rather than the GPU??
b) Should I try to learn Cg programming and use the OpenEXR format within a Cg program...open .exr files here and apply the algorithm etc. compiling this program with cgc and running it on the GPU??
c) Am I on the wrong track with OpenEXR or Cg or the whole thing???
If anyone can offer any general help or advice or answers to these random questions it would help me a great deal and I would be forever grateful.
Also, if anyone has any links to helpful (and basic/beginner) tutorials for Cg or OpenEXR besides the official ones on the website they would help me out a lot. I am willing to buy any books that people can recommend as well.
I really do have no knowledge of this field apart from a few days research and reading so the simplest most basic advice would probably be most beneficial.
Thank you
Dan