Bump mapping using Ray tracing

Hi guys, I’m a very begginer in computer graphics programming. Quite familiar with visual c++ but never even once write an opengl code. Now I have a school project to make an opengl program which implement bump mapping using ray tracing on mathemathical 3D object. I try to explain the problem as clear as possible with my limited English.

A few years ago someone in my shool has already made it using classic height field bump mapping method - if you already knew it, just pass to next paragraph. This method calculates normal vectors of object’s surface as new height field. Then this new surface’s normal is used to calculate diffuse and specular lightning. This calculation is implemented on every pixel on the object’s surface.

But this method has a serious weakness. If the 3D object is maped on 2D surface, the effect doesn’t work at the edge of the object at all (it’s still perfectly smooth, since it’s a mathemathical one). This is caused the method only change the normal vectors, and the bump effect is completely an eye illusion.

The project objection is to make bump mapping method that totally eliminates that weakness.

Is there anyone here has a concept how the algorythm will work? Or perhaps there’s already a reference for this method?


bump mapping just modify the normal of the surface. the geometry is not moved so the edge of the object are still flat.
the effect you want is called displacement mapping.
it work with an height field too but modify the normals and the fragments position.

the current opengl hardware won’t help you ( http://www.opengl.org/discussion_boards/ubb/Forum3/HTML/009932.html )

if you use ray tracing, you have to implement an intersection method which take care of the displacement… not very easy

Bumpmapping is only perturbing normal vectors. The geometry doesn’t change, if it’s flat, it remains flat.
Sounds like you need to implement displacement mapping.
The simplest method is to generate a heavily refined geometry using the base geometry displaced by the height informations on the texture.
Raytrace the result and you’re done.
OpenGL is not involved, except if you want a fast preview of the mesh.

edit: Perfect double post.

[This message has been edited by Relic (edited 07-22-2003).]

Wow, I never thought that it’ll be that complicated. sigh
Anyway, thanks a lot for your help guys. I really really appreciate it.