zyndor zyndor - 25 days ago 16
C++ Question

How to apply a normal map in OpenGL?

I'm learning to use normal maps (per pixel lighting?) in 2D graphics with OpenGL.

New to normal mapping, I managed to wrap my head around the Sobel operator and the generation of normal maps (mostly thanks to this), that is creating a (2D) array of normals from a (2D) array of pixel data.

(Most of the tutorials and forum threads that I have found were specific to 3D uses and modelling software. I aim to implement this functionality myself, in C++.)


  • What do I do once I've got the normal
    map?

  • Do I need to register it with
    OpenGL?

  • Does it need to be associated
    with the texture, if yes, how is it
    done?

  • How is it mapped to a 2D
    textured quad?

  • (Is this something that
    I can do without shaders / GLSL?)


Answer

I recommend you look at:

This nvidia presentation on bumb mapping

I haven't looked at this for a while, but I remember it going over most of the details in implementing a bump map shader, should get a few ideas running.

This other nvidia tutorial for implementing bump mapping in the cg shader langauge

This bump mapping tutorial might also be helpful.

I know all these are not for full normal mapping but they're a good start.

Also, while there are differences in shader languages it shouldn't be to hard to convert formulers between them if you want to use GLSL.

As ybungalobill said, you can do it without shaders but unless you are working on an educational project (for your education) or a particular embedded device, I have no idea why the hell you would want to - but if you do need to this is where you want to look, it was written before shaders, and updated to reference them later.

Comments