Sign in to follow this  
gedditoffme

OpenGL Controlling the degree of the specular, diffuse, ambient

Recommended Posts

Hello, I've written a basic model loader and viewer for anim8or files. I'm now trying to get more control over the amounts that the specular, diffuse and ambient variables are used. For example: turning down the amount of specular shine on something so it doesn't look so plastic. Anim8or has this support, but I can't find it in OpenGL. How can I do this? Similarly, when modulating textures, is there a way to control how much of the colour shows through? I want the specular effects of lighting and some control over the colour, but at the moment the model is far too dark, far too affected by the diffuse component. How do I do these?

Share this post


Link to post
Share on other sites
Well, there is no built in lighting support in OpenGL beyond basic per-vertex lighting (which looks not-so-good by today's standards). If you want per-pixel lighting with support for things like normal mapping, you'll have to either code it yourself or get some form of library which does it for you.

However, you can change the specular, diffuse and ambient intensities for the built-in per-vertex lighting with the function glLightfv().
Detailed explanation of glLightfv().


float specular[4]={1.0f, 0.0f, 0.0f, 0.0f};
float diffuse[4]={0.0f, 1.0f, 0.0f, 0.0f};
float ambient[4]={0.2f, 0.2f, 0.2f, 0.2f};

glLightfv(GL_LIGHT0, GL_SPECULAR, specular);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);



Share this post


Link to post
Share on other sites
Not sure I explained what I meant properly. I'm not looking for bump maps or anything of the like, just more control over how brightly it shows the 'shine' of specular, or the diffuse. Those glLightfv(GL_LIGHT0, GL_SPECULAR, specular); commands will control the colour of the specular light, not the amount of specular it shows in the material, in comparison to the ambient, diffuse components.

The other problem was when modulating (combining textures with the colours of the material they project onto): is there a way to control how much of each component is visible in the final render. For example: a check on a red surface, can I make it so the surface is 95% check with only a hint of red, of vice-versa.

Share this post


Link to post
Share on other sites
Quote:
Original post by elFarto
The glMaterialf function is where you want to look.

Regards
elFarto


I don't see how that will help. As I said, I don't want to change the colour of the lights or anything like that, I want to change how much weight is given to each parameter in the lighting equation for each material. Shininess isn't what I'm looking for either: that controls both the brightness and the area that a specular shine covers.

Share this post


Link to post
Share on other sites
elfarto's suggestion is a good one for basic starters (that the author of anima8or likely started with, if I force myself to make a guess, and probably still uses that stuff as a basis?!).

Hopefully, you may see how it could help if you look at the "Define the material properties of the objects being illuminated" part of this old thing:

http://fly.cc.fer.hr/~unreal/theredbook/chapter06.html

...it may give you ideas...

As an Aside: I recall having to use an opengl extension to apply specular highlights to materials with textures...'twas many moons ago (So you may want to check if this feature has been promoted to core gl by now if you decide to use it).

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this